aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2008-01-26 08:41:19 +0000
committerMichael Koziarski <michael@koziarski.com>2008-01-26 08:41:19 +0000
commit6e165b894051a23c2818cb8d21dd74de8d41c622 (patch)
tree04054b28ad0f83e843336c5d4bd7f46f06fd5cd7 /actionpack
parent07132865d69cda80feba26827d3de9fe19365876 (diff)
downloadrails-6e165b894051a23c2818cb8d21dd74de8d41c622.tar.gz
rails-6e165b894051a23c2818cb8d21dd74de8d41c622.tar.bz2
rails-6e165b894051a23c2818cb8d21dd74de8d41c622.zip
Make it simpler to make the root route an alias for another route. Closes #10818 [bscofield]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8738 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/CHANGELOG5
-rw-r--r--actionpack/lib/action_controller/routing.rb6
-rw-r--r--actionpack/lib/action_controller/routing/route_set.rb5
-rw-r--r--actionpack/test/controller/routing_test.rb24
4 files changed, 40 insertions, 0 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 40cba442d4..cd4ffe06ca 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,10 @@
*SVN*
+* Make map.root accept a single symbol as an argument to declare an alias. #10818 [bscofield]
+
+ e.g. map.dashboard '/dashboard', :controller=>'dashboard'
+ map.root :dashboard
+
* Handle corner case with image_tag when passed 'messed up' image names. #9018 [duncanbeevers, mpalmer]
* Add label_tag helper for generating elements. #10802 [DefV]
diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb
index d93dc5205f..70745f9d27 100644
--- a/actionpack/lib/action_controller/routing.rb
+++ b/actionpack/lib/action_controller/routing.rb
@@ -115,6 +115,12 @@ module ActionController
# root_url # => 'http://www.example.com/'
# root_path # => ''
#
+ # You can also specify an already-defined named route in your map.root call:
+ #
+ # # In routes.rb
+ # map.new_session :controller => 'sessions', :action => 'new'
+ # map.root :new_session
+ #
# Note: when using +with_options+, the route is simply named after the
# method you call on the block parameter rather than map.
#
diff --git a/actionpack/lib/action_controller/routing/route_set.rb b/actionpack/lib/action_controller/routing/route_set.rb
index 30995297f3..6ba1a5c3ea 100644
--- a/actionpack/lib/action_controller/routing/route_set.rb
+++ b/actionpack/lib/action_controller/routing/route_set.rb
@@ -19,6 +19,11 @@ module ActionController
# Creates a named route called "root" for matching the root level request.
def root(options = {})
+ if options.is_a?(Symbol)
+ if source_route = @set.named_routes.routes[options]
+ options = source_route.defaults.merge({ :conditions => source_route.conditions })
+ end
+ end
named_route("root", '', options)
end
diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb
index 73b1fa55e8..38a0aa7bdc 100644
--- a/actionpack/test/controller/routing_test.rb
+++ b/actionpack/test/controller/routing_test.rb
@@ -1808,6 +1808,30 @@ class RouteSetTest < Test::Unit::TestCase
Object.send(:remove_const, :PeopleController)
end
+ def test_recognize_with_alias_in_conditions
+ Object.const_set(:PeopleController, Class.new)
+
+ set.draw do |map|
+ map.people "/people", :controller => 'people', :action => "index",
+ :conditions => { :method => :get }
+ map.root :people
+ end
+
+ request.path = "/people"
+ request.method = :get
+ assert_nothing_raised { set.recognize(request) }
+ assert_equal("people", request.path_parameters[:controller])
+ assert_equal("index", request.path_parameters[:action])
+
+ request.path = "/"
+ request.method = :get
+ assert_nothing_raised { set.recognize(request) }
+ assert_equal("people", request.path_parameters[:controller])
+ assert_equal("index", request.path_parameters[:action])
+ ensure
+ Object.send(:remove_const, :PeopleController)
+ end
+
def test_typo_recognition
Object.const_set(:ArticlesController, Class.new)