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