Class: Praxis::Route

Inherits:
Object
  • Object
show all
Defined in:
lib/praxis/route.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(verb, path, version = 'n/a', name: nil, prefixed_path: nil, **options) ⇒ Route

Returns a new instance of Route.



6
7
8
9
10
11
12
13
# File 'lib/praxis/route.rb', line 6

def initialize(verb, path, version='n/a', name:nil, prefixed_path:nil, **options)
  @verb = verb
  @path = path
  @version = version
  @name = name
  @options = options
  @prefixed_path = prefixed_path
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



4
5
6
# File 'lib/praxis/route.rb', line 4

def name
  @name
end

#optionsObject

Returns the value of attribute options.



4
5
6
# File 'lib/praxis/route.rb', line 4

def options
  @options
end

#pathObject

Returns the value of attribute path.



4
5
6
# File 'lib/praxis/route.rb', line 4

def path
  @path
end

#prefixed_pathObject

Returns the value of attribute prefixed_path.



4
5
6
# File 'lib/praxis/route.rb', line 4

def prefixed_path
  @prefixed_path
end

#verbObject

Returns the value of attribute verb.



4
5
6
# File 'lib/praxis/route.rb', line 4

def verb
  @verb
end

#versionObject

Returns the value of attribute version.



4
5
6
# File 'lib/praxis/route.rb', line 4

def version
  @version
end

Instance Method Details

#describeObject



31
32
33
34
35
36
37
38
39
40
# File 'lib/praxis/route.rb', line 31

def describe
  result = {
    verb: verb,
    path: path.to_s,
    version: version
  }
  result[:name] = name unless name.nil?
  result[:options] = options if options.any?
  result
end

#example(example_hash: {}, params:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/praxis/route.rb', line 15

def example(example_hash:{}, params:)
  path_param_keys = self.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 }
  example = { verb: self.verb, url: self.path.expand(path_params), query_params: query_params }

end