aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/journey/routes.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-03-02 15:02:14 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2015-03-02 15:02:14 -0800
commit12f2fc56aa7697311b3259d14f73db23e540aac1 (patch)
tree58495e6d86ec4ad1461e4721497100d561760c56 /actionpack/lib/action_dispatch/journey/routes.rb
parent3d69222ca971d1053b69558bbc4977c1acb6d6cb (diff)
parent89edfbd3a452ce80b1865b136df8a13aad7835b4 (diff)
downloadrails-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.rb19
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