class Jsonschema::Generator::Draft07

Draft 07

Attributes

options[R]
parsed_json[R]
raw_json[R]

Public Class Methods

new(raw_json, options = {}) click to toggle source
# File lib/jsonschema/generator/draft07.rb, line 9
def initialize(raw_json, options = {})
  @raw_json = raw_json
  @options = options
  @parsed_json = parse(raw_json)
end

Public Instance Methods

call() click to toggle source
# File lib/jsonschema/generator/draft07.rb, line 15
def call
  raise Error, 'Invalid Input. JSON expected' unless parsed_json

  { 'title' => ROOT_TITLE }.merge(generate(parsed_json))
end

Private Instance Methods

generate(input) click to toggle source
# File lib/jsonschema/generator/draft07.rb, line 31
def generate(input)
  case input
  when Hash
    generate_object(input)
  when Array
    generate_array(input)
  else
    Hash['type', TypeDeterminant.call(input)]
  end
end
generate_array(array) click to toggle source
# File lib/jsonschema/generator/draft07.rb, line 54
def generate_array(array)
  params = {
    'type' => 'array',
    'minItems' => array.size,
    'maxItems' => array.size,
    'items' => {},
  }

  array.each_with_object(params) do |elem, memo|
    memo['items'].merge!(generate(elem))
  end
end
generate_object(hash) click to toggle source
# File lib/jsonschema/generator/draft07.rb, line 42
def generate_object(hash)
  params = {
    'type' => 'object',
    'required' => hash.keys,
    'properties' => {},
  }

  hash.each_with_object(params) do |(key, value), memo|
    memo['properties'].merge!(Hash[key, generate(value)])
  end
end
parse(json) click to toggle source
# File lib/jsonschema/generator/draft07.rb, line 25
def parse(json)
  JSON.parse(json)
rescue StandardError
  nil
end