Skip to content

Commit

Permalink
Don't use module to work out shallow name prefix and path as it may n…
Browse files Browse the repository at this point in the history
…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 1f84061
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 10 deletions.
26 changes: 17 additions & 9 deletions actionpack/lib/action_dispatch/routing/mapper.rb
Expand Up @@ -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
Expand Down Expand Up @@ -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 = {})
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
17 changes: 16 additions & 1 deletion actionpack/test/dispatch/routing_test.rb
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 1f84061

Please sign in to comment.