aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorNicholas Seckar <nseckar@gmail.com>2007-01-28 17:29:51 +0000
committerNicholas Seckar <nseckar@gmail.com>2007-01-28 17:29:51 +0000
commit2cc9c8135c57671013a0b89fd683654cb6782676 (patch)
tree4c7bb29cff673c84eafa009a366f902731afdff5 /actionpack
parent17a9405b584d7bd2ceb05f9310112a1d8a00b6ae (diff)
downloadrails-2cc9c8135c57671013a0b89fd683654cb6782676.tar.gz
rails-2cc9c8135c57671013a0b89fd683654cb6782676.tar.bz2
rails-2cc9c8135c57671013a0b89fd683654cb6782676.zip
Allow Routes to generate all urls for a set of options by specifying :generate_all => true. References #1739.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6082 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/routing.rb9
-rw-r--r--actionpack/test/controller/routing_test.rb14
3 files changed, 25 insertions, 0 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index a4f7e2aa93..70a4c8dbd0 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Allow Routes to generate all urls for a set of options by specifying :generate_all => true. Allows caching to properly set or expire all paths for a resource. References #1739. [Nicholas Seckar]
+
* Change the query parser to map empty GET params to "" rather than nil. Closes #5694. [Nicholas Seckar]
* date_select and datetime_select take a :default option. #7052 [nik.wakelin]
diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb
index f5faca71ca..5b888443d8 100644
--- a/actionpack/lib/action_controller/routing.rb
+++ b/actionpack/lib/action_controller/routing.rb
@@ -1214,6 +1214,7 @@ module ActionController
def generate(options, recall = {}, method=:generate)
named_route_name = options.delete(:use_route)
+ generate_all = options.delete(:generate_all)
if named_route_name
named_route = named_routes[named_route_name]
options = named_route.parameter_shell.merge(options)
@@ -1249,6 +1250,14 @@ module ActionController
action = merged[:action]
raise RoutingError, "Need controller and action!" unless controller && action
+
+ if generate_all
+ # Used by caching to expire all paths for a resource
+ return routes.collect do |route|
+ route.send(method, options, merged, expire_on)
+ end.compact
+ end
+
# don't use the recalled keys when determining which routes to check
routes = routes_by_controller[controller][action][options.keys.sort_by { |x| x.object_id }]
diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb
index 2c59217868..0c8628fbf7 100644
--- a/actionpack/test/controller/routing_test.rb
+++ b/actionpack/test/controller/routing_test.rb
@@ -1719,6 +1719,20 @@ class RouteSetTest < Test::Unit::TestCase
)
end
+ def test_generate_all
+ set.draw do |map|
+ map.connect 'show_post/:id', :controller => 'post', :action => 'show'
+ map.connect ':controller/:action/:id'
+ end
+ all = set.generate(
+ {:action => 'show', :id => 10, :generate_all => true},
+ {:controller => 'post', :action => 'show'}
+ )
+ assert_equal 2, all.length
+ assert_equal '/show_post/10', all.first
+ assert_equal '/post/show/10', all.last
+ end
+
end
class RoutingTest < Test::Unit::TestCase