提交 14244825 编写于 作者: A Andrew White

Merge pull request #14684 from Futurelearn/jc-deep-nested-shallow-url-helper-bug

Add a failing test for a URL helper that was broken by a6b9ea2e.
* Only make deeply nested routes shallow when parent is shallow.
Fixes #14684.
*Andrew White*, *James Coglan*
* Append link to bad code to backtrace when exception is SyntaxError.
*Boris Kuznetsov*
* Swapped the parameters of assert_equal in `assert_select` so that the
proper values were printed correctly
proper values were printed correctly
Fixes #14422.
......
......@@ -995,6 +995,7 @@ def initialize(entities, options = {})
@as = options[:as]
@param = (options[:param] || :id).to_sym
@options = options
@shallow = false
end
def default_actions
......@@ -1055,6 +1056,13 @@ def nested_scope
"#{path}/:#{nested_param}"
end
def shallow=(value)
@shallow = value
end
def shallow?
@shallow
end
end
class SingletonResource < Resource #:nodoc:
......@@ -1361,7 +1369,7 @@ def nested
end
with_scope_level(:nested) do
if shallow? && nesting_depth > 1
if shallow? && shallow_nesting_depth > 1
shallow_scope(parent_resource.nested_scope, nested_options) { yield }
else
scope(parent_resource.nested_scope, nested_options) { yield }
......@@ -1576,6 +1584,7 @@ def with_scope_level(kind)
end
def resource_scope(kind, resource) #:nodoc:
resource.shallow = @scope[:shallow]
old_resource, @scope[:scope_level_resource] = @scope[:scope_level_resource], resource
@nesting.push(resource)
......@@ -1600,6 +1609,10 @@ def nesting_depth #:nodoc:
@nesting.size
end
def shallow_nesting_depth #:nodoc:
@nesting.select(&:shallow?).size
end
def param_constraint? #:nodoc:
@scope[:constraints] && @scope[:constraints][parent_resource.param].is_a?(Regexp)
end
......
......@@ -1994,6 +1994,24 @@ def test_shallow_nested_resources_inside_resource
assert_equal 'cards#destroy', @response.body
end
def test_shallow_deeply_nested_resources
draw do
resources :blogs do
resources :posts do
resources :comments, shallow: true
end
end
end
get '/comments/1'
assert_equal 'comments#show', @response.body
assert_equal '/comments/1', comment_path('1')
assert_equal '/blogs/new', new_blog_path
assert_equal '/blogs/1/posts/new', new_blog_post_path(:blog_id => 1)
assert_equal '/blogs/1/posts/2/comments/new', new_blog_post_comment_path(:blog_id => 1, :post_id => 2)
end
def test_shallow_nested_resources_within_scope
draw do
scope '/hello' do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册