-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathroute.rb
62 lines (46 loc) · 1.5 KB
/
route.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# frozen_string_literal: true
module Grape
class Router
class Route < BaseRoute
extend Forwardable
FORWARD_MATCH_METHOD = ->(input, pattern) { input.start_with?(pattern.origin) }
NON_FORWARD_MATCH_METHOD = ->(input, pattern) { pattern.match?(input) }
attr_reader :app, :request_method
def_delegators :pattern, :path, :origin
def initialize(method, origin, path, options)
@request_method = upcase_method(method)
@pattern = Grape::Router::Pattern.new(origin, path, options)
@match_function = options[:forward_match] ? FORWARD_MATCH_METHOD : NON_FORWARD_MATCH_METHOD
super(options)
end
def convert_to_head_request!
@request_method = Rack::HEAD
end
def exec(env)
@app.call(env)
end
def apply(app)
@app = app
self
end
def match?(input)
return false if input.blank?
@match_function.call(input, pattern)
end
def params(input = nil)
return params_without_input if input.blank?
parsed = pattern.params(input)
return {} unless parsed
parsed.compact.symbolize_keys
end
private
def params_without_input
@params_without_input ||= pattern.captures_default.merge(attributes.params)
end
def upcase_method(method)
method_s = method.to_s
Grape::Http::Headers::SUPPORTED_METHODS.detect { |m| m.casecmp(method_s).zero? } || method_s.upcase
end
end
end
end