module ADIWG::Mdtranslator::Readers::MdJson
Public Class Methods
readFile(file, hResponseObj)
click to toggle source
# File lib/adiwg/mdtranslator/readers/mdJson/mdJson_reader.rb, line 34 def self.readFile(file, hResponseObj) # parse mdJson file begin hMdJson = JSON.parse(file) rescue JSON::JSONError => err hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: Parsing mdJson Failed - see following message(s):\n' hResponseObj[:readerStructureMessages] << err.to_s.slice(0, 300) hResponseObj[:readerStructurePass] = false return {} end # file must contain an mdJson object if hMdJson.empty? hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: object is empty' hResponseObj[:readerStructurePass] = false return {} end # schema - (required) unless hMdJson.has_key?('schema') hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: schema definition is missing ' hResponseObj[:readerStructurePass] = false return {} end # schema - name (required) (must = 'mdJson') unless hMdJson['schema'].has_key?('name') hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: schema element is missing' hResponseObj[:readerStructurePass] = false return {} end schemaName = hMdJson['schema']['name'] if schemaName.nil? || schemaName == '' hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: schema name is missing' hResponseObj[:readerStructurePass] = false return {} end unless schemaName.downcase == 'mdjson' hResponseObj[:readerStructureMessages] << "ERROR: mdJson reader: schema name is '#{schemaName}', should be mdJson" hResponseObj[:readerStructurePass] = false return {} end # schema - version (required) unless hMdJson['schema'].has_key?('version') hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: schema version element is missing' hResponseObj[:readerStructurePass] = false return {} end requestedVersion = hMdJson['schema']['version'] if requestedVersion.nil? || requestedVersion == '' hResponseObj[:readerStructureMessages] << 'ERROR: mdJson reader: schema version is missing' hResponseObj[:readerStructurePass] = false return {} end # schema - 2.0.0 =< requested version =< current version currentVersion = Gem::Specification.find_by_name('adiwg-mdjson_schemas').version.to_s hResponseObj[:readerVersionRequested] = requestedVersion hResponseObj[:readerVersionUsed] = currentVersion aCurVersion = currentVersion.split('.') aReqVersion = requestedVersion.split('.') approved = false if aReqVersion[0] == aCurVersion[0] if aReqVersion[1] <= aCurVersion[1] approved = true end end unless approved approvedVersion = aCurVersion[0] + '.0.0' hResponseObj[:readerStructureMessages] << "ERROR: mdJson reader: schema version '#{requestedVersion}' is not supported" hResponseObj[:readerStructureMessages] << "... mdTranslator supports mdJson schema version '#{approvedVersion}' through '#{currentVersion}'" hResponseObj[:readerStructurePass] = false return {} end # validate file against mdJson schema definition unless hResponseObj[:readerValidationLevel] == 'none' validate(hMdJson, hResponseObj) unless hResponseObj[:readerValidationPass] return {} end end # unpack the mdJson into the internal object return MdJson.unpack(hMdJson, hResponseObj) end
validate(file, responseObj)
click to toggle source
validate json against the adiwg-json_schemas only a single schema version is supported at this time
# File lib/adiwg/mdtranslator/readers/mdJson/mdJson_validator.rb, line 25 def self.validate(file, responseObj) bStrict = false if responseObj[:readerValidationLevel] == 'strict' bStrict = true end ADIWG::MdjsonSchemas::Utils.load_schemas(false) begin aErrors = [] aErrors = JSON::Validator.fully_validate('schema.json', file, :strict => bStrict) unless aErrors.empty? responseObj[:readerValidationMessages] << 'ERROR: mdJson reader: schema validation Failed - see following message(s)' responseObj[:readerValidationMessages] << aErrors responseObj[:readerValidationPass] = false return end rescue JSON::Schema::ValidationError responseObj[:readerValidationMessages] << 'ERROR: mdJson reader: schema validation Failed - see following message(s)' responseObj[:readerValidationMessages] << $!.message responseObj[:readerValidationPass] = false return end end