Class: GrapeOAS::Introspectors::EntityIntrospectorSupport::DiscriminatorHandler
- Inherits:
-
Object
- Object
- GrapeOAS::Introspectors::EntityIntrospectorSupport::DiscriminatorHandler
- Defined in:
- lib/grape_oas/introspectors/entity_introspector_support/discriminator_handler.rb
Overview
Handles discriminator fields in entity inheritance for polymorphic schemas.
Class Method Summary collapse
-
.find_parent_entity(entity_class) ⇒ Class?
Finds the parent entity class if one exists.
Instance Method Summary collapse
-
#apply(schema) ⇒ Object
Applies discriminator field to the schema if one is defined.
-
#discriminator? ⇒ Boolean
Checks if this entity has a discriminator field.
-
#find_discriminator_field ⇒ String?
Finds the discriminator field name from entity exposures.
-
#initialize(entity_class) ⇒ DiscriminatorHandler
constructor
A new instance of DiscriminatorHandler.
Constructor Details
#initialize(entity_class) ⇒ DiscriminatorHandler
Returns a new instance of DiscriminatorHandler.
16 17 18 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/discriminator_handler.rb', line 16 def initialize(entity_class) @entity_class = entity_class end |
Class Method Details
.find_parent_entity(entity_class) ⇒ Class?
Finds the parent entity class if one exists.
12 13 14 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/discriminator_handler.rb', line 12 def self.find_parent_entity(entity_class) EntityIntrospectorSupport.find_parent_entity(entity_class) end |
Instance Method Details
#apply(schema) ⇒ Object
Applies discriminator field to the schema if one is defined.
23 24 25 26 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/discriminator_handler.rb', line 23 def apply(schema) discriminator_field = find_discriminator_field schema.discriminator = discriminator_field if discriminator_field end |
#discriminator? ⇒ Boolean
Checks if this entity has a discriminator field.
31 32 33 34 35 36 37 38 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/discriminator_handler.rb', line 31 def discriminator? exposures.any? do |exposure| doc = exposure.documentation || {} doc[:is_discriminator] || doc["is_discriminator"] end rescue NoMethodError false end |
#find_discriminator_field ⇒ String?
Finds the discriminator field name from entity exposures.
43 44 45 46 47 48 49 50 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/discriminator_handler.rb', line 43 def find_discriminator_field exposures.each do |exposure| doc = exposure.documentation || {} is_discriminator = doc[:is_discriminator] || doc["is_discriminator"] return exposure.key.to_s if is_discriminator end nil end |