Class: URBANopt::Reporting::DefaultReports::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/urbanopt/reporting/default_reports/validator.rb

Constant Summary collapse

@@schema =
nil

Instance Method Summary collapse

Constructor Details

#initializeValidator

Initialize the root directory



50
51
52
53
54
55
56
57
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 50

def initialize
  super

  @root_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..'))

  @instance_lock = Mutex.new
  @@schema ||= schema
end

Instance Method Details

#csv_headersObject

get csv headers from csv schema



83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 83

def csv_headers
  # read scenario csv schema headers
  scenario_csv_schema = open(File.expand_path('schema/scenario_csv_columns.txt', File.dirname(__FILE__))) # .read()

  scenario_csv_schema_headers = []
  File.readlines(scenario_csv_schema).each do |line|
    l = line.delete("\n")
    a = l.delete("\t")
    scenario_csv_schema_headers << a
  end

  return scenario_csv_schema_headers
end

#files_dirObject

Return the absolute path of the default reports files



60
61
62
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 60

def files_dir
  File.absolute_path(File.join(@root_dir, 'lib/urbanopt/reporting/default_reports/'))
end

#schemaObject

return schema



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 70

def schema
  @instance_lock.synchronize do
    if @@schema.nil?
      File.open(schema_file, 'r') do |f|
        @@schema = JSON.parse(f.read, symbolize_names: true)
      end
    end
  end

  @@schema
end

#schema_fileObject

return path to schema file



65
66
67
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 65

def schema_file
  File.join(files_dir, 'schema/scenario_schema.json')
end

#schema_valid?Boolean

check if the schema is valid

Returns:

  • (Boolean)


109
110
111
112
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 109

def schema_valid?
  metaschema = JSON::Validator.validator_for_name('draft6').metaschema
  JSON::Validator.validate(metaschema, @@schema)
end

#schema_validation_errorsObject

return detailed schema validation errors



115
116
117
118
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 115

def schema_validation_errors
  metaschema = JSON::Validator.validator_for_name('draft6').metaschema
  JSON::Validator.fully_validate(metaschema, @@schema)
end

#validate(schema, data) ⇒ Object

validate data against schema

parameters:

schema - Hash - A hash of the JSON scenario_schema. data - Hash - A hash of the data to be validated against scenario_schema.



104
105
106
# File 'lib/urbanopt/reporting/default_reports/validator.rb', line 104

def validate(schema, data)
  JSON::Validator.fully_validate(schema, data)
end