Don't use module to work out shallow name prefix and path as it may not accurately reflect the actual namespace [#4899 state:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
parent
ed3f042e99
commit
1f84061c5c
@ -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,7 +856,7 @@ 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
|
||||
@ -856,7 +864,7 @@ def path_for_action(action, path_names)
|
||||
"#{@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
|
||||
|
Loading…
Reference in New Issue
Block a user