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
Instance Method Summary collapse
-
#add(property) ⇒ Verquest::Properties::Base
Add a child property to this object.
-
#initialize(name:, required: 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
Constructor Details
#initialize(name:, required: false, map: nil, **schema_options) ⇒ Object
Initialize a new Object property
21 22 23 24 25 26 27 28 |
# File 'lib/verquest/properties/object.rb', line 21 def initialize(name:, required: false, map: nil, **) @properties = {} @name = name @required = required @map = map @schema_options = end |
Instance Attribute Details
#properties ⇒ Object (readonly, private)
Returns the value of attribute properties.
80 81 82 |
# File 'lib/verquest/properties/object.rb', line 80 def properties @properties end |
#schema_options ⇒ Object (readonly, private)
Returns the value of attribute schema_options.
80 81 82 |
# File 'lib/verquest/properties/object.rb', line 80 def @schema_options end |
#type ⇒ Object (readonly, private)
Returns the value of attribute type.
80 81 82 |
# File 'lib/verquest/properties/object.rb', line 80 def type @type end |
Instance Method Details
#add(property) ⇒ Verquest::Properties::Base
Add a child property to this object
34 35 36 |
# File 'lib/verquest/properties/object.rb', line 34 def add(property) properties[property.name] = property end |
#mapping(key_prefix:, value_prefix:, mapping:, version: nil) ⇒ Hash
Create mapping for this object property and all its children
72 73 74 75 76 |
# File 'lib/verquest/properties/object.rb', line 72 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
41 42 43 44 45 46 47 48 49 |
# File 'lib/verquest/properties/object.rb', line 41 def to_schema { name => { type: :object, required: properties.values.select(&:required).map(&:name), properties: properties.transform_values { |property| property.to_schema[property.name] } }.merge() } end |
#to_validation_schema(version: nil) ⇒ Hash
Generate validation schema for this object property
55 56 57 58 59 60 61 62 63 |
# File 'lib/verquest/properties/object.rb', line 55 def to_validation_schema(version: nil) { name => { type: :object, required: properties.values.select(&:required).map(&:name), properties: properties.transform_values { |property| property.to_validation_schema(version:)[property.name] } }.merge() } end |