Class: GrapeOAS::TypeResolvers::Registry
- Inherits:
-
Object
- Object
- GrapeOAS::TypeResolvers::Registry
- 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.
Instance Method Summary collapse
-
#build_schema(type) ⇒ ApiModel::Schema?
Builds a schema using the appropriate resolver.
-
#clear ⇒ self
Clears all registered resolvers.
-
#each {|resolver| ... } ⇒ Object
Iterates over all registered resolvers.
-
#find(type) ⇒ Class?
Finds the first resolver that can handle the given type.
-
#handles?(type) ⇒ Boolean
Checks if any resolver can handle the given type.
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#register(resolver, before: nil, after: nil) ⇒ self
Registers a type resolver class.
-
#size ⇒ Integer
Returns the number of registered resolvers.
-
#to_a ⇒ Array<Class>
Returns a list of registered resolvers.
-
#unregister(resolver) ⇒ self
Unregisters a type resolver class.
Constructor Details
#initialize ⇒ Registry
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.
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 |
#clear ⇒ self
Clears all registered resolvers.
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.
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.
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.
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.
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 |
#size ⇒ Integer
Returns the number of registered resolvers.
90 91 92 |
# File 'lib/grape_oas/type_resolvers/registry.rb', line 90 def size @resolvers.size end |
#to_a ⇒ Array<Class>
Returns a list of registered resolvers.
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.
48 49 50 51 |
# File 'lib/grape_oas/type_resolvers/registry.rb', line 48 def unregister(resolver) @resolvers.delete(resolver) self end |