class JsonapiSwaggerHelpers::PayloadDefinition

Attributes

payload[R]

Public Class Methods

new(payload) click to toggle source
# File lib/jsonapi_swagger_helpers/payload_definition.rb, line 31
def initialize(payload)
  @payload = payload
end
swagger_type_for(payload_name, attribute, type) click to toggle source

Given a spec payload like:

key(:name, String)

Return the corresponding swagger type, ie :string If a key has multiple types, we'll pick the first swagger type that matches:

key(:total, [String, Integer]) => :string

# File lib/jsonapi_swagger_helpers/payload_definition.rb, line 13
def self.swagger_type_for(payload_name, attribute, type)
  types = Array(type)
  return :string if types.empty?

  type_mapping.each_pair do |swagger_type, klasses|
    if types.any? { |t| klasses.include?(t) }
      return swagger_type
    end
  end

  raise JsonapiSwaggerHelpers::Errors::TypeNotFound
    .new(payload_name, attribute)
end
type_mapping() click to toggle source
# File lib/jsonapi_swagger_helpers/payload_definition.rb, line 27
def self.type_mapping
  JsonapiSwaggerHelpers.config.type_mapping
end

Public Instance Methods

context() click to toggle source
# File lib/jsonapi_swagger_helpers/payload_definition.rb, line 35
def context
  JsonapiSwaggerHelpers.docs_controller
end
generate() click to toggle source
# File lib/jsonapi_swagger_helpers/payload_definition.rb, line 43
def generate
  _self = self

  context.send(:swagger_schema, payload.name) do
    payload = _self.payload

    payload.keys.each_pair do |attribute, config|
      property attribute do
        type = _self.class.swagger_type_for(payload.name, attribute, config[:type])
        key :type, type

        if config[:description]
          key :description, config[:description]
        end
      end
    end
  end
end
jsonapi_type() click to toggle source
# File lib/jsonapi_swagger_helpers/payload_definition.rb, line 39
def jsonapi_type
  payload.type
end