Module: Senko::Dialect

Defined in:
lib/senko/dialect.rb

Constant Summary collapse

DEFAULT =
:'2020-12'
DIALECT_MAP =
{
  'https://json-schema.org/draft/2020-12/schema' => :'2020-12',
  'https://json-schema.org/draft/2020-12/schema#' => :'2020-12',
  'https://json-schema.org/draft/2019-09/schema' => :'2019-09',
  'https://json-schema.org/draft/2019-09/schema#' => :'2019-09',
  'http://json-schema.org/draft-07/schema#' => :'draft-07',
  'http://json-schema.org/draft-07/schema' => :'draft-07',
  'http://json-schema.org/draft-06/schema#' => :'draft-06',
  'http://json-schema.org/draft-06/schema' => :'draft-06',
  'http://json-schema.org/draft-04/schema#' => :'draft-04',
  'http://json-schema.org/draft-04/schema' => :'draft-04'
}.freeze
SUPPORTED =
%i[2020-12 2019-09 draft-07 draft-06 draft-04].freeze

Class Method Summary collapse

Class Method Details

.detect(schema, explicit_draft = nil) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/senko/dialect.rb', line 24

def detect(schema, explicit_draft = nil)
  draft = explicit_draft || schema_draft(schema) || DEFAULT
  normalized = normalize_name(draft)
  unless SUPPORTED.include?(normalized)
    raise UnsupportedDialectError,
          "unsupported JSON Schema dialect: #{draft.inspect}"
  end

  normalized
end

.normalize_name(name) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/senko/dialect.rb', line 42

def normalize_name(name)
  case name
  when :'2020-12', :draft202012, '2020-12', 'draft202012'
    :'2020-12'
  when :'2019-09', :draft201909, '2019-09', 'draft201909'
    :'2019-09'
  when :'draft-07', :draft07, 'draft-07', 'draft07'
    :'draft-07'
  when :'draft-06', :draft06, 'draft-06', 'draft06'
    :'draft-06'
  when :'draft-04', :draft04, 'draft-04', 'draft04'
    :'draft-04'
  else
    name
  end
end

.schema_draft(schema) ⇒ Object



35
36
37
38
39
40
# File 'lib/senko/dialect.rb', line 35

def schema_draft(schema)
  return nil unless schema.is_a?(Hash)

  value = schema['$schema'] || schema[:$schema]
  DIALECT_MAP[value]
end