class Apipie::Generator::Swagger::MethodDescription::ResponseService

Public Class Methods

new(method_description, http_method:, language:) click to toggle source

@param [Apipie::Generator::Swagger::MethodDescription::Decorator] method_description @param [Symbol] http_method

# File lib/apipie/generator/swagger/method_description/response_service.rb, line 4
def initialize(method_description, http_method:, language:)
  @method_description = method_description
  @http_method = http_method
  @language = language
end

Public Instance Methods

call() click to toggle source

@return [Hash]

# File lib/apipie/generator/swagger/method_description/response_service.rb, line 11
def call
  result = {}
  result.merge!(errors)
  result.merge!(responses)
  result.merge!(empty_returns)

  result
end

Private Instance Methods

empty_returns() click to toggle source

@return [Hash]

# File lib/apipie/generator/swagger/method_description/response_service.rb, line 49
def empty_returns
  return {} if errors.present? || responses.present?

  Apipie::Generator::Swagger::Warning.for_code(
    Apipie::Generator::Swagger::Warning::NO_RETURN_CODES_SPECIFIED_CODE,
    @method_description.ruby_name
  ).warn_through_writer

  { 200 => { description: 'ok' } }
end
errors() click to toggle source

@return [Hash]

# File lib/apipie/generator/swagger/method_description/response_service.rb, line 23
def errors
  @errors ||= @method_description.errors.each_with_object({}) do |error, errors|
    errors[error.code] = {
      description: Apipie.app.translate(error.description, @language)
    }
  end
end
response_headers(headers) click to toggle source

@param [Array<Hash>] headers

swagger.io/specification/v2/#header-object

# File lib/apipie/generator/swagger/method_description/response_service.rb, line 63
def response_headers(headers)
  headers.each_with_object({}) do |header, result|
    result[header[:name].to_s] = {
      description: header[:description],
      type: header[:validator]
    }
  end
end
responses() click to toggle source

@return [Hash]

# File lib/apipie/generator/swagger/method_description/response_service.rb, line 32
def responses
  @responses ||=
    @method_description.returns.each_with_object({}) do |response, responses_schema|
      responses_schema[response.code] = {
        description: Apipie.app.translate(response.description, @language),
        schema: Apipie::Generator::Swagger::MethodDescription::ResponseSchemaService.new(
          response,
          allow_null: false,
          http_method: @http_method,
          controller_method: @method_description
        ).to_swagger,
        headers: response_headers(response.headers)
      }.compact
    end
end