class RocketDocs::Documentation::Action

Attributes

comments[R]
controller[R]
name[R]

Public Class Methods

new(name, comments, methods, params, controller) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 8
def initialize(name, comments, methods, params, controller)
  @name = name
  @comments = comments
  @methods = sanitize_methods(methods)
  @params  = params
  @params.delete(:version) if params
  @params = @params.presence
  @controller = controller
  generate
end

Public Instance Methods

default_method() click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 34
def default_method
  methods.first || 'GET'
end
description(method = default_method) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 24
def description(method = default_method)
  desc = (@doc[method] && @doc[method]['DOC']) || @doc['DOC']
  RocketDocs.format_string(desc)
end
methods() click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 38
def methods
  @methods.presence ||
    @doc.keys.select { |m| Parser.http_keywords.include?(m) }
end
params(method = default_method) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 29
def params(method = default_method)
  (@doc[method] && @doc[method]['PARAMS']) || @doc['PARAMS'] ||
    @params
end
url(method = default_method) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 19
def url(method = default_method)
  (@doc[method] && @doc[method]['URL']) || @doc['URL'] ||
    router_url(method)
end

Private Instance Methods

_routes() click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 50
def _routes
  RocketDocs::Router.app_routes
end
deflated_url_params(hash, wrapper = nil) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 84
def deflated_url_params(hash, wrapper = nil)
  nh = {}
  hash.each do |k, v|
    new_v = wrapper ? "#{wrapper}[#{k}]" : k
    if v.is_a?(Hash)
      nh[k] = deflated_url_params(v, k)
    else
      nh[k] = "{#{new_v}}"
    end
  end
  nh.symbolize_keys
end
generate() click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 45
def generate
  return @doc = {} unless @comments.present?
  @doc = RocketDocs::Parser.parse_comments(@comments).value
end
router_url(method = default_method) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 65
def router_url(method = default_method)
  route = _routes.url_for(url_params(method))
  route = route.split('?').first unless method == 'GET'
  CGI.unescape(route)
rescue ActionController::UrlGenerationError
  nil
end
sanitize_methods(methods) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 54
def sanitize_methods(methods)
  return unless methods
  methods.map do |m|
    if m.is_a?(String)
      m
    else
      m.to_s.sub('(?-mix:^', '').sub('$)', '').split('|')
    end
  end.flatten
end
url_params(method = default_method) click to toggle source
# File lib/rocket_docs/documentation/action.rb, line 73
def url_params(method = default_method)
  hash = {}
  hash = deflated_url_params(params(method)) if @params
  hash.merge(
    controller: controller.full_name.downcase,
    action: name,
    version: controller.documentation.version,
    only_path: true
  )
end