Class: Grape::Router::Route
- Inherits:
-
Object
- Object
- Grape::Router::Route
show all
- Extended by:
- Forwardable
- Defined in:
- lib/grape/router/route.rb
Constant Summary
collapse
- ROUTE_ATTRIBUTE_REGEXP =
/route_([_a-zA-Z]\w*)/
- SOURCE_LOCATION_REGEXP =
/^(.*?):(\d+?)(?::in `.+?')?$/
- FIXED_NAMED_CAPTURES =
%w[format version].freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(method, pattern, **options) ⇒ Route
64
65
66
67
68
69
|
# File 'lib/grape/router/route.rb', line 64
def initialize(method, pattern, **options)
@suffix = options[:suffix]
@options = options.merge(method: method.to_s.upcase)
@pattern = Pattern.new(pattern, **options)
@translator = AttributeTranslator.new(**options, request_method: method.to_s.upcase)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_id, *arguments) ⇒ Object
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/grape/router/route.rb', line 20
def method_missing(method_id, *arguments)
match = ROUTE_ATTRIBUTE_REGEXP.match(method_id.to_s)
if match
method_name = match.captures.last.to_sym
warn_route_methods(method_name, caller(1).shift)
@options[method_name]
else
super
end
end
|
Instance Attribute Details
#app ⇒ Object
Returns the value of attribute app.
13
14
15
|
# File 'lib/grape/router/route.rb', line 13
def app
@app
end
|
#index ⇒ Object
Returns the value of attribute index.
13
14
15
|
# File 'lib/grape/router/route.rb', line 13
def index
@index
end
|
#options ⇒ Object
Returns the value of attribute options.
13
14
15
|
# File 'lib/grape/router/route.rb', line 13
def options
@options
end
|
#pattern ⇒ Object
Returns the value of attribute pattern.
13
14
15
|
# File 'lib/grape/router/route.rb', line 13
def pattern
@pattern
end
|
#regexp ⇒ Object
Returns the value of attribute regexp.
13
14
15
|
# File 'lib/grape/router/route.rb', line 13
def regexp
@regexp
end
|
#translator ⇒ Object
Also known as:
attributes
Returns the value of attribute translator.
13
14
15
|
# File 'lib/grape/router/route.rb', line 13
def translator
@translator
end
|
Instance Method Details
#apply(app) ⇒ Object
75
76
77
78
|
# File 'lib/grape/router/route.rb', line 75
def apply(app)
@app = app
self
end
|
#exec(env) ⇒ Object
71
72
73
|
# File 'lib/grape/router/route.rb', line 71
def exec(env)
@app.call(env)
end
|
#match?(input) ⇒ Boolean
80
81
82
|
# File 'lib/grape/router/route.rb', line 80
def match?(input)
translator.respond_to?(:forward_match) && translator.forward_match ? input.start_with?(pattern.origin) : pattern.match?(input)
end
|
#params(input = nil) ⇒ Object
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/grape/router/route.rb', line 84
def params(input = nil)
if input.nil?
pattern.named_captures.keys.each_with_object(translator.params) do |(key), defaults|
defaults[key] ||= '' unless FIXED_NAMED_CAPTURES.include?(key) || defaults.key?(key)
end
else
parsed = pattern.params(input)
parsed ? parsed.delete_if { |_, value| value.nil? }.symbolize_keys : {}
end
end
|
#respond_to_missing?(method_id, _) ⇒ Boolean
31
32
33
|
# File 'lib/grape/router/route.rb', line 31
def respond_to_missing?(method_id, _)
ROUTE_ATTRIBUTE_REGEXP.match(method_id.to_s)
end
|
#route_method ⇒ Object
54
55
56
57
|
# File 'lib/grape/router/route.rb', line 54
def route_method
warn_route_methods(:method, caller(1).shift, :request_method)
request_method
end
|
#route_path ⇒ Object
59
60
61
62
|
# File 'lib/grape/router/route.rb', line 59
def route_path
warn_route_methods(:path, caller(1).shift)
pattern.path
end
|