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

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

Constant Summary

Constants inherited from Base

Base::TYPES

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?, #title, #type

Methods inherited from Base

#initialize, #inspect, #reference?, #resolve

Methods included from Attributes::ClassMethods

#attribute, #attribute_names

Constructor Details

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

Instance Method Details

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

:nodoc:



29
30
31
# File 'lib/jsapi/meta/schema/object.rb', line 29

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

#all_of_referencesObject

:attr: all_of_references



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

attribute :all_of_references, [Reference], default: []

#discriminatorObject

:attr: discriminator



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

attribute :discriminator, Discriminator

#modelObject

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



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

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

#propertiesObject

:attr: properties The properties.



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

attribute :properties, { String => Property }, writer: false, default: {}

#resolve_properties(access, definitions) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/jsapi/meta/schema/object.rb', line 33

def resolve_properties(access, definitions)
  properties = merge_properties(definitions, [])

  case access
  when :read
    properties.reject { |_k, v| v.write_only? }
  when :write
    properties.reject { |_k, v| v.read_only? }
  else
    properties
  end
end

#to_json_schemaObject

:nodoc:



46
47
48
49
50
51
52
# File 'lib/jsapi/meta/schema/object.rb', line 46

def to_json_schema # :nodoc:
  super.merge(
    allOf: all_of_references.map(&:to_json_schema).presence,
    properties: properties.transform_values(&:to_json_schema),
    required: properties.values.select(&:required?).map(&:name)
  ).compact
end

#to_openapi(version) ⇒ Object

:nodoc:



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/jsapi/meta/schema/object.rb', line 54

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,
    required: properties.values.select(&:required?).map(&:name)
  ).compact
end