class Dox::Entities::Action

Attributes

desc[R]
examples[RW]
name[R]
params[R]
path[R]
request[R]
resource[R]
verb[R]

Public Class Methods

new(details, request) click to toggle source
# File lib/dox/entities/action.rb, line 7
def initialize(details, request)
  @request = request
  @name = details[:action_name]
  @resource = details[:resource_name]
  @desc = details[:action_desc]
  @verb = details[:action_verb] || request.method
  @path = details[:action_path] || template_path
  @params = template_params(details[:action_params], details[:action_query_params] || [])
  @examples = []

  validate!
end

Private Instance Methods

acquire_defined_params(defined_params) click to toggle source
# File lib/dox/entities/action.rb, line 53
def acquire_defined_params(defined_params)
  return [] if defined_params.nil?

  defined_params.map do |key, value|
    { name: key,
      in: 'query',
      required: value[:required],
      example: value[:value],
      description: value[:description].presence || '',
      schema: { type: value[:type] } }
  end
end
acquire_path_params() click to toggle source
# File lib/dox/entities/action.rb, line 42
def acquire_path_params
  return [] if path_params.nil?

  path_params.map do |param, value|
    { name: param,
      in: :path,
      schema: { type: guess_param_type(value) },
      example: value }
  end
end
guess_param_type(param) click to toggle source
# File lib/dox/entities/action.rb, line 66
def guess_param_type(param)
  if param =~ /^\d+$/
    :number
  else
    :string
  end
end
path_params() click to toggle source
# File lib/dox/entities/action.rb, line 38
def path_params
  request.path_parameters.symbolize_keys.except(:action, :controller, :format, :subdomain)
end
template_params(defined_params, query_params) click to toggle source
# File lib/dox/entities/action.rb, line 34
def template_params(defined_params, query_params)
  acquire_path_params + acquire_defined_params(defined_params) + query_params
end
template_path() click to toggle source

/pokemons/1 => pokemons/{id}

# File lib/dox/entities/action.rb, line 25
def template_path
  path = request.path.dup.presence || request.fullpath.split('?').first
  path_params.each do |key, value|
    path.sub!(%r{\/#{value}(\/|$)}, "/{#{key}}\\1")
  end

  path
end
validate!() click to toggle source
# File lib/dox/entities/action.rb, line 74
def validate!
  raise(Error, "Unrecognized HTTP verb #{verb}") unless Util::Http.verb?(verb)
end