Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Make it simpler to make the root route an alias for another route. C…

…loses #10818 [bscofield]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8738 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 6e165b894051a23c2818cb8d21dd74de8d41c622 1 parent 0713286
@NZKoz NZKoz authored
View
5 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]
View
6 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.
#
View
5 actionpack/lib/action_controller/routing/route_set.rb
@@ -19,6 +19,11 @@ def connect(path, options = {})
# 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
View
24 actionpack/test/controller/routing_test.rb
@@ -1808,6 +1808,30 @@ def test_recognize_with_conditions
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)
Please sign in to comment.
Something went wrong with that request. Please try again.