class Imagemaster3000::Definitions::Parser

Constants

SCHEMA

Public Class Methods

parse_image_definitions() click to toggle source
# File lib/imagemaster3000/definitions/parser.rb, line 10
def parse_image_definitions
  definition_files = Dir.glob(File.join(Imagemaster3000::Settings[:'definitions-dir'], '*.json')).sort
  logger.debug "Found definition files: #{definition_files.inspect}"
  definition_files.map { |file| parse file }.compact
end

Private Class Methods

parse(file) click to toggle source
# File lib/imagemaster3000/definitions/parser.rb, line 18
def parse(file)
  logger.debug "Parsing file #{file.inspect}"
  json = File.read file
  validate json

  hash = JSON.parse json, symbolize_names: true
  Imagemaster3000::Entities::Image.new hash
rescue Imagemaster3000::Errors::ArgumentError, Imagemaster3000::Errors::ParsingError => ex
  logger.error "Parsing error occured while reading definition #{file.inspect}: #{ex.message}. Skipping."
  nil
end
validate(json) click to toggle source
# File lib/imagemaster3000/definitions/parser.rb, line 30
def validate(json)
  logger.debug "Validating json\n#{json}"
  JSON::Validator.schema_reader = JSON::Schema::Reader.new(accept_uri: false, accept_file: true)
  JSON::Validator.validate!(SCHEMA, json, json: true)
rescue JSON::Schema::JsonParseError => ex
  raise Imagemaster3000::Errors::ParsingError, ex
rescue JSON::Schema::ValidationError => ex
  raise Imagemaster3000::Errors::ParsingError, "JSON is not valid according to JSON schema: #{ex.message}"
end