class Praxis::Route

Attributes

options[RW]
path[RW]
prefixed_path[RW]
verb[RW]
version[RW]

Public Class Methods

new(verb, path, version = 'n/a', prefixed_path: nil, **options) click to toggle source
# File lib/praxis/route.rb, line 7
def initialize(verb, path, version = 'n/a', prefixed_path: nil, **options)
  @verb = verb
  @path = path
  @version = version
  @options = options
  @prefixed_path = prefixed_path
end

Public Instance Methods

describe() click to toggle source
# File lib/praxis/route.rb, line 30
def describe
  result = {
    verb: verb,
    path: path.to_s,
    version: version
  }
  result[:options] = options if options.any?
  result
end
example(params:, example_hash: {}) click to toggle source
# File lib/praxis/route.rb, line 15
def example(params:, example_hash: {})
  path_param_keys = path.named_captures.keys.collect(&:to_sym)

  param_attributes = params ? params.attributes : {}
  query_param_keys = param_attributes.keys - path_param_keys
  required_query_param_keys = query_param_keys.each_with_object([]) do |p, array|
    array << p if params.attributes[p].options[:required]
  end

  path_params = example_hash.select { |k, _v| path_param_keys.include? k }
  # Let's generate the example only using required params, to avoid mixing incompatible parameters
  query_params = example_hash.select { |k, _v| required_query_param_keys.include? k }
  { verb: verb, url: path.expand(path_params.transform_values(&:to_s)), query_params: query_params }
end