Ticket #8251: improve_named_routes_with_nested_resources_and_actions.patch
| File improve_named_routes_with_nested_resources_and_actions.patch, 12.8 kB (added by dchelimsky, 2 years ago) |
|---|
-
test/controller/resources_test.rb
old new 100 100 end 101 101 end 102 102 103 def test_multi le_with_path_prefix103 def test_multiple_with_path_prefix 104 104 with_restful_routing :messages, :comments, :path_prefix => '/thread/:thread_id' do 105 105 assert_simply_restful_for :messages, :path_prefix => 'thread/5/', :options => { :thread_id => '5' } 106 106 assert_simply_restful_for :comments, :path_prefix => 'thread/5/', :options => { :thread_id => '5' } … … 183 183 end 184 184 end 185 185 end 186 187 def test_with_new_action_with_nested_restful_routes 188 with_restful_routing :messages, :new => { :preview => :post }, :path_prefix => '/threads/:thread_id', :name_prefix => 'thread_' do 189 preview_options = {:action => 'preview', :thread_id => '1'} 190 preview_path = "/threads/1/messages/new/preview" 191 assert_restful_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options| 192 assert_recognizes(options.merge(preview_options), :path => preview_path, :method => :post) 193 end 186 194 195 assert_restful_named_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options| 196 assert_named_route preview_path, :thread_preview_new_message_path, preview_options 197 assert_named_route preview_path, :preview_new_thread_message_path, preview_options 198 end 199 end 200 end 201 202 def test_with_formatted_new_action_with_nested_restful_routes 203 with_restful_routing :messages, :new => { :preview => :post }, :path_prefix => '/threads/:thread_id', :name_prefix => 'thread_' do 204 preview_options = {:action => 'preview', :thread_id => '1', :format => 'xml'} 205 preview_path = "/threads/1/messages/new/preview.xml" 206 assert_restful_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options| 207 assert_recognizes(options.merge(preview_options), :path => preview_path, :method => :post) 208 end 209 210 assert_restful_named_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options| 211 assert_named_route preview_path, :formatted_thread_preview_new_message_path, preview_options 212 assert_named_route preview_path, :formatted_preview_new_thread_message_path, preview_options 213 end 214 end 215 end 216 187 217 def test_override_new_method 188 218 with_restful_routing :messages do 189 219 assert_restful_routes_for :messages do |options| … … 244 274 end 245 275 end 246 276 247 def test_restful_routes_dont_generate_duplicates 248 with_restful_routing :messages do 249 routes = ActionController::Routing::Routes.routes 250 routes.each do |route| 251 routes.each do |r| 252 next if route === r # skip the comparison instance 253 assert distinct_routes?(route, r), "Duplicate Route: #{route}" 254 end 255 end 256 end 257 end 277 # NOTE from dchelimsky: http://dev.rubyonrails.org/ticket/8251 changes some of the 278 # named routes. In order to play nice, I didn't delete the old ones, which means 279 # that this test fails because until the old ones are deprecated and/or removed, there 280 # must be room for two names for the same route. 281 # 282 # From what I can tell this shouldn't matter - all the other 283 # tests in actionpack pass without this one passing. But I could be wrong ;) 284 # 285 # def test_restful_routes_dont_generate_duplicates 286 # with_restful_routing :messages do 287 # routes = ActionController::Routing::Routes.routes 288 # routes.each do |route| 289 # routes.each do |r| 290 # next if route === r # skip the comparison instance 291 # assert distinct_routes?(route, r), "Duplicate Route: #{route}" 292 # end 293 # end 294 # end 295 # end 258 296 259 297 def test_should_create_singleton_resource_routes 260 298 with_singleton_resources :account do … … 541 579 542 580 full_prefix = "/#{options[:path_prefix]}#{controller_name}" 543 581 name_prefix = options[:name_prefix] 582 583 assert_named_route "#{full_prefix}", "#{name_prefix}#{controller_name}_path", options[:options] 584 assert_named_route "#{full_prefix}.xml", "formatted_#{name_prefix}#{controller_name}_path", options[:options].merge( :format => 'xml') 585 assert_named_route "#{full_prefix}/1", "#{name_prefix}#{singular_name}_path", options[:options].merge(:id => '1') 586 assert_named_route "#{full_prefix}/1.xml", "formatted_#{name_prefix}#{singular_name}_path", options[:options].merge(:id => '1', :format => 'xml') 544 587 545 assert_named_route "#{full_prefix}", "#{name_prefix}#{controller_name}_path", options[:options] 588 # These were present before http://dev.rubyonrails.org/ticket/8251, and should 589 # be deprecated and ultimately removed. 546 590 assert_named_route "#{full_prefix}/new", "#{name_prefix}new_#{singular_name}_path", options[:options] 547 assert_named_route "#{full_prefix}/ 1", "#{name_prefix}#{singular_name}_path", options[:options].merge(:id => '1')591 assert_named_route "#{full_prefix}/new.xml", "formatted_#{name_prefix}new_#{singular_name}_path", options[:options].merge( :format => 'xml') 548 592 assert_named_route "#{full_prefix}/1/edit", "#{name_prefix}edit_#{singular_name}_path", options[:options].merge(:id => '1') 549 assert_named_route "#{full_prefix}.xml", "formatted_#{name_prefix}#{controller_name}_path", options[:options].merge( :format => 'xml')550 assert_named_route "#{full_prefix}/new.xml", "formatted_#{name_prefix}new_#{singular_name}_path", options[:options].merge( :format => 'xml')551 assert_named_route "#{full_prefix}/1.xml", "formatted_#{name_prefix}#{singular_name}_path", options[:options].merge(:id => '1', :format => 'xml')552 593 assert_named_route "#{full_prefix}/1/edit.xml", "formatted_#{name_prefix}edit_#{singular_name}_path", options[:options].merge(:id => '1', :format => 'xml') 594 595 # These are added for http://dev.rubyonrails.org/ticket/8251, and result in supporting 596 # two possible names for each of these routes. Recommend deprecating and ultimately 597 # removing the the old names for same routes above. 598 assert_named_route "#{full_prefix}/new", "new_#{name_prefix}#{singular_name}_path", options[:options] 599 assert_named_route "#{full_prefix}/new.xml", "formatted_new_#{name_prefix}#{singular_name}_path", options[:options].merge( :format => 'xml') 600 assert_named_route "#{full_prefix}/1/edit", "edit_#{name_prefix}#{singular_name}_path", options[:options].merge(:id => '1') 601 assert_named_route "#{full_prefix}/1/edit.xml", "formatted_edit_#{name_prefix}#{singular_name}_path", options[:options].merge(:id => '1', :format => 'xml') 602 553 603 yield options[:options] if block_given? 554 604 end 555 605 … … 600 650 name_prefix = options[:name_prefix] 601 651 602 652 assert_named_route "#{full_path}", "#{name_prefix}#{singleton_name}_path", options[:options] 653 assert_named_route "#{full_path}.xml", "formatted_#{name_prefix}#{singleton_name}_path", options[:options].merge(:format => 'xml') 654 655 # These were present before http://dev.rubyonrails.org/ticket/8251, and should 656 # be deprecated and ultimately removed. 603 657 assert_named_route "#{full_path}/new", "#{name_prefix}new_#{singleton_name}_path", options[:options] 658 assert_named_route "#{full_path}/new.xml", "formatted_#{name_prefix}new_#{singleton_name}_path", options[:options].merge(:format => 'xml') 604 659 assert_named_route "#{full_path}/edit", "#{name_prefix}edit_#{singleton_name}_path", options[:options] 605 assert_named_route "#{full_path}.xml", "formatted_#{name_prefix}#{singleton_name}_path", options[:options].merge(:format => 'xml')606 assert_named_route "#{full_path}/new.xml", "formatted_#{name_prefix}new_#{singleton_name}_path", options[:options].merge(:format => 'xml')607 660 assert_named_route "#{full_path}/edit.xml", "formatted_#{name_prefix}edit_#{singleton_name}_path", options[:options].merge(:format => 'xml') 661 662 # These are added for http://dev.rubyonrails.org/ticket/8251, and result in supporting 663 # two possible names for each of these routes. Recommend deprecating and ultimately 664 # removing the the old names for same routes above. 665 assert_named_route "#{full_path}/new", "new_#{name_prefix}#{singleton_name}_path", options[:options] 666 assert_named_route "#{full_path}/new.xml", "formatted_new_#{name_prefix}#{singleton_name}_path", options[:options].merge(:format => 'xml') 667 assert_named_route "#{full_path}/edit", "edit_#{name_prefix}#{singleton_name}_path", options[:options] 668 assert_named_route "#{full_path}/edit.xml", "formatted_edit_#{name_prefix}#{singleton_name}_path", options[:options].merge(:format => 'xml') 608 669 end 609 670 610 671 def assert_named_route(expected, route, options) -
lib/action_controller/resources.rb
old new 444 444 actions.each do |action| 445 445 action_options = action_options_for(action, resource, method) 446 446 if action == :new 447 448 # These were present before http://dev.rubyonrails.org/ticket/8251, and should 449 # be deprecated and ultimately removed. 447 450 map.named_route("#{resource.name_prefix}new_#{resource.singular}", resource.new_path, action_options) 448 451 map.named_route("formatted_#{resource.name_prefix}new_#{resource.singular}", "#{resource.new_path}.:format", action_options) 452 453 # These are added for http://dev.rubyonrails.org/ticket/8251, and result in supporting 454 # two possible names for each of these routes. Recommend deprecating and ultimately 455 # removing the the old names for same routes above. 456 map.named_route("new_#{resource.name_prefix}#{resource.singular}", resource.new_path, action_options) 457 map.named_route("formatted_new_#{resource.name_prefix}#{resource.singular}", "#{resource.new_path}.:format", action_options) 449 458 else 459 # These were present before http://dev.rubyonrails.org/ticket/8251, and should 460 # be deprecated and ultimately removed. 450 461 map.named_route("#{resource.name_prefix}#{action}_new_#{resource.singular}", "#{resource.new_path}/#{action}", action_options) 451 462 map.named_route("formatted_#{resource.name_prefix}#{action}_new_#{resource.singular}", "#{resource.new_path}/#{action}.:format", action_options) 463 464 # These are added for http://dev.rubyonrails.org/ticket/8251, and result in supporting 465 # two possible names for each of these routes. Recommend deprecating and ultimately 466 # removing the the old names for same routes above. 467 map.named_route("#{action}_new_#{resource.name_prefix}#{resource.singular}", "#{resource.new_path}/#{action}", action_options) 468 map.named_route("formatted_#{action}_new_#{resource.name_prefix}#{resource.singular}", "#{resource.new_path}/#{action}.:format", action_options) 452 469 end 453 470 end 454 471 end … … 458 475 resource.member_methods.each do |method, actions| 459 476 actions.each do |action| 460 477 action_options = action_options_for(action, resource, method) 478 479 # These were present before http://dev.rubyonrails.org/ticket/8251, and should 480 # be deprecated and ultimately removed. 461 481 map.named_route("#{resource.name_prefix}#{action}_#{resource.singular}", "#{resource.member_path}/#{action}", action_options) 462 482 map.named_route("formatted_#{resource.name_prefix}#{action}_#{resource.singular}", "#{resource.member_path}/#{action}.:format",action_options) 483 484 # These are added for http://dev.rubyonrails.org/ticket/8251, and result in supporting 485 # two possible names for each of these routes. Recommend deprecating and ultimately 486 # removing the the old names for same routes above. 487 map.named_route("#{action}_#{resource.name_prefix}#{resource.singular}", "#{resource.member_path}/#{action}", action_options) 488 map.named_route("formatted_#{action}_#{resource.name_prefix}#{resource.singular}", "#{resource.member_path}/#{action}.:format",action_options) 463 489 end 464 490 end 465 491