Class: Verquest::Properties::Object
- Defined in:
- lib/verquest/properties/object.rb
Overview
Object property type for structured data
Represents a complex object with nested properties in the schema. Used for defining structured data objects with multiple fields.
Instance Attribute Summary collapse
-
#properties ⇒ Object
readonly
private
Returns the value of attribute properties.
-
#schema_options ⇒ Object
readonly
private
Returns the value of attribute schema_options.
-
#type ⇒ Object
readonly
private
Returns the value of attribute type.
Attributes inherited from Base
#map, #name, #nullable, #required
Instance Method Summary collapse
-
#add(property) ⇒ Verquest::Properties::Base
Add a child property to this object.
-
#initialize(name:, required: false, nullable: false, map: nil, **schema_options) ⇒ Object
constructor
Initialize a new Object property.
-
#mapping(key_prefix:, value_prefix:, mapping:, version: nil) ⇒ Hash
Create mapping for this object property and all its children.
-
#to_schema ⇒ Hash
Generate JSON schema definition for this object property.
-
#to_validation_schema(version: nil) ⇒ Hash
Generate validation schema for this object property.
Methods inherited from Base
#mapping_value_key, #mapping_value_prefix
Methods included from HelperMethods::RequiredProperties
#dependent_required_properties, #required_properties
Constructor Details
#initialize(name:, required: false, nullable: false, map: nil, **schema_options) ⇒ Object
Initialize a new Object property
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/verquest/properties/object.rb', line 22 def initialize(name:, required: false, nullable: false, map: nil, **) @properties = {} @name = name.to_s @required = required @nullable = nullable @map = map @schema_options = { additionalProperties: Verquest.configuration.default_additional_properties }.merge() .delete_if { |_, v| v.nil? } .transform_keys(&:to_s) @type = if nullable %w[object null] else "object" end end |
Instance Attribute Details
#properties ⇒ Object (readonly, private)
Returns the value of attribute properties.
96 97 98 |
# File 'lib/verquest/properties/object.rb', line 96 def properties @properties end |
#schema_options ⇒ Object (readonly, private)
Returns the value of attribute schema_options.
96 97 98 |
# File 'lib/verquest/properties/object.rb', line 96 def @schema_options end |
#type ⇒ Object (readonly, private)
Returns the value of attribute type.
96 97 98 |
# File 'lib/verquest/properties/object.rb', line 96 def type @type end |
Instance Method Details
#add(property) ⇒ Verquest::Properties::Base
Add a child property to this object
46 47 48 |
# File 'lib/verquest/properties/object.rb', line 46 def add(property) properties[property.name.to_s] = property end |
#mapping(key_prefix:, value_prefix:, mapping:, version: nil) ⇒ Hash
Create mapping for this object property and all its children
88 89 90 91 92 |
# File 'lib/verquest/properties/object.rb', line 88 def mapping(key_prefix:, value_prefix:, mapping:, version: nil) properties.values.each do |property| property.mapping(key_prefix: key_prefix + [name], value_prefix: mapping_value_prefix(value_prefix:), mapping:, version:) end end |
#to_schema ⇒ Hash
Generate JSON schema definition for this object property
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/verquest/properties/object.rb', line 53 def to_schema { name => { "type" => type, "required" => required_properties, "properties" => properties.transform_values { |property| property.to_schema[property.name] } }.merge().tap do |schema| schema["dependentRequired"] = dependent_required_properties if dependent_required_properties.any? end } end |
#to_validation_schema(version: nil) ⇒ Hash
Generate validation schema for this object property
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/verquest/properties/object.rb', line 69 def to_validation_schema(version: nil) { name => { "type" => type, "required" => required_properties, "properties" => properties.transform_values { |property| property.to_validation_schema(version: version)[property.name] } }.merge().tap do |schema| schema["dependentRequired"] = dependent_required_properties if dependent_required_properties.any? end } end |