Class: JSONSchemer::Draft202012::Vocab::Core::Vocabulary

Inherits:
Keyword
  • Object
show all
Defined in:
lib/json_schemer/draft202012/vocab/core.rb

Constant Summary

Constants included from Output

Output::FRAGMENT_ENCODE_REGEX

Instance Attribute Summary

Attributes inherited from Keyword

#parent, #parsed, #root, #value

Attributes included from Output

#keyword, #schema

Instance Method Summary collapse

Methods inherited from Keyword

#absolute_keyword_location, #error_key, #fetch, #initialize, #parsed_schema, #schema_pointer, #validate

Methods included from Output

#x_error

Constructor Details

This class inherits a constructor from JSONSchemer::Keyword

Instance Method Details

#parseObject



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

def parse
  value.each_with_object({}) do |(vocabulary, required), out|
    if VOCABULARIES.key?(vocabulary)
      out[vocabulary] = VOCABULARIES.fetch(vocabulary)
    elsif required
      raise UnknownVocabulary, vocabulary
    end
  end.tap do |vocabularies|
    schema.keywords = vocabularies.sort_by do |vocabulary, _keywords|
      VOCABULARY_ORDER.fetch(vocabulary, Float::INFINITY)
    end.each_with_object({}) do |(_vocabulary, keywords), out|
      out.merge!(keywords)
    end
    schema.keyword_order = schema.keywords.transform_values.with_index { |_keyword_class, index| index }
  end
end