Class: GrapeOAS::Introspectors::EntityIntrospector
- Inherits:
-
Object
- Object
- GrapeOAS::Introspectors::EntityIntrospector
- Extended by:
- Base
- Defined in:
- lib/grape_oas/introspectors/entity_introspector.rb
Overview
Introspector for Grape::Entity classes. Extracts schema information from entity exposures and documentation.
Constant Summary
Constants included from ApiModelBuilders::Concerns::OasUtilities
ApiModelBuilders::Concerns::OasUtilities::VALID_CONSTANT_PATTERN
Constants included from ApiModelBuilders::Concerns::TypeResolver
ApiModelBuilders::Concerns::TypeResolver::MULTI_TYPE_PATTERN, ApiModelBuilders::Concerns::TypeResolver::TYPED_ARRAY_PATTERN
Class Method Summary collapse
-
.build_schema(subject, stack: [], registry: {}) ⇒ ApiModel::Schema
Builds a schema from a Grape::Entity class.
-
.handles?(subject) ⇒ Boolean
Checks if the subject is a Grape::Entity class.
-
.resolve_entity_class(subject) ⇒ Class?
Resolves a subject to an entity class.
Instance Method Summary collapse
- #build_schema ⇒ Object
-
#initialize(entity_class, stack: [], registry: {}) ⇒ EntityIntrospector
constructor
A new instance of EntityIntrospector.
Methods included from Base
Methods included from ApiModelBuilders::Concerns::OasUtilities
extract_extensions, #extract_extensions, pluralize, #pluralize, underscore, #underscore, valid_constant_name?, #valid_constant_name?
Methods included from ApiModelBuilders::Concerns::TypeResolver
#build_array_items_schema, #build_schema_for_primitive, #derive_primitive_and_member, #extract_multi_types, #extract_typed_array_member, #grape_boolean_type?, #multi_type?, #resolve_schema_type
Constructor Details
#initialize(entity_class, stack: [], registry: {}) ⇒ EntityIntrospector
Returns a new instance of EntityIntrospector.
61 62 63 64 65 |
# File 'lib/grape_oas/introspectors/entity_introspector.rb', line 61 def initialize(entity_class, stack: [], registry: {}) @entity_class = entity_class @stack = stack @registry = registry end |
Class Method Details
.build_schema(subject, stack: [], registry: {}) ⇒ ApiModel::Schema
Builds a schema from a Grape::Entity class.
37 38 39 40 41 42 |
# File 'lib/grape_oas/introspectors/entity_introspector.rb', line 37 def self.build_schema(subject, stack: [], registry: {}) entity_class = resolve_entity_class(subject) return nil unless entity_class new(entity_class, stack: stack, registry: registry).build_schema end |
.handles?(subject) ⇒ Boolean
Checks if the subject is a Grape::Entity class.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/grape_oas/introspectors/entity_introspector.rb', line 16 def self.handles?(subject) return false unless defined?(Grape::Entity) return subject <= Grape::Entity if subject.is_a?(Class) return false unless subject.is_a?(String) || subject.is_a?(Symbol) const_name = subject.to_s return false unless const_name.match?(/\A[A-Z]/) return false unless Object.const_defined?(const_name, false) klass = Object.const_get(const_name, false) klass.is_a?(Class) && klass <= Grape::Entity rescue NameError false end |
.resolve_entity_class(subject) ⇒ Class?
Resolves a subject to an entity class.
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/grape_oas/introspectors/entity_introspector.rb', line 48 def self.resolve_entity_class(subject) return subject if subject.is_a?(Class) && defined?(Grape::Entity) && subject <= Grape::Entity return nil unless subject.is_a?(String) || subject.is_a?(Symbol) const_name = subject.to_s return nil unless Object.const_defined?(const_name, false) klass = Object.const_get(const_name, false) klass if klass.is_a?(Class) && defined?(Grape::Entity) && klass <= Grape::Entity rescue NameError nil end |
Instance Method Details
#build_schema ⇒ Object
67 68 69 70 71 72 73 74 75 |
# File 'lib/grape_oas/introspectors/entity_introspector.rb', line 67 def build_schema return cached_schema if cached_schema_available? return build_inherited_schema if inherits_with_discriminator? schema = initialize_or_reuse_schema return cycle_tracker.handle_cycle(schema) if cycle_tracker.cyclic_reference? cycle_tracker.with_tracking { populate_schema(schema) } end |