Class: JSON::SchemaGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/json/schema_generator.rb,
lib/json/schema_generator/version.rb,
lib/json/schema_generator/statement_group.rb,
lib/json/schema_generator/brute_force_required_search.rb

Defined Under Namespace

Classes: BruteForceRequiredSearch, StatementGroup

Constant Summary collapse

DRAFT3 =
'draft-03'
DRAFT4 =
'draft-04'
DEFAULT_VERSION =
'draft4'
SUPPORTED_VERSIONS =
['draft3', 'draft4']
VERSION =
"0.0.9"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, opts = {}) ⇒ SchemaGenerator

Returns a new instance of SchemaGenerator.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/json/schema_generator.rb', line 18

def initialize name, opts = {}
  version = opts[:schema_version] || DEFAULT_VERSION
  # Unfortunately json-schema.org and json-schema (gem) use different version strings
  if ['draft3', 'draft-03'].include? version.to_s.downcase
    @version = DRAFT3
  elsif ['draft4', 'draft-04'].include? version.to_s.downcase
    @version = DRAFT4
  else
    abort "Unsupported schema version: #{version}"
  end

  @defaults = opts[:defaults]

  @buffer = StringIO.new
  @name = name
end

Class Method Details

.generate(name, data, opts = {}) ⇒ Object



12
13
14
15
# File 'lib/json/schema_generator.rb', line 12

def generate name, data, opts = {}
  generator = JSON::SchemaGenerator.new name, opts
  generator.generate data
end

Instance Method Details

#generate(raw_data) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/json/schema_generator.rb', line 35

def generate raw_data
  data = JSON.load(raw_data)
  @brute_search = BruteForceRequiredSearch.new data

  statement_group = StatementGroup.new
  statement_group.add "\"$schema\": \"http://json-schema.org/#{@version}/schema#\""
  statement_group.add "\"description\": \"Generated from #{@name} with shasum #{Digest::SHA1.hexdigest raw_data}\""
  case data
  when Array
    $stop = true
    create_array(statement_group, data, detect_required(data))
  else
    create_hash(statement_group, data, detect_required(data))
  end
  @buffer.puts statement_group
  result
end