class SoberSwag::Reporting::Input::MergeObjects

Merge two object types together, in an allof stype relationship

Attributes

child[R]

@return [Interface] child type

parent[R]

@return [Interface] parent type

Public Class Methods

new(parent, child) click to toggle source
# File lib/sober_swag/reporting/input/merge_objects.rb, line 7
def initialize(parent, child)
  @parent = parent
  @child = child
end

Public Instance Methods

call(value) click to toggle source
# File lib/sober_swag/reporting/input/merge_objects.rb, line 20
def call(value)
  parent_attrs = parent.call(value)

  return parent_attrs if parent_attrs.is_a?(Report::Value)

  # otherwise, object type, so we want to get a full error report

  child_attrs = child.call(value)

  return child_attrs if child_attrs.is_a?(Report::Value)

  merge_results(parent_attrs, child_attrs)
end
swagger_path_schema() click to toggle source
# File lib/sober_swag/reporting/input/merge_objects.rb, line 46
def swagger_path_schema
  parent.swagger_path_schema + child.swagger_path_schema
end
swagger_query_schema() click to toggle source
# File lib/sober_swag/reporting/input/merge_objects.rb, line 50
def swagger_query_schema
  parent.swagger_query_schema + child.swagger_query_schema
end
swagger_schema() click to toggle source
# File lib/sober_swag/reporting/input/merge_objects.rb, line 34
def swagger_schema
  parent_schema, parent_found = parent.swagger_schema
  child_schema, child_found = child.swagger_schema

  [
    {
      allOf: (parent_schema[:allOf] || [parent_schema]) + (child_schema[:allOf] || [child_schema])
    },
    parent_found.merge(child_found)
  ]
end

Private Instance Methods

merge_results(par, chi) click to toggle source
# File lib/sober_swag/reporting/input/merge_objects.rb, line 56
def merge_results(par, chi) # rubocop:disable Metrics/MethodLength
  if par.is_a?(Report::Base)
    if chi.is_a?(Report::Base)
      Report::MergedObject.new(par, chi)
    else
      par
    end
  elsif chi.is_a?(Report::Base)
    chi
  else
    par.to_h.merge(chi.to_h)
  end
end