Class: Jsapi::Meta::Schema::Object
- Inherits:
-
Base
- Object
- Model::Base
- Base
- Jsapi::Meta::Schema::Object
- Defined in:
- lib/jsapi/meta/schema/object.rb
Constant Summary
Constants included from Model::Attributes
Model::Attributes::DEFAULT_ARRAY, Model::Attributes::DEFAULT_HASH
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#add_property(name, keywords = {}) ⇒ Object
:nodoc:.
-
#additional_properties ⇒ Object
:attr: additional_properties The AdditionalProperties.
-
#all_of_references ⇒ Object
:attr: all_of_references.
-
#discriminator ⇒ Object
:attr: discriminator The Discriminator.
-
#model ⇒ Object
:attr: model The model class to access nested object parameters by.
-
#properties ⇒ Object
:attr: properties The properties.
- #resolve_properties(definitions, context: nil) ⇒ Object
-
#resolve_schema(object, definitions, context: nil) ⇒ Object
Resolves the schema within
context
. -
#to_json_schema ⇒ Object
:nodoc:.
-
#to_openapi(version) ⇒ Object
:nodoc:.
Methods inherited from Base
#default, #default_value, #deprecated, #description, #enum, #enum=, #examples, #existence, #external_docs, #initialize, #nullable?, #omittable?, #title, #type
Methods included from OpenAPI::Extensions
Methods inherited from Model::Base
#initialize, #inspect, #merge!, #reference?, #resolve
Methods included from Model::Attributes
Constructor Details
This class inherits a constructor from Jsapi::Meta::Schema::Base
Instance Method Details
#add_property(name, keywords = {}) ⇒ Object
:nodoc:
35 36 37 |
# File 'lib/jsapi/meta/schema/object.rb', line 35 def add_property(name, keywords = {}) # :nodoc: (@properties ||= {})[name.to_s] = Property.new(name, **keywords) end |
#additional_properties ⇒ Object
:attr: additional_properties The AdditionalProperties.
10 |
# File 'lib/jsapi/meta/schema/object.rb', line 10 attribute :additional_properties, AdditionalProperties |
#all_of_references ⇒ Object
:attr: all_of_references
14 |
# File 'lib/jsapi/meta/schema/object.rb', line 14 attribute :all_of_references, [Reference] |
#discriminator ⇒ Object
:attr: discriminator The Discriminator.
22 |
# File 'lib/jsapi/meta/schema/object.rb', line 22 attribute :discriminator, Discriminator |
#model ⇒ Object
:attr: model The model class to access nested object parameters by. The default model class is Jsapi::Model::Base.
28 |
# File 'lib/jsapi/meta/schema/object.rb', line 28 attribute :model, Class, default: Jsapi::Model::Base |
#properties ⇒ Object
:attr: properties The properties.
33 |
# File 'lib/jsapi/meta/schema/object.rb', line 33 attribute :properties, { String => Property }, accessors: %i[reader writer] |
#resolve_properties(definitions, context: nil) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/jsapi/meta/schema/object.rb', line 39 def resolve_properties(definitions, context: nil) properties = merge_properties(definitions, []) case context when :response properties.reject { |_k, v| v.write_only? } when :request properties.reject { |_k, v| v.read_only? } else properties end end |
#resolve_schema(object, definitions, context: nil) ⇒ Object
Resolves the schema within context
.
Raises a RuntimeError
when the schema couldn’t be resolved.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/jsapi/meta/schema/object.rb', line 55 def resolve_schema(object, definitions, context: nil) return self if discriminator.nil? properties = resolve_properties(definitions, context: context) property = properties[discriminator.property_name] raise InvalidValueError.new('discriminator property', discriminator.property_name, valid_values: properties.keys) if property.nil? value = property.reader.call(object) value = property.default_value(definitions, context: context) if value.nil? raise "#{discriminator.property_name} can't be nil" if value.nil? schema = definitions.find_schema(discriminator.mapping(value) || value) raise "inheriting schema couldn't be found: #{value.inspect}" if schema.nil? schema.resolve(definitions).resolve_schema(object, definitions, context: context) end |
#to_json_schema ⇒ Object
:nodoc:
75 76 77 78 79 80 81 82 |
# File 'lib/jsapi/meta/schema/object.rb', line 75 def to_json_schema # :nodoc: super.merge( allOf: all_of_references.map(&:to_json_schema).presence, properties: properties.transform_values(&:to_json_schema), additionalProperties: additional_properties&.to_json_schema, required: properties.values.select(&:required?).map(&:name) ).compact end |
#to_openapi(version) ⇒ Object
:nodoc:
84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/jsapi/meta/schema/object.rb', line 84 def to_openapi(version, *) # :nodoc: super.merge( allOf: all_of_references.map do |schema| schema.to_openapi(version) end.presence, discriminator: discriminator&.to_openapi(version), properties: properties.transform_values do |property| property.to_openapi(version) end, additionalProperties: additional_properties&.to_openapi(version), required: properties.values.select(&:required?).map(&:name) ).compact end |