Class: GrapeOAS::Introspectors::Registry
- Inherits:
-
Object
- Object
- GrapeOAS::Introspectors::Registry
- Includes:
- Enumerable
- Defined in:
- lib/grape_oas/introspectors/registry.rb
Overview
Registry for managing introspectors that can build schemas from various sources. Allows third-party gems to register custom introspectors for new schema formats.
Instance Method Summary collapse
-
#build_schema(subject, stack: [], registry: {}) ⇒ ApiModel::Schema?
Builds a schema using the appropriate introspector.
-
#clear ⇒ self
Clears all registered introspectors.
-
#each {|introspector| ... } ⇒ Object
Iterates over all registered introspectors.
-
#find(subject) ⇒ Class?
Finds the first introspector that can handle the given subject.
-
#handles?(subject) ⇒ Boolean
Checks if any introspector can handle the given subject.
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#register(introspector, before: nil, after: nil) ⇒ self
Registers an introspector class.
-
#size ⇒ Integer
Returns the number of registered introspectors.
-
#to_a ⇒ Array<Class>
Returns a list of registered introspectors.
-
#unregister(introspector) ⇒ self
Unregisters an introspector class.
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
17 18 19 |
# File 'lib/grape_oas/introspectors/registry.rb', line 17 def initialize @introspectors = [] end |
Instance Method Details
#build_schema(subject, stack: [], registry: {}) ⇒ ApiModel::Schema?
Builds a schema using the appropriate introspector.
64 65 66 67 68 69 |
# File 'lib/grape_oas/introspectors/registry.rb', line 64 def build_schema(subject, stack: [], registry: {}) introspector = find(subject) return nil unless introspector introspector.build_schema(subject, stack: stack, registry: registry) end |
#clear ⇒ self
Clears all registered introspectors.
96 97 98 99 |
# File 'lib/grape_oas/introspectors/registry.rb', line 96 def clear @introspectors.clear self end |
#each {|introspector| ... } ⇒ Object
Iterates over all registered introspectors.
82 83 84 |
# File 'lib/grape_oas/introspectors/registry.rb', line 82 def each(&) @introspectors.each(&) end |
#find(subject) ⇒ Class?
Finds the first introspector that can handle the given subject.
54 55 56 |
# File 'lib/grape_oas/introspectors/registry.rb', line 54 def find(subject) @introspectors.find { |introspector| introspector.handles?(subject) } end |
#handles?(subject) ⇒ Boolean
Checks if any introspector can handle the given subject.
75 76 77 |
# File 'lib/grape_oas/introspectors/registry.rb', line 75 def handles?(subject) @introspectors.any? { |introspector| introspector.handles?(subject) } end |
#register(introspector, before: nil, after: nil) ⇒ self
Registers an introspector class.
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/grape_oas/introspectors/registry.rb', line 27 def register(introspector, before: nil, after: nil) validate_introspector!(introspector) if before insert_before(introspector, before) elsif after insert_after(introspector, after) else @introspectors << introspector unless @introspectors.include?(introspector) end self end |
#size ⇒ Integer
Returns the number of registered introspectors.
89 90 91 |
# File 'lib/grape_oas/introspectors/registry.rb', line 89 def size @introspectors.size end |
#to_a ⇒ Array<Class>
Returns a list of registered introspectors.
104 105 106 |
# File 'lib/grape_oas/introspectors/registry.rb', line 104 def to_a @introspectors.dup end |
#unregister(introspector) ⇒ self
Unregisters an introspector class.
45 46 47 48 |
# File 'lib/grape_oas/introspectors/registry.rb', line 45 def unregister(introspector) @introspectors.delete(introspector) self end |