class Openapi3Parser::Document::ReferenceRegistry

Attributes

factories_by_type[R]
sources[R]

Public Class Methods

new() click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 8
def initialize
  @sources = []
  @factories_by_type = {}
end

Public Instance Methods

factories() click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 19
def factories
  factories_by_type.values.flatten
end
factory(object_type, source_location) click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 37
def factory(object_type, source_location)
  factories_by_type[object_type]&.find do |f|
    f.context.source_location == source_location
  end
end
freeze() click to toggle source
Calls superclass method
# File lib/openapi3_parser/document/reference_registry.rb, line 13
def freeze
  sources.freeze
  factories_by_type.freeze.each(&:freeze)
  super
end
register(unbuilt_factory, source_location, reference_factory_context) click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 23
def register(unbuilt_factory, source_location, reference_factory_context)
  register_source(source_location.source)
  object_type = unbuilt_factory.object_type
  existing_factory = factory(object_type, source_location)

  return existing_factory if existing_factory

  build_factory(
    unbuilt_factory,
    source_location,
    reference_factory_context
  ).tap { |f| register_factory(object_type, f) }
end

Private Instance Methods

build_factory(unbuilt_factory, source_location, reference_factory_context) click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 56
def build_factory(unbuilt_factory,
                  source_location,
                  reference_factory_context)
  next_context = NodeFactory::Context.resolved_reference(
    reference_factory_context,
    source_location: source_location
  )

  if unbuilt_factory.is_a?(Class)
    unbuilt_factory.new(next_context)
  else
    unbuilt_factory.call(next_context)
  end
end
register_factory(object_type, factory) click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 51
def register_factory(object_type, factory)
  factories_by_type[object_type] ||= []
  factories_by_type[object_type] << factory
end
register_source(source) click to toggle source
# File lib/openapi3_parser/document/reference_registry.rb, line 47
def register_source(source)
  sources << source unless sources.include?(source)
end