diff --git a/lib/routes_upgrader.rb b/lib/routes_upgrader.rb index 00c10a4..1788d1a 100644 --- a/lib/routes_upgrader.rb +++ b/lib/routes_upgrader.rb @@ -268,6 +268,8 @@ def to_route_code unless copied_options.empty? copied_options_str = ", " + copied_options.map { |k, v| "#{k.inspect} => #{v.inspect}" }.join(",") end + + add_has_many_to_children if !@children.empty? || @options.has_key?(:collection) || @options.has_key?(:member) prefix = ["#{route_method} :#{@name}#{copied_options_str} do"] @@ -279,6 +281,16 @@ def to_route_code indent_lines [base % [@name]] end end + + def add_has_many_to_children + if @options[:has_many].is_a?(Symbol) + @children << FakeResourceRoute.new(@options[:has_many]) + elsif @options[:has_many].is_a?(Array) + @options[:has_many].each do |resource| + @children << FakeResourceRoute.new(resource) + end + end + end def custom_methods collection_code = generate_custom_methods_for(:collection) diff --git a/test/routes_upgrader_test.rb b/test/routes_upgrader_test.rb index 955bcce..f51297f 100644 --- a/test/routes_upgrader_test.rb +++ b/test/routes_upgrader_test.rb @@ -215,4 +215,28 @@ def test_generates_code_for_delete_route upgrader.routes_code = routes_code assert_equal new_routes_code.strip, upgrader.generate_new_routes.strip end + + def test_generates_code_for_resources_with_has_many_option + routes_code = %Q{ +ActionController::Routing::Routes.draw do |map| + map.resources :ducks, :has_many => [:geese] +end + } + + new_routes_code = %Q{ +MyApplication::Application.routes.draw do + resources :ducks do + + + resources :geese + end + +end + } + + upgrader = Rails::Upgrading::RoutesUpgrader.new + upgrader.routes_code = routes_code + + assert_equal new_routes_code.strip, upgrader.generate_new_routes.strip + end end