class Argo::SchemaFactory
Constants
- NON_SUBSCHEMA_PROPERTIES
Public Class Methods
new(dereferencer)
click to toggle source
# File lib/argo/schema_factory.rb, line 9 def initialize(dereferencer) @dereferencer = dereferencer end
Public Instance Methods
build(subgraph, route = [])
click to toggle source
# File lib/argo/schema_factory.rb, line 15 def build(subgraph, route = []) Schema.new( description: extract_one(subgraph, :description), title: extract_one(subgraph, :title), schemas: subschemas(subgraph, route), type: type(subgraph), properties: properties(subgraph), spec: extract_one(subgraph, :$schema), route: route ) end
element_kind(key)
click to toggle source
# File lib/argo/schema_factory.rb, line 39 def element_kind(key) NON_SUBSCHEMA_PROPERTIES.include?(key) ? key.to_sym : :subschema end
extract(subgraph, kind)
click to toggle source
# File lib/argo/schema_factory.rb, line 43 def extract(subgraph, kind) subgraph.select { |k, _| element_kind(k) == kind } end
extract_one(subgraph, kind, default: nil)
click to toggle source
# File lib/argo/schema_factory.rb, line 47 def extract_one(subgraph, kind, default: nil) _, v = subgraph.find { |k, _| element_kind(k) == kind } v || default end
properties(subgraph)
click to toggle source
# File lib/argo/schema_factory.rb, line 61 def properties(subgraph) required_fields = extract_one(subgraph, :required, default: []) factory = PropertyFactory.new(@dereferencer, required_fields) extract_one(subgraph, :properties, default: {}). map { |k, v| [k, reference?(v) ? dereference(v) : factory.build(v, name: k)] }. to_h end
subschemas(subgraph, route)
click to toggle source
# File lib/argo/schema_factory.rb, line 52 def subschemas(subgraph, route) extract(subgraph, :subschema). inject({}) { |h, (k, v)| h.merge(k => build(v, route + [k])) } end
type(subgraph)
click to toggle source
# File lib/argo/schema_factory.rb, line 57 def type(subgraph) extract_one(subgraph, :type, default: :object).to_sym end