Skip to content

Commit

Permalink
Pull namespace defaults out of the options hash
Browse files Browse the repository at this point in the history
If a developer has specified either :path or :as in the options hash then
these should be used as the defaults for :shallow_path and :shallow_prefix.

Fixes #14241.

(cherry picked from commit 8711086)
  • Loading branch information
pixeltrix committed Mar 8, 2014
1 parent 6adc92e commit 09c6c85
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 3 deletions.
13 changes: 10 additions & 3 deletions actionpack/lib/action_dispatch/routing/mapper.rb
Expand Up @@ -782,9 +782,16 @@ def controller(controller, options={})
# end
def namespace(path, options = {})
path = path.to_s
options = { :path => path, :as => path, :module => path,
:shallow_path => path, :shallow_prefix => path }.merge!(options)
scope(options) { yield }

defaults = {
module: path,
path: options.fetch(:path, path),
as: options.fetch(:as, path),
shallow_path: options.fetch(:path, path),
shallow_prefix: options.fetch(:as, path)
}

scope(defaults.merge!(options)) { yield }
end

# === Parameter Restriction
Expand Down
130 changes: 130 additions & 0 deletions actionpack/test/dispatch/routing_test.rb
Expand Up @@ -1031,6 +1031,136 @@ def test_namespace_with_options
assert_equal 'users/home#index', @response.body
end

def test_namespaced_shallow_routes_with_module_option
draw do
namespace :foo, module: 'bar' do
resources :posts, only: [:index, :show] do
resources :comments, only: [:index, :show], shallow: true
end
end
end

get '/foo/posts'
assert_equal '/foo/posts', foo_posts_path
assert_equal 'bar/posts#index', @response.body

get '/foo/posts/1'
assert_equal '/foo/posts/1', foo_post_path('1')
assert_equal 'bar/posts#show', @response.body

get '/foo/posts/1/comments'
assert_equal '/foo/posts/1/comments', foo_post_comments_path('1')
assert_equal 'bar/comments#index', @response.body

get '/foo/comments/2'
assert_equal '/foo/comments/2', foo_comment_path('2')
assert_equal 'bar/comments#show', @response.body
end

def test_namespaced_shallow_routes_with_path_option
draw do
namespace :foo, path: 'bar' do
resources :posts, only: [:index, :show] do
resources :comments, only: [:index, :show], shallow: true
end
end
end

get '/bar/posts'
assert_equal '/bar/posts', foo_posts_path
assert_equal 'foo/posts#index', @response.body

get '/bar/posts/1'
assert_equal '/bar/posts/1', foo_post_path('1')
assert_equal 'foo/posts#show', @response.body

get '/bar/posts/1/comments'
assert_equal '/bar/posts/1/comments', foo_post_comments_path('1')
assert_equal 'foo/comments#index', @response.body

get '/bar/comments/2'
assert_equal '/bar/comments/2', foo_comment_path('2')
assert_equal 'foo/comments#show', @response.body
end

def test_namespaced_shallow_routes_with_as_option
draw do
namespace :foo, as: 'bar' do
resources :posts, only: [:index, :show] do
resources :comments, only: [:index, :show], shallow: true
end
end
end

get '/foo/posts'
assert_equal '/foo/posts', bar_posts_path
assert_equal 'foo/posts#index', @response.body

get '/foo/posts/1'
assert_equal '/foo/posts/1', bar_post_path('1')
assert_equal 'foo/posts#show', @response.body

get '/foo/posts/1/comments'
assert_equal '/foo/posts/1/comments', bar_post_comments_path('1')
assert_equal 'foo/comments#index', @response.body

get '/foo/comments/2'
assert_equal '/foo/comments/2', bar_comment_path('2')
assert_equal 'foo/comments#show', @response.body
end

def test_namespaced_shallow_routes_with_shallow_path_option
draw do
namespace :foo, shallow_path: 'bar' do
resources :posts, only: [:index, :show] do
resources :comments, only: [:index, :show], shallow: true
end
end
end

get '/foo/posts'
assert_equal '/foo/posts', foo_posts_path
assert_equal 'foo/posts#index', @response.body

get '/foo/posts/1'
assert_equal '/foo/posts/1', foo_post_path('1')
assert_equal 'foo/posts#show', @response.body

get '/foo/posts/1/comments'
assert_equal '/foo/posts/1/comments', foo_post_comments_path('1')
assert_equal 'foo/comments#index', @response.body

get '/bar/comments/2'
assert_equal '/bar/comments/2', foo_comment_path('2')
assert_equal 'foo/comments#show', @response.body
end

def test_namespaced_shallow_routes_with_shallow_prefix_option
draw do
namespace :foo, shallow_prefix: 'bar' do
resources :posts, only: [:index, :show] do
resources :comments, only: [:index, :show], shallow: true
end
end
end

get '/foo/posts'
assert_equal '/foo/posts', foo_posts_path
assert_equal 'foo/posts#index', @response.body

get '/foo/posts/1'
assert_equal '/foo/posts/1', foo_post_path('1')
assert_equal 'foo/posts#show', @response.body

get '/foo/posts/1/comments'
assert_equal '/foo/posts/1/comments', foo_post_comments_path('1')
assert_equal 'foo/comments#index', @response.body

get '/foo/comments/2'
assert_equal '/foo/comments/2', bar_comment_path('2')
assert_equal 'foo/comments#show', @response.body
end

def test_namespace_containing_numbers
draw do
namespace :v2 do
Expand Down

0 comments on commit 09c6c85

Please sign in to comment.