Class: GrapeOAS::Introspectors::EntityIntrospectorSupport::ExposureProcessor
- Inherits:
-
Object
- Object
- GrapeOAS::Introspectors::EntityIntrospectorSupport::ExposureProcessor
- Includes:
- ApiModelBuilders::Concerns::OasUtilities
- Defined in:
- lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb
Overview
Processes entity exposures and builds schemas from them.
Constant Summary
Constants included from ApiModelBuilders::Concerns::OasUtilities
ApiModelBuilders::Concerns::OasUtilities::VALID_CONSTANT_PATTERN
Instance Method Summary collapse
-
#add_exposures_to_schema(schema) ⇒ Object
Adds all exposures to a schema.
-
#build_property_schema(exposure, doc) ⇒ ApiModel::Schema
Builds the property schema for an exposure, routing nesting exposures to the inline-object path.
-
#conditional?(exposure) ⇒ Boolean
Checks if an exposure is conditional.
-
#determine_required(doc, exposure) ⇒ Boolean
Determines whether a property should be marked required.
-
#exposed?(_exposure) ⇒ Boolean
Checks if an exposure should be included in the schema.
-
#exposure_options(exposure) ⇒ Hash
Returns the options hash for an exposure.
-
#exposures ⇒ Array
Gets the exposures defined on the entity class.
-
#initialize(entity_class, stack:, registry:) ⇒ ExposureProcessor
constructor
A new instance of ExposureProcessor.
-
#merge_exposure?(exposure, doc, opts) ⇒ Boolean
Checks if an exposure is a merge exposure.
-
#parent_exposures(parent_entity) ⇒ Array
Gets the exposures defined on a parent entity.
-
#schema_for_exposure(exposure, doc) ⇒ ApiModel::Schema
Builds a schema for an exposure.
Methods included from ApiModelBuilders::Concerns::OasUtilities
extract_extensions, #extract_extensions, pluralize, #pluralize, underscore, #underscore, valid_constant_name?, #valid_constant_name?
Constructor Details
#initialize(entity_class, stack:, registry:) ⇒ ExposureProcessor
Returns a new instance of ExposureProcessor.
11 12 13 14 15 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 11 def initialize(entity_class, stack:, registry:) @entity_class = entity_class @stack = stack @registry = registry end |
Instance Method Details
#add_exposures_to_schema(schema) ⇒ Object
Adds all exposures to a schema.
20 21 22 23 24 25 26 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 20 def add_exposures_to_schema(schema) exposures.each do |exposure| next unless exposed?(exposure) add_exposure_to_schema(schema, exposure) end end |
#build_property_schema(exposure, doc) ⇒ ApiModel::Schema
Builds the property schema for an exposure, routing nesting exposures to the inline-object path. Wraps in array if doc is set.
63 64 65 66 67 68 69 70 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 63 def build_property_schema(exposure, doc) prop_schema = if nesting_exposure?(exposure) build_nesting_exposure_schema(exposure, doc) else schema_for_exposure(exposure, doc) end wrap_in_array_if_needed(prop_schema, doc) end |
#conditional?(exposure) ⇒ Boolean
Checks if an exposure is conditional.
84 85 86 87 88 89 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 84 def conditional?(exposure) conditions = exposure.instance_variable_get(:@conditions) || [] !conditions.empty? rescue NoMethodError false end |
#determine_required(doc, exposure) ⇒ Boolean
Determines whether a property should be marked required. Explicit doc takes precedence; conditional exposures default to false; unconditional exposures default to true.
117 118 119 120 121 122 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 117 def determine_required(doc, exposure) return doc[:required] unless doc[:required].nil? return false if conditional?(exposure) true end |
#exposed?(_exposure) ⇒ Boolean
Checks if an exposure should be included in the schema.
76 77 78 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 76 def exposed?(_exposure) true end |
#exposure_options(exposure) ⇒ Hash
Returns the options hash for an exposure.
106 107 108 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 106 def (exposure) exposure.instance_variable_get(:@options) || {} end |
#exposures ⇒ Array
Gets the exposures defined on the entity class.
31 32 33 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 31 def exposures EntityIntrospectorSupport.exposures(@entity_class) end |
#merge_exposure?(exposure, doc, opts) ⇒ Boolean
Checks if an exposure is a merge exposure.
97 98 99 100 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 97 def merge_exposure?(exposure, doc, opts) merge_flag = PropertyExtractor.extract_merge_flag(exposure, doc, opts) merge_flag && type_resolver.resolve_entity_from_opts(exposure, doc) end |
#parent_exposures(parent_entity) ⇒ Array
Gets the exposures defined on a parent entity.
39 40 41 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 39 def parent_exposures(parent_entity) EntityIntrospectorSupport.exposures(parent_entity) end |
#schema_for_exposure(exposure, doc) ⇒ ApiModel::Schema
Builds a schema for an exposure.
47 48 49 50 51 52 53 54 55 |
# File 'lib/grape_oas/introspectors/entity_introspector_support/exposure_processor.rb', line 47 def schema_for_exposure(exposure, doc) opts = (exposure) type = opts[:using] || doc[:type] schema = type_resolver.build_exposure_base_schema(type) schema = apply_exposure_properties(schema, doc) SchemaConstraints.apply(schema, doc) schema end |