Module: StructuredStore::RefResolvers::Registry

Defined in:
lib/structured_store/ref_resolvers/registry.rb

Overview

This is the registry for JSON Schema $ref resolvers.

Class Method Summary collapse

Class Method Details

.matching_resolver(schema_inspector, property_name, context = {}) ⇒ RefResolver

Returns a resolver instance for the given schema property reference

Parameters:

  • schema_inspector (SchemaInspector)

    The JSON schema inspector

  • property_name (String, Symbol)

    The name of the property containing the reference

  • context (Hash) (defaults to: {})

    Optional context hash (default: {})

Returns:

  • (RefResolver)

    An instance of the appropriate resolver class for the reference

Raises:

  • (RuntimeError)

    If no matching resolver can be found for the reference



39
40
41
42
43
44
# File 'lib/structured_store/ref_resolvers/registry.rb', line 39

def matching_resolver(schema_inspector, property_name, context = {})
  property_schema = schema_inspector.property_schema(property_name)
  ref_string = property_schema['$ref'].to_s

  resolver_for_schema_hash(property_schema, schema_inspector, property_name, ref_string, context)
end

.register(klass) ⇒ Object

Registers a resolver class with a specific regular expression pattern.

Parameters:

  • klass (Class)

    The resolver class to register.

  • regexp (Regexp)

    The regular expression pattern to match against references.



19
20
21
22
# File 'lib/structured_store/ref_resolvers/registry.rb', line 19

def register(klass)
  @resolvers ||= {}
  @resolvers[klass] = klass.matching_ref_pattern
end

.resolver_for_schema_hash(schema_hash, parent_schema, property_name, ref_string, context = {}) ⇒ RefResolver

Returns a resolver instance for a schema hash (e.g., array items) Direct method that doesn’t require looking up properties

Parameters:

  • schema_hash (Hash)

    The schema hash (with potential $ref)

  • parent_schema (SchemaInspector)

    Parent schema for definition lookups

  • property_name (String)

    The property name for error messages

  • ref_string (String)

    The $ref string

  • context (Hash) (defaults to: {})

    Optional context hash (default: {})

Returns:

  • (RefResolver)

    An instance of the appropriate resolver class



55
56
57
58
# File 'lib/structured_store/ref_resolvers/registry.rb', line 55

def resolver_for_schema_hash(schema_hash, parent_schema, property_name, ref_string, context = {})
  klass = klass_factory(ref_string)
  klass.new(schema_hash, parent_schema, property_name, ref_string, context)
end

.resolversHash

Returns the Hash of registered resolvers If no resolvers have been registered, returns an empty Hash

Returns:

  • (Hash)

    Registered resolvers



11
12
13
# File 'lib/structured_store/ref_resolvers/registry.rb', line 11

def resolvers
  @resolvers || {}
end

.unregister(klass) ⇒ Class?

Unregisters a resolver class from the registry

Parameters:

  • klass (Class)

    The resolver class to remove from the registry

Returns:

  • (Class, nil)

    The removed resolver class or nil if not found



28
29
30
# File 'lib/structured_store/ref_resolvers/registry.rb', line 28

def unregister(klass)
  @resolvers.delete(klass)
end