Module: OpenApi::Objects::Controller::ClassMethods

Defined in:
lib/open-api/objects.rb

Instance Method Summary collapse

Instance Method Details

#expand_nested_object_metadata(metadata) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/open-api/objects.rb', line 92

def ()
  unless [:type].respond_to?(:to_sym) && [:type].to_sym == :object
     = { type: :object, properties:  }
  end
  required_attrs = ([:required] || []).map(&:to_sym)
  if (properties = [:properties]).is_a?(Hash) && properties.present?
     = .dup
    properties = Hash[(properties.map do |name, property|
      property = expand_nested_object_property(name, property, required_attrs)
      [name, property]
    end)]
    [:properties] = properties
  end
  [:required] = required_attrs.uniq if required_attrs.present?
  
end

#expand_nested_object_property(name, property, required_attrs) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/open-api/objects.rb', line 109

def expand_nested_object_property(name, property, required_attrs)
  if property.is_a?(Hash)
    required = property[:required]
    if required.nil?
      required_attrs << name.to_sym # Presume required if required option not spec'd
    elsif [TrueClass, FalseClass].include?(required.class)
      required_attrs << name.to_sym if property.delete(:required)
    end
    unless property.blank? || property[:type].respond_to?(:to_sym)
      property = (property)
    end
  else
    api_type, api_format = OpenApi::Utils.open_api_type_and_format(property)
    if api_type.nil?
      property = { type: :object, '$ref' => property }
    elsif api_format.present?
      property = { type: api_type, format: api_format }
    else
      property = { type: api_type }
    end
    required_attrs << name.to_sym # Presume required if required option not spec'd
  end
  property
end

#open_api_object(object_key, metadata = nil) ⇒ Object



82
83
84
85
86
87
88
89
90
# File 'lib/open-api/objects.rb', line 82

def open_api_object(object_key,  = nil)
  fail 'Valid object argument required!' unless object_key.respond_to?(:to_sym)
  return ( || {})[object_key.to_sym].deep_dup if .blank?
  fail 'Expected Hash argument for open_api_object()!' unless .is_a?(Hash)
   = ()
   = (( ||= {})[object_key.to_sym] ||= {})
  OpenApi::Objects.(, )
  nil
end

#open_api_object_metadata(object_key, opts = {}) ⇒ Object



134
135
136
137
138
139
140
141
142
# File 'lib/open-api/objects.rb', line 134

def (object_key, opts = {})
  controller_class_hierarchy = OpenApi::Utils.controller_class_hierarchy(self)
   = {}
  controller_class_hierarchy.each do |controller_class|
    OpenApi::Objects.(,
        controller_class.send(:open_api_object, object_key), opts)
  end
  
end

#open_api_objects(metadata = nil) ⇒ Object



73
74
75
76
77
78
79
80
# File 'lib/open-api/objects.rb', line 73

def open_api_objects( = nil)
  return ( || {}).deep_dup if .blank?
  fail 'Expected Hash argument for open_api_objects()!' unless .is_a?(Hash)
  .each do |object_key, |
    open_api_object(object_key, )
  end
  nil
end