2009-10-24 19:08:54 -04:00
|
|
|
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
|
2009-10-26 12:23:39 -04:00
|
|
|
if method = conditions[:request_method]
|
|
|
|
case method
|
|
|
|
when Regexp
|
|
|
|
method.source.upcase
|
|
|
|
else
|
|
|
|
method.to_s.upcase
|
|
|
|
end
|
2009-10-24 19:08:54 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def segment_keys
|
|
|
|
@segment_keys ||= conditions[:path_info].names.compact.map { |key| key.to_sym }
|
|
|
|
end
|
|
|
|
|
2009-10-26 12:16:17 -04:00
|
|
|
def to_a
|
2009-10-24 19:08:54 -04:00
|
|
|
[@app, @conditions, @defaults, @name]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|