class Apipie::MethodDescription::ApisService

Service that builds the appropriate Apipie::MethodDescription::Api required by Apipie::MethodDescription

Public Class Methods

new(resource, controller_action, dsl) click to toggle source

@param [Apipie::ResourceDescription] resource @param [Symbol] controller_action @param [Hash] dsl

# File lib/apipie/method_description/apis_service.rb, line 8
def initialize(resource, controller_action, dsl)
  @resource = resource
  @controller_action = controller_action
  @dsl = dsl
end

Public Instance Methods

call() click to toggle source

@return [Array<Apipie::MethodDescription::Api>]

# File lib/apipie/method_description/apis_service.rb, line 15
def call
  api_args.map do |http_method, path, desc, opts|
    Apipie::MethodDescription::Api.new(
      http_method,
      concern_subst(path),
      concern_subst(desc),
      opts
    )
  end
end

Private Instance Methods

api_args() click to toggle source

@return [Array<Array>]

# File lib/apipie/method_description/apis_service.rb, line 39
def api_args
  return @dsl[:api_args] if !api_from_routes?

  api_args = @dsl[:api_args].dup

  api_args_from_routes = routes.map do |route_info|
    [
      route_info[:verb],
      route_info[:path],
      route_info[:desc],
      (route_info[:options] || {}).merge(from_routes: true)
    ]
  end

  api_args.concat(api_args_from_routes)
end
api_from_routes?() click to toggle source
# File lib/apipie/method_description/apis_service.rb, line 56
def api_from_routes?
  @dsl[:api_from_routes].present?
end
concern_subst(path) click to toggle source
# File lib/apipie/method_description/apis_service.rb, line 28
def concern_subst(path)
  return if path.blank?

  if from_concern?
    @resource.controller._apipie_perform_concern_subst(path)
  else
    path
  end
end
description() click to toggle source
# File lib/apipie/method_description/apis_service.rb, line 64
def description
  @dsl[:api_from_routes][:desc]
end
from_concern?() click to toggle source
# File lib/apipie/method_description/apis_service.rb, line 60
def from_concern?
  @dsl[:from_concern] == true
end
options() click to toggle source
# File lib/apipie/method_description/apis_service.rb, line 68
def options
  @dsl[:api_from_routes][:options]
end
routes() click to toggle source

@return [Array<Hash>]

# File lib/apipie/method_description/apis_service.rb, line 73
def routes
  Apipie.routes_for_action(
    @resource.controller,
    @controller_action,
    { desc: description, options: options }
  )
end