Remove duplicate routes from mapped resources (closes #5712) [eigentone@gmail.com]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4669 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
01e389c965
commit
5130fc84c6
|
@ -143,9 +143,10 @@ module ActionController
|
|||
end
|
||||
|
||||
map.connect(resource.member_path, route_options.merge(:action => primary)) unless primary.blank?
|
||||
map.named_route("#{resource.name_prefix}#{resource.singular}", resource.member_path, :action => "show", :conditions => { :method => :get })
|
||||
map.named_route("formatted_#{resource.name_prefix}#{resource.singular}", "#{resource.member_path}.:format", :action => "show", :conditions => { :method => :get })
|
||||
end
|
||||
|
||||
map.named_route("#{resource.name_prefix}#{resource.singular}", resource.member_path, :action => "show", :conditions => { :method => :get })
|
||||
map.named_route("formatted_#{resource.name_prefix}#{resource.singular}", "#{resource.member_path}.:format", :action => "show", :conditions => { :method => :get })
|
||||
end
|
||||
|
||||
def requirements_for(method)
|
||||
|
@ -154,4 +155,4 @@ module ActionController
|
|||
end
|
||||
end
|
||||
|
||||
ActionController::Routing::RouteSet::Mapper.send :include, ActionController::Resources
|
||||
ActionController::Routing::RouteSet::Mapper.send :include, ActionController::Resources
|
|
@ -133,6 +133,18 @@ class ResourcesTest < Test::Unit::TestCase
|
|||
:options => { :thread_id => '1', :message_id => '2' }
|
||||
end
|
||||
end
|
||||
|
||||
def test_restful_routes_dont_generate_duplicates
|
||||
with_restful_routing :messages do
|
||||
routes = ActionController::Routing::Routes.routes
|
||||
routes.each do |route|
|
||||
routes.each do |r|
|
||||
next if route === r # skip the comparison instance
|
||||
assert distinct_routes?(route, r), "Duplicate Route: #{route}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
def with_restful_routing(*args)
|
||||
|
@ -212,4 +224,14 @@ class ResourcesTest < Test::Unit::TestCase
|
|||
"#{method} not in #{action_method} methods: #{resource.send("#{action_method}_methods")[method].inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
def distinct_routes? (r1, r2)
|
||||
if r1.conditions == r2.conditions and r1.requirements == r2.requirements then
|
||||
if r1.segments.collect(&:to_s) == r2.segments.collect(&:to_s) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue