Class: Jsapi::Meta::Schema::Object

Inherits:
Base show all
Defined in:
lib/jsapi/meta/schema/object.rb

Defined Under Namespace

Classes: Wrapper

Instance Attribute Summary

Attributes inherited from Base

#validations

Instance Method Summary collapse

Methods inherited from Base

#default, #deprecated, #description, #enum, #enum=, #examples, #existence, #external_docs, #initialize, #nullable?, #omittable?, #title, #type

Methods included from OpenAPI::Extensions

included

Methods inherited from Model::Base

#initialize, #inspect, #merge!, #reference?, #resolve

Methods included from Model::Attributes

#attributes_frozen?, #freeze_attributes, included

Constructor Details

This class inherits a constructor from Jsapi::Meta::Schema::Base

Instance Method Details

#add_property(name, keywords = {}) ⇒ Object

:nodoc:



91
92
93
94
95
# File 'lib/jsapi/meta/schema/object.rb', line 91

def add_property(name, keywords = {}) # :nodoc:
  try_modify_attribute!(:properties) do
    (@properties ||= {})[name.to_s] = Property.new(name, keywords)
  end
end

#additional_propertiesObject

:attr: additional_properties The AdditionalProperties.



66
# File 'lib/jsapi/meta/schema/object.rb', line 66

attribute :additional_properties, AdditionalProperties

#all_of_referencesObject

:attr: all_of_references



70
# File 'lib/jsapi/meta/schema/object.rb', line 70

attribute :all_of_references, [Reference]

#discriminatorObject

:attr: discriminator The Discriminator.



78
# File 'lib/jsapi/meta/schema/object.rb', line 78

attribute :discriminator, Discriminator

#modelObject

:attr: model The model class to access nested object parameters by. The default model class is Jsapi::Model::Base.



84
# File 'lib/jsapi/meta/schema/object.rb', line 84

attribute :model, Class, default: Jsapi::Model::Base

#propertiesObject

:attr: properties The properties. Maps property names to Property objects.



89
# File 'lib/jsapi/meta/schema/object.rb', line 89

attribute :properties, { String => Property }, accessors: %i[reader writer]

#resolve_properties(definitions, context: nil) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/jsapi/meta/schema/object.rb', line 97

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

#to_json_schemaObject

:nodoc:



110
111
112
113
114
115
116
117
# File 'lib/jsapi/meta/schema/object.rb', line 110

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:



119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/jsapi/meta/schema/object.rb', line 119

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