Raise an error on root route naming conflicts.

Raises an ArgumentError when multiple root routes are defined in the
same context instead of assigning nil names to subsequent roots.
This commit is contained in:
Gannon McGibbon 2018-11-20 13:16:39 -05:00
parent 023a840f5f
commit dde9c48839
3 changed files with 23 additions and 8 deletions

View File

@ -1,3 +1,10 @@
* Raise an error on root route naming conflicts.
Raises an ArgumentError when multiple root routes are defined in the
same context instead of assigning nil names to subsequent roots.
*Gannon McGibbon*
* Allow rescue from parameter parse errors:
```

View File

@ -656,7 +656,7 @@ module ActionDispatch
# Query if the following named route was already defined.
def has_named_route?(name)
@set.named_routes.key? name
@set.named_routes.key?(name)
end
private
@ -1952,9 +1952,7 @@ module ActionDispatch
end
def match_root_route(options)
name = has_named_route?(name_for_action(:root, nil)) ? nil : :root
args = ["/", { as: name, via: :get }.merge!(options)]
args = ["/", { as: :root, via: :get }.merge(options)]
match(*args)
end
end

View File

@ -3698,15 +3698,25 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
end
end
def test_multiple_roots
draw do
namespace :foo do
def test_multiple_roots_raises_error
ex = assert_raises(ArgumentError) {
draw do
root "pages#index", constraints: { host: "www.example.com" }
root "admin/pages#index", constraints: { host: "admin.example.com" }
end
}
assert_match(/Invalid route name, already in use: 'root'/, ex.message)
end
def test_multiple_named_roots
draw do
namespace :foo do
root "pages#index", constraints: { host: "www.example.com" }
root "admin/pages#index", constraints: { host: "admin.example.com" }, as: :admin_root
end
root "pages#index", constraints: { host: "www.example.com" }
root "admin/pages#index", constraints: { host: "admin.example.com" }
root "admin/pages#index", constraints: { host: "admin.example.com" }, as: :admin_root
end
get "http://www.example.com/foo"