Skip to content

Commit

Permalink
Use nested_scope? not shallow? to determine whether to copy options
Browse files Browse the repository at this point in the history
The method `shallow?` returns false if the parent resource is a singleton so
we need to check if we're not inside a nested scope before copying the :path
and :as options to their shallow equivalents.

Fixes #14388.
  • Loading branch information
pixeltrix committed Mar 16, 2014
1 parent af98176 commit bb05188
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
8 changes: 8 additions & 0 deletions actionpack/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
* The method `shallow?` returns false if the parent resource is a singleton so
we need to check if we're not inside a nested scope before copying the :path
and :as options to their shallow equivalents.

Fixes #14388.

*Andrew White*

* Make logging of CSRF failures optional (but on by default) with the
`log_warning_on_csrf_failure` configuration setting in
`ActionController::RequestForgeryProtection`.
Expand Down
6 changes: 5 additions & 1 deletion actionpack/lib/action_dispatch/routing/mapper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -707,7 +707,7 @@ def scope(*args)
options[:path] = args.flatten.join('/') if args.any?
options[:constraints] ||= {}

unless shallow?
unless nested_scope?
options[:shallow_path] ||= options[:path] if options.key?(:path)
options[:shallow_prefix] ||= options[:as] if options.key?(:as)
end
Expand Down Expand Up @@ -1547,6 +1547,10 @@ def resource_method_scope? #:nodoc:
RESOURCE_METHOD_SCOPES.include? @scope[:scope_level]
end

def nested_scope? #:nodoc:
@scope[:scope_level] == :nested
end

def with_exclusive_scope
begin
old_name_prefix, old_path = @scope[:as], @scope[:path]
Expand Down
36 changes: 36 additions & 0 deletions actionpack/test/dispatch/routing_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1958,6 +1958,42 @@ def test_shallow_nested_resources
assert_equal '/comments/3/preview', preview_comment_path(:id => '3')
end

def test_shallow_nested_resources_inside_resource
draw do
resource :membership, shallow: true do
resources :cards
end
end

get '/membership/cards'
assert_equal 'cards#index', @response.body
assert_equal '/membership/cards', membership_cards_path

get '/membership/cards/new'
assert_equal 'cards#new', @response.body
assert_equal '/membership/cards/new', new_membership_card_path

post '/membership/cards'
assert_equal 'cards#create', @response.body

get '/cards/1'
assert_equal 'cards#show', @response.body
assert_equal '/cards/1', card_path('1')

get '/cards/1/edit'
assert_equal 'cards#edit', @response.body
assert_equal '/cards/1/edit', edit_card_path('1')

put '/cards/1'
assert_equal 'cards#update', @response.body

patch '/cards/1'
assert_equal 'cards#update', @response.body

delete '/cards/1'
assert_equal 'cards#destroy', @response.body
end

def test_shallow_nested_resources_within_scope
draw do
scope '/hello' do
Expand Down

0 comments on commit bb05188

Please sign in to comment.