class SoberSwag::Reporting::Input::Object
Input
object values
Attributes
fields[R]
@return [Hash<String,#call>]
Public Class Methods
new(fields)
click to toggle source
@param fields [Hash<Symbol, Property>]
# File lib/sober_swag/reporting/input/object.rb, line 10 def initialize(fields) @fields = fields end
Public Instance Methods
call(value)
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 18 def call(value) return Report::Value.new(['was a not a JSON object']) unless value.is_a?(Hash) bad, good = fields.map { |k, prop| extract_value(k, prop, value) }.compact.partition { |(_, v)| v.is_a?(Report::Base) } return Report::Object.new(bad.to_h) if bad.any? good.to_h end
swagger_path_schema()
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 47 def swagger_path_schema swagger_parameter_schema.map do |param| param.merge({ in: :path }) end end
swagger_query_schema()
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 41 def swagger_query_schema swagger_parameter_schema.map do |param| param.merge({ in: :query, style: :deepObject, explode: true }) end end
swagger_schema()
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 30 def swagger_schema fields, found = field_schemas obj = { type: 'object', properties: fields }.merge(required_portion) [obj, found] end
Private Instance Methods
extract_value(key, property, input)
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 90 def extract_value(key, property, input) if input.key?(key) [key, property.value.call(input[key])] elsif property.required? [key, Report::Value.new(['is required'])] end end
field_schemas()
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 67 def field_schemas fields.reduce([{}, {}]) do |(field_schemas, found), (k, v)| key_schema, key_found = v.property_schema [ field_schemas.merge(k => key_schema), found.merge(key_found) ] end end
required_portion()
click to toggle source
Either
the list of required keys, or something stating “provide at least one key.” This is needed because you can't have an empty list of keys.
# File lib/sober_swag/reporting/input/object.rb, line 80 def required_portion required_fields = fields.map { |k, v| k if v.required? }.compact if required_fields.empty? {} else { required: required_fields } end end
swagger_parameter_schema()
click to toggle source
# File lib/sober_swag/reporting/input/object.rb, line 55 def swagger_parameter_schema fields.map do |name, field| key_schema, = field.property_schema base = { name: name, schema: key_schema, required: field.required? } field.description ? base.merge(description: field.description) : base end end