class SoberSwag::Reporting::Output::Object

Serialize out a JSON object.

Attributes

properties[R]

@param properties [Hash<Symbol,Property>]

Public Class Methods

new(properties) click to toggle source

@param properties [Hash<Symbol,Property>] the properties to serialize

# File lib/sober_swag/reporting/output/object.rb, line 11
def initialize(properties)
  @properties = properties
end

Public Instance Methods

call(item) click to toggle source
# File lib/sober_swag/reporting/output/object.rb, line 19
def call(item)
  properties.each.with_object({}) do |(k, v), hash|
    hash[k] = v.output.call(item)
  end
end
serialize_report(item) click to toggle source
# File lib/sober_swag/reporting/output/object.rb, line 25
def serialize_report(item)
  bad, good = properties.map { |k, prop|
    [k, prop.output.serialize_report(item)]
  }.partition { |(_, v)| v.is_a?(Report::Base) }

  return Report::Object.new(bad.to_h) if bad.any?

  good.to_h
end
swagger_schema() click to toggle source
# File lib/sober_swag/reporting/output/object.rb, line 35
def swagger_schema # rubocop:disable Metrics/MethodLength
  props, found = properties.each.with_object([{}, {}]) do |(k, v), (field, f)|
    prop_type, prop_found = v.property_schema
    field[k] = prop_type
    f.merge!(prop_found)
  end

  [
    {
      type: 'object',
      properties: props,
      required: properties.keys
    },
    found
  ]
end