Class: GrapeOAS::TypeResolvers::Registry

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/grape_oas/type_resolvers/registry.rb

Overview

Registry for managing type resolvers that convert Grape’s stringified types back to OpenAPI schemas.

Resolvers are checked in order until one returns true from ‘handles?`. This allows custom resolvers to be inserted with higher priority.

Examples:

Registering a custom resolver

GrapeOAS.type_resolvers.register(MyCustomResolver)

Inserting before an existing resolver

GrapeOAS.type_resolvers.register(HighPriorityResolver, before: ArrayResolver)

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



20
21
22
# File 'lib/grape_oas/type_resolvers/registry.rb', line 20

def initialize
  @resolvers = []
end

Instance Method Details

#build_schema(type) ⇒ ApiModel::Schema?

Builds a schema using the appropriate resolver.

Parameters:

  • type (String, Class, Object)

    The type to build schema for

Returns:



65
66
67
68
69
70
# File 'lib/grape_oas/type_resolvers/registry.rb', line 65

def build_schema(type)
  resolver = find(type)
  return nil unless resolver

  resolver.build_schema(type)
end

#clearself

Clears all registered resolvers.

Returns:

  • (self)


97
98
99
100
# File 'lib/grape_oas/type_resolvers/registry.rb', line 97

def clear
  @resolvers.clear
  self
end

#each {|resolver| ... } ⇒ Object

Iterates over all registered resolvers.

Yields:

  • (resolver)

    Each registered resolver



83
84
85
# File 'lib/grape_oas/type_resolvers/registry.rb', line 83

def each(&)
  @resolvers.each(&)
end

#find(type) ⇒ Class?

Finds the first resolver that can handle the given type.

Parameters:

  • type (String, Class, Object)

    The type to resolve

Returns:

  • (Class, nil)

    The resolver class, or nil if none found



57
58
59
# File 'lib/grape_oas/type_resolvers/registry.rb', line 57

def find(type)
  @resolvers.find { |resolver| resolver.handles?(type) }
end

#handles?(type) ⇒ Boolean

Checks if any resolver can handle the given type.

Parameters:

  • type (String, Class, Object)

    The type to check

Returns:

  • (Boolean)


76
77
78
# File 'lib/grape_oas/type_resolvers/registry.rb', line 76

def handles?(type)
  @resolvers.any? { |resolver| resolver.handles?(type) }
end

#register(resolver, before: nil, after: nil) ⇒ self

Registers a type resolver class.

Parameters:

  • resolver (Class)

    Class that extends GrapeOAS::TypeResolvers::Base

  • before (Class, nil) (defaults to: nil)

    Insert before this resolver

  • after (Class, nil) (defaults to: nil)

    Insert after this resolver

Returns:

  • (self)


30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/grape_oas/type_resolvers/registry.rb', line 30

def register(resolver, before: nil, after: nil)
  validate_resolver!(resolver)

  if before
    insert_before(resolver, before)
  elsif after
    insert_after(resolver, after)
  else
    @resolvers << resolver unless @resolvers.include?(resolver)
  end

  self
end

#sizeInteger

Returns the number of registered resolvers.

Returns:

  • (Integer)


90
91
92
# File 'lib/grape_oas/type_resolvers/registry.rb', line 90

def size
  @resolvers.size
end

#to_aArray<Class>

Returns a list of registered resolvers.

Returns:

  • (Array<Class>)


105
106
107
# File 'lib/grape_oas/type_resolvers/registry.rb', line 105

def to_a
  @resolvers.dup
end

#unregister(resolver) ⇒ self

Unregisters a type resolver class.

Parameters:

  • resolver (Class)

    The resolver to remove

Returns:

  • (self)


48
49
50
51
# File 'lib/grape_oas/type_resolvers/registry.rb', line 48

def unregister(resolver)
  @resolvers.delete(resolver)
  self
end