Class: GrapeOAS::Introspectors::EntityIntrospectorSupport::DiscriminatorHandler

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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.

Parameters:

  • entity_class (Class)

    the entity class

Returns:

  • (Class, nil)

    the parent entity class or nil



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.

Parameters:



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.

Returns:

  • (Boolean)

    true if discriminator field exists



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_fieldString?

Finds the discriminator field name from entity exposures.

Returns:

  • (String, nil)

    the discriminator field name or nil



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