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
|
module ActionDispatch
module Routing
class Route #:nodoc:
attr_reader :app, :conditions, :defaults, :name
attr_reader :path, :requirements
def initialize(app, conditions = {}, requirements = {}, defaults = {}, name = nil)
@app = app
@defaults = defaults
@name = name
@requirements = requirements.merge(defaults)
@requirements.delete(:controller) if @requirements[:controller].is_a?(Regexp)
@requirements.delete_if { |k, v|
v == Regexp.compile("[^#{SEPARATORS.join}]+")
}
if path = conditions[:path_info]
@path = path
conditions[:path_info] = ::Rack::Mount::Strexp.compile(path, requirements, SEPARATORS)
end
@conditions = conditions.inject({}) { |h, (k, v)|
h[k] = Rack::Mount::RegexpWithNamedGroups.new(v)
h
}
end
def verb
if method = conditions[:request_method]
case method
when Regexp
method.source.upcase
else
method.to_s.upcase
end
end
end
def segment_keys
@segment_keys ||= conditions[:path_info].names.compact.map { |key| key.to_sym }
end
def to_a
[@app, @conditions, @defaults, @name]
end
end
end
end
|