aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-09-12 15:48:03 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-09-12 16:50:49 -0700
commit943aa826a48c7db682e24f13cc93ed3298aa7e1a (patch)
treee978b30f85caddb51c6ae163d8de9ba3dbf97d9b /actionpack/lib/action_dispatch
parentf5ab6805edbd72f752069d94d88003314e2a8a0a (diff)
downloadrails-943aa826a48c7db682e24f13cc93ed3298aa7e1a.tar.gz
rails-943aa826a48c7db682e24f13cc93ed3298aa7e1a.tar.bz2
rails-943aa826a48c7db682e24f13cc93ed3298aa7e1a.zip
reduce dependencies of external objects in the Route class
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/routing/route.rb28
-rw-r--r--actionpack/lib/action_dispatch/routing/route_set.rb6
2 files changed, 18 insertions, 16 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route.rb b/actionpack/lib/action_dispatch/routing/route.rb
index 563adb02c4..76d18e4dd5 100644
--- a/actionpack/lib/action_dispatch/routing/route.rb
+++ b/actionpack/lib/action_dispatch/routing/route.rb
@@ -3,10 +3,15 @@ module ActionDispatch
class Route #:nodoc:
attr_reader :conditions, :path
- def initialize(set, app, conditions, requirements, defaults, name, anchor)
- @set = set
- path = ::Rack::Mount::Strexp.new(
- conditions[:path_info], requirements, SEPARATORS, anchor)
+ def initialize(valid_conditions, app, conditions, requirements, defaults, name, anchor)
+ @valid_conditions = valid_conditions
+ strexp = Journey::Router::Strexp.new(
+ conditions.delete(:path_info),
+ requirements,
+ SEPARATORS,
+ anchor)
+
+ @path = Journey::Path::Pattern.new(strexp)
@verbs = conditions[:request_method] || []
@@ -16,22 +21,19 @@ module ActionDispatch
# :request_method represents the HTTP verb that matches this route.
#
# Here we munge values before they get sent on to rack-mount.
- @conditions[:request_method] = %r[^#{verb}$] unless @verbs.empty?
- @conditions[:path_info] = Rack::Mount::RegexpWithNamedGroups.new(path)
- @conditions.delete_if{ |k,v| k != :path_info && !valid_condition?(k) }
- end
-
- def verb
- @verbs.join '|'
+ unless @verbs.empty?
+ @conditions[:request_method] = %r[^#{@verbs.join('|')}$]
+ end
+ @conditions.delete_if{ |k,v| !valid_condition?(k) }
end
def segment_keys
- @segment_keys ||= conditions[:path_info].names.compact.map { |key| key.to_sym }
+ @segment_keys ||= path.names.compact.map { |key| key.to_sym }
end
private
def valid_condition?(method)
- segment_keys.include?(method) || @set.valid_conditions.include?(method)
+ segment_keys.include?(method) || @valid_conditions.include?(method)
end
end
end
diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb
index 21b720806c..dad4ecb27f 100644
--- a/actionpack/lib/action_dispatch/routing/route_set.rb
+++ b/actionpack/lib/action_dispatch/routing/route_set.rb
@@ -345,9 +345,9 @@ module ActionDispatch
def add_route(app, conditions = {}, requirements = {}, defaults = {}, name = nil, anchor = true)
raise ArgumentError, "Invalid route name: '#{name}'" unless name.blank? || name.to_s.match(/^[_a-z]\w*$/i)
- route = Route.new(self, app, conditions, requirements, defaults, name, anchor)
- path = route.conditions[:path_info]
- route = @set.add_route(app, path, route.conditions, defaults, name)
+ foo = Route.new(valid_conditions, app, conditions, requirements, defaults, name, anchor)
+ path = foo.path
+ route = @set.add_route(app, path, foo.conditions, defaults, name)
named_routes[name] = route if name
route
end