module OpenApi::Objects::Controller::ClassMethods
Public Instance Methods
expand_nested_object_metadata(metadata)
click to toggle source
# File lib/open-api/objects.rb, line 92 def expand_nested_object_metadata(metadata) unless metadata[:type].respond_to?(:to_sym) && metadata[:type].to_sym == :object metadata = { type: :object, properties: metadata } end required_attrs = (metadata[:required] || []).map(&:to_sym) if (properties = metadata[:properties]).is_a?(Hash) && properties.present? metadata = metadata.dup properties = Hash[(properties.map do |name, property| property = expand_nested_object_property(name, property, required_attrs) [name, property] end)] metadata[:properties] = properties end metadata[:required] = required_attrs.uniq if required_attrs.present? metadata end
expand_nested_object_property(name, property, required_attrs)
click to toggle source
# 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) if property.keys.length == 1 && property.keys.first.to_sym == :'$ref' property = property.merge(type: :object) else property = expand_nested_object_metadata(property) end 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)
click to toggle source
# File lib/open-api/objects.rb, line 82 def open_api_object(object_key, metadata = nil) fail 'Valid object argument required!' unless object_key.respond_to?(:to_sym) return (@open_api_objects_metadata || {})[object_key.to_sym].deep_dup if metadata.blank? fail 'Expected Hash argument for open_api_object()!' unless metadata.is_a?(Hash) metadata = expand_nested_object_metadata(metadata) object_metadata = ((@open_api_objects_metadata ||= {})[object_key.to_sym] ||= {}) OpenApi::Objects.merge_metadata(object_metadata, metadata) nil end
open_api_object_metadata(object_key, opts = {})
click to toggle source
# File lib/open-api/objects.rb, line 138 def open_api_object_metadata(object_key, opts = {}) controller_class_hierarchy = OpenApi::Utils.controller_class_hierarchy(self) aggr_object_metadata = {} controller_class_hierarchy.each do |controller_class| OpenApi::Objects.merge_metadata(aggr_object_metadata, controller_class.send(:open_api_object, object_key), opts) end aggr_object_metadata end
open_api_objects(metadata = nil)
click to toggle source
# File lib/open-api/objects.rb, line 73 def open_api_objects(metadata = nil) return (@open_api_objects_metadata || {}).deep_dup if metadata.blank? fail 'Expected Hash argument for open_api_objects()!' unless metadata.is_a?(Hash) metadata.each do |object_key, object_metadata| open_api_object(object_key, object_metadata) end nil end