diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2015-03-02 15:02:14 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2015-03-02 15:02:14 -0800 |
commit | 12f2fc56aa7697311b3259d14f73db23e540aac1 (patch) | |
tree | 58495e6d86ec4ad1461e4721497100d561760c56 /actionpack/lib/action_dispatch/journey/routes.rb | |
parent | 3d69222ca971d1053b69558bbc4977c1acb6d6cb (diff) | |
parent | 89edfbd3a452ce80b1865b136df8a13aad7835b4 (diff) | |
download | rails-12f2fc56aa7697311b3259d14f73db23e540aac1.tar.gz rails-12f2fc56aa7697311b3259d14f73db23e540aac1.tar.bz2 rails-12f2fc56aa7697311b3259d14f73db23e540aac1.zip |
Merge pull request #15806 from tgxworld/partition_routes_during_setup
Partition routes during setup.
Diffstat (limited to 'actionpack/lib/action_dispatch/journey/routes.rb')
-rw-r--r-- | actionpack/lib/action_dispatch/journey/routes.rb | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/actionpack/lib/action_dispatch/journey/routes.rb b/actionpack/lib/action_dispatch/journey/routes.rb index 80e3818ccd..a6d1980db2 100644 --- a/actionpack/lib/action_dispatch/journey/routes.rb +++ b/actionpack/lib/action_dispatch/journey/routes.rb @@ -5,13 +5,14 @@ module ActionDispatch class Routes # :nodoc: include Enumerable - attr_reader :routes, :named_routes + attr_reader :routes, :named_routes, :custom_routes, :anchored_routes def initialize @routes = [] @named_routes = {} @ast = nil - @partitioned_routes = nil + @anchored_routes = [] + @custom_routes = [] @simulator = nil end @@ -30,18 +31,22 @@ module ActionDispatch def clear routes.clear + anchored_routes.clear + custom_routes.clear named_routes.clear end - def partitioned_routes - @partitioned_routes ||= routes.partition do |r| - r.path.anchored && r.ast.grep(Nodes::Symbol).all?(&:default_regexp?) + def partition_route(route) + if route.path.anchored && route.ast.grep(Nodes::Symbol).all?(&:default_regexp?) + anchored_routes << route + else + custom_routes << route end end def ast @ast ||= begin - asts = partitioned_routes.first.map(&:ast) + asts = anchored_routes.map(&:ast) Nodes::Or.new(asts) unless asts.empty? end end @@ -60,6 +65,7 @@ module ActionDispatch route.precedence = routes.length routes << route named_routes[name] = route if name && !named_routes[name] + partition_route(route) clear_cache! route end @@ -68,7 +74,6 @@ module ActionDispatch def clear_cache! @ast = nil - @partitioned_routes = nil @simulator = nil end end |