class Apipie::Generator::Swagger::MethodDescription::ApiSchemaService

Public Class Methods

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

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

# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 3
def initialize(method_description, language: nil)
  @method_description = method_description
  @language = language
end

Public Instance Methods

call() click to toggle source

@return [Hash]

# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 9
def call
  @method_description.apis.each_with_object({}) do |api, paths|
    api = Apipie::Generator::Swagger::MethodDescription::ApiDecorator.new(api)
    path = Apipie::Generator::Swagger::PathDecorator.new(api.path)
    op_id = Apipie::Generator::Swagger::OperationId.from(api).to_s

    if Apipie.configuration.generator.swagger.generate_x_computed_id_field?
      Apipie::Generator::Swagger::ComputedInterfaceId.instance.add!(op_id)
    end

    parameters = Apipie::Generator::Swagger::MethodDescription::ParametersService
                 .new(@method_description, path: path, http_method: api.normalized_http_method)
                 .call

    paths[path.swagger_path(@method_description)] ||= {}
    paths[path.swagger_path(@method_description)][api.normalized_http_method] = {
      tags: tags,
      consumes: consumes,
      operationId: op_id,
      summary: api.summary(method_description: @method_description, language: @language),
      parameters: parameters,
      responses: responses(api),
      description: Apipie.app.translate(@method_description.full_description, @language)
    }.compact
  end
end

Private Instance Methods

consumes() click to toggle source
# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 64
def consumes
  if params_in_body?
    ['application/json']
  else
    ['application/x-www-form-urlencoded', 'multipart/form-data']
  end
end
params_in_body?() click to toggle source
# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 72
def params_in_body?
  Apipie.configuration.generator.swagger.content_type_input == :json
end
responses(api) click to toggle source

@param [Apipie::Generator::Swagger::MethodDescription::ApiDecorator] api

# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 77
def responses(api)
  Apipie::Generator::Swagger::MethodDescription::ResponseService
    .new(
      @method_description,
      language: @language,
      http_method: api.normalized_http_method
    )
    .call
end
summary(api) click to toggle source
# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 38
def summary(api)
  translated_description = Apipie.app.translate(api.short_description, @language)

  return translated_description if translated_description.present?

  Apipie::Generator::Swagger::Warning.for_code(
    Apipie::Generator::Swagger::Warning::MISSING_METHOD_SUMMARY_CODE,
    @method_description.ruby_name
  ).warn_through_writer
end
tags() click to toggle source
# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 49
def tags
  [@method_description.resource._id] +
    warning_tags +
    @method_description.tag_list.tags
end
warning_tags() click to toggle source
# File lib/apipie/generator/swagger/method_description/api_schema_service.rb, line 55
def warning_tags
  if Apipie.configuration.generator.swagger.include_warning_tags? &&
     Apipie::Generator::Swagger::WarningWriter.instance.issued_warnings?
    ['warnings issued']
  else
    []
  end
end