Permalink
Browse files

Don't use module to work out shallow name prefix and path as it may n…

…ot accurately reflect the actual namespace [#4899 state:resolved]

Signed-off-by: José Valim <jose.valim@gmail.com>
  • Loading branch information...
pixeltrix authored and josevalim committed Jun 19, 2010
1 parent ed3f042 commit 1f84061c5c271647dc5f7f1311e365e134130e0f
Showing with 33 additions and 10 deletions.
  1. +17 −9 actionpack/lib/action_dispatch/routing/mapper.rb
  2. +16 −1 actionpack/test/dispatch/routing_test.rb
@@ -33,7 +33,7 @@ def call(env)
end
class Mapping #:nodoc:
- IGNORE_OPTIONS = [:to, :as, :controller, :action, :via, :on, :constraints, :defaults, :only, :except, :anchor, :shallow]
+ IGNORE_OPTIONS = [:to, :as, :controller, :action, :via, :on, :constraints, :defaults, :only, :except, :anchor, :shallow, :shallow_path, :shallow_prefix]
def initialize(set, scope, args)
@set, @scope = set, scope
@@ -343,7 +343,7 @@ def controller(controller)
def namespace(path)
path = path.to_s
- scope(:path => path, :name_prefix => path, :module => path) { yield }
+ scope(:path => path, :name_prefix => path, :module => path, :shallow_path => path, :shallow_prefix => path) { yield }
end
def constraints(constraints = {})
@@ -378,10 +378,18 @@ def merge_path_scope(parent, child)
Mapper.normalize_path("#{parent}/#{child}")
end
+ def merge_shallow_path_scope(parent, child)
+ Mapper.normalize_path("#{parent}/#{child}")
+ end
+
def merge_name_prefix_scope(parent, child)
parent ? "#{parent}_#{child}" : child
end
+ def merge_shallow_prefix_scope(parent, child)
+ parent ? "#{parent}_#{child}" : child
+ end
+
def merge_module_scope(parent, child)
parent ? "#{parent}/#{child}" : child
end
@@ -662,10 +670,10 @@ def nested
with_scope_level(:nested) do
if parent_resource.shallow?
with_exclusive_scope do
- if @scope[:module].blank?
+ if @scope[:shallow_path].blank?
scope(*parent_resource.nested_scope) { yield }
else
- scope(@scope[:module], :name_prefix => @scope[:module].tr('/', '_')) do
+ scope(@scope[:shallow_path], :name_prefix => @scope[:shallow_prefix]) do
scope(*parent_resource.nested_scope) { yield }
end
end
@@ -848,15 +856,15 @@ def path_for_action(action, path_names)
"#{@scope[:path]}(.:format)"
when :show, :update, :destroy
if parent_resource.shallow?
- "#{@scope[:module]}/#{parent_resource.path}/:id(.:format)"
+ "#{@scope[:shallow_path]}/#{parent_resource.path}/:id(.:format)"
else
"#{@scope[:path]}(.:format)"
end
when :new
"#{@scope[:path]}/#{action_path(:new)}(.:format)"
when :edit
if parent_resource.shallow?
- "#{@scope[:module]}/#{parent_resource.path}/:id/#{action_path(:edit)}(.:format)"
+ "#{@scope[:shallow_path]}/#{parent_resource.path}/:id/#{action_path(:edit)}(.:format)"
else
"#{@scope[:path]}/#{action_path(:edit)}(.:format)"
end
@@ -866,7 +874,7 @@ def path_for_action(action, path_names)
"#{@scope[:path]}/#{action_path(action)}(.:format)"
else
if parent_resource.shallow?
- "#{@scope[:module]}/#{parent_resource.path}/:id/#{action_path(action)}(.:format)"
+ "#{@scope[:shallow_path]}/#{parent_resource.path}/:id/#{action_path(action)}(.:format)"
else
"#{@scope[:path]}/#{action_path(action)}(.:format)"
end
@@ -880,7 +888,7 @@ def path_for_custom_action
@scope[:path]
else
if parent_resource.shallow?
- "#{@scope[:module]}/#{parent_resource.path}/:id"
+ "#{@scope[:shallow_path]}/#{parent_resource.path}/:id"
else
@scope[:path]
end
@@ -901,7 +909,7 @@ def options_for_action(action, options)
def name_for_action(action)
name_prefix = @scope[:name_prefix].blank? ? "" : "#{@scope[:name_prefix]}_"
- shallow_prefix = @scope[:module].blank? ? "" : "#{@scope[:module].tr('/', '_')}_"
+ shallow_prefix = @scope[:shallow_prefix].blank? ? "" : "#{@scope[:shallow_prefix]}_"
case action
when :index, :create
@@ -278,8 +278,11 @@ def self.matches?(request)
resource :dashboard, :constraints => { :ip => /192\.168\.1\.\d{1,3}/ }
- scope :module => 'api' do
+ scope :module => :api do
resource :token
+ resources :errors, :shallow => true do
+ resources :notices
+ end
end
scope :path => 'api' do
@@ -1350,6 +1353,18 @@ def test_custom_resource_routes_are_scoped
end
end
+ def test_shallow_nested_routes_ignore_module
+ with_test_routes do
+ get '/errors/1/notices'
+ assert_equal 'api/notices#index', @response.body
+ assert_equal '/errors/1/notices', error_notices_path(:error_id => '1')
+
+ get '/notices/1'
+ assert_equal 'api/notices#show', @response.body
+ assert_equal '/notices/1', notice_path(:id => '1')
+ end
+ end
+
private
def with_test_routes
yield

0 comments on commit 1f84061

Please sign in to comment.