diff options
| author | Josh Kalderimis <josh.kalderimis@gmail.com> | 2010-06-18 18:25:07 +0200 | 
|---|---|---|
| committer | Jeremy Kemper <jeremy@bitsweat.net> | 2010-06-18 13:59:14 -0700 | 
| commit | 9d3eeb905341aaad942ceb0e47bd04cced34d031 (patch) | |
| tree | 16d644a9b1352ff9d9903f69e705af74ceae5985 | |
| parent | a55d83292f9dbc34368e3cb91d99eb5b4aa4fa78 (diff) | |
| download | rails-9d3eeb905341aaad942ceb0e47bd04cced34d031.tar.gz rails-9d3eeb905341aaad942ceb0e47bd04cced34d031.tar.bz2 rails-9d3eeb905341aaad942ceb0e47bd04cced34d031.zip | |
fix for :shallow in router not generating helpers for create, update, and destroy actions when :only or :except are used
[#4900 state:committed]
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
| -rw-r--r-- | actionpack/lib/action_dispatch/routing/mapper.rb | 7 | ||||
| -rw-r--r-- | actionpack/test/dispatch/routing_test.rb | 40 | 
2 files changed, 42 insertions, 5 deletions
| diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index 46304b0336..95e56566a3 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -536,6 +536,7 @@ module ActionDispatch            def member_name              name            end +          alias_method :collection_name, :member_name            def nested_path              path @@ -874,9 +875,9 @@ module ActionDispatch              shallow_prefix = @scope[:module].blank? ? "" : "#{@scope[:module].tr('/', '_')}_"              case action -            when :index +            when :index, :create                "#{name_prefix}#{parent_resource.collection_name}" -            when :show +            when :show, :update, :destroy                if parent_resource.shallow?                  "#{shallow_prefix}#{parent_resource.member_name}"                else @@ -890,8 +891,6 @@ module ActionDispatch                end              when :new                "new_#{name_prefix}#{parent_resource.member_name}" -            when :update, :create, :destroy -              nil              else                case @scope[:scope_level]                when :collection diff --git a/actionpack/test/dispatch/routing_test.rb b/actionpack/test/dispatch/routing_test.rb index e294703e72..0b3bbcc86b 100644 --- a/actionpack/test/dispatch/routing_test.rb +++ b/actionpack/test/dispatch/routing_test.rb @@ -142,6 +142,12 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest          resources :comments, :except => :destroy        end +      resource  :past, :only => :destroy +      resource  :present, :only => :update +      resource  :future, :only => :create +      resources :relationships, :only => [:create, :destroy] +      resources :friendships,   :only => [:update] +        shallow do          namespace :api do            resources :teams do @@ -729,6 +735,38 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest      end    end +  def test_resource_routes_only_create_update_destroy +    with_test_routes do +      delete '/past' +      assert_equal 'pasts#destroy', @response.body +      assert_equal '/past', past_path + +      put '/present' +      assert_equal 'presents#update', @response.body +      assert_equal '/present', present_path + +      post '/future' +      assert_equal 'futures#create', @response.body +      assert_equal '/future', future_path +    end +  end + +  def test_resources_routes_only_create_update_destroy +    with_test_routes do +      post '/relationships' +      assert_equal 'relationships#create', @response.body +      assert_equal '/relationships', relationships_path + +      delete '/relationships/1' +      assert_equal 'relationships#destroy', @response.body +      assert_equal '/relationships/1', relationship_path(1) + +      put '/friendships/1' +      assert_equal 'friendships#update', @response.body +      assert_equal '/friendships/1', friendship_path(1) +    end +  end +    def test_resource_with_slugs_in_ids      with_test_routes do        get '/posts/rails-rocks' @@ -843,7 +881,7 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest        assert_equal '/account/admin/subscription', account_admin_subscription_path      end    end -   +    def test_namespace_nested_in_resources      with_test_routes do        get '/clients/1/google/account' | 
