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