class Grape::App::Doc::Endpoint

Constants

Status

Attributes

description[R]
details[R]
failure[R]
headers[R]
namespace[R]
params[R]
raw_path[R]
request_method[R]
success[R]
version[R]

Public Class Methods

new(route, registry) click to toggle source
# File lib/grape/app/doc/endpoint.rb, line 7
def initialize(route, registry)
  @request_method = route.request_method || 'GET'

  @version     = route.version || ''
  @namespace   = route.namespace || ''
  @description = route.description || ''
  @details     = route.details || ''
  @raw_path    = route.path

  @success  = parse_status(route, registry, route.entity || [200, "OK"])
  @failure  = Array(route.http_codes).map do |item|
    parse_status(route, registry, item)
  end.compact
  @headers  = (route.headers || {}).map do |name, opts|
    Grape::App::Doc::Header.new(name, opts)
  end
  @params   = (route.params || {}).map do |name, opts|
    Grape::App::Doc::Parameter.new(name, opts) if opts.is_a?(Hash)
  end.compact
end

Public Instance Methods

path() click to toggle source

@return [String] friendly path string

# File lib/grape/app/doc/endpoint.rb, line 29
def path
  @path ||= raw_path.sub(':version', version).sub(/\(\.[^\)]+$/, '')
end
resource() click to toggle source

@return [String] extracted the resource name

# File lib/grape/app/doc/endpoint.rb, line 34
def resource
  namespace.split('/').last ||
    raw_path.split('/:version').last.match('\/(\w*?)[\.\/\(]').captures.first
end

Private Instance Methods

parse_status(route, registry, item) click to toggle source
# File lib/grape/app/doc/endpoint.rb, line 41
def parse_status(route, registry, item)
  if item.is_a?(Array) && item.size > 1
    code, desc, entity = item
    code = Rack::Utils::SYMBOL_TO_STATUS_CODE[code] if code.is_a?(Symbol)
    Status.new(code, desc, registry.register(entity))
  elsif item.is_a?(Class) && item <= Grape::Entity
    Status.new(200, "OK", registry.register(item))
  else
    Grape::App::Doc.doc_error("route #{route} contains an invalid definition #{item.inspect}")
    nil
  end
end