mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix finding templates for digesting for */* requests that render a non-default (html) template
This commit is contained in:
parent
1717836e4f
commit
1ee4eebb2b
4 changed files with 30 additions and 3 deletions
|
@ -38,10 +38,13 @@ module ActionView
|
|||
# Create a dependency tree for template named +name+.
|
||||
def tree(name, finder, partial = false, seen = {})
|
||||
logical_name = name.gsub(%r|/_|, "/")
|
||||
formats = [finder.rendered_format]
|
||||
|
||||
if finder.disable_cache { finder.exists?(logical_name, [], partial, [], formats: formats) }
|
||||
template = finder.disable_cache { finder.find(logical_name, [], partial, [], formats: formats) }
|
||||
options = {}
|
||||
options[:formats] = [finder.rendered_format] if finder.rendered_format
|
||||
|
||||
if finder.disable_cache { finder.exists?(logical_name, [], partial, [], options) }
|
||||
template = finder.disable_cache { finder.find(logical_name, [], partial, [], options) }
|
||||
finder.rendered_format ||= template.formats.first
|
||||
|
||||
if node = seen[template.identifier] # handle cycles in the tree
|
||||
node
|
||||
|
|
1
actionview/test/fixtures/digestor/api/comments/_comments.json.erb
vendored
Normal file
1
actionview/test/fixtures/digestor/api/comments/_comments.json.erb
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
<%= render partial: "comments/comment", collection: commentable.comments %>
|
1
actionview/test/fixtures/digestor/messages/thread.json.erb
vendored
Normal file
1
actionview/test/fixtures/digestor/messages/thread.json.erb
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
<%= render "comments/comments" %>
|
|
@ -22,6 +22,12 @@ class FixtureFinder < ActionView::LookupContext
|
|||
end
|
||||
end
|
||||
|
||||
class ActionView::Digestor::Node
|
||||
def flatten
|
||||
[self] + children.flat_map(&:flatten)
|
||||
end
|
||||
end
|
||||
|
||||
class TemplateDigestorTest < ActionView::TestCase
|
||||
def setup
|
||||
@cwd = Dir.pwd
|
||||
|
@ -148,6 +154,17 @@ class TemplateDigestorTest < ActionView::TestCase
|
|||
assert_equal nested_deps, nested_dependencies("messages/show")
|
||||
end
|
||||
|
||||
def test_nested_template_deps_with_non_default_rendered_format
|
||||
finder.rendered_format = nil
|
||||
nested_deps = [{"comments/comments"=>["comments/comment"]}]
|
||||
assert_equal nested_deps, nested_dependencies("messages/thread")
|
||||
end
|
||||
|
||||
def test_template_formats_of_nested_deps_with_non_default_rendered_format
|
||||
finder.rendered_format = nil
|
||||
assert_equal [:json, :json, :json], tree_template_formats("messages/thread")
|
||||
end
|
||||
|
||||
def test_recursion_in_renders
|
||||
assert digest("level/recursion") # assert recursion is possible
|
||||
assert_not_nil digest("level/recursion") # assert digest is stored
|
||||
|
@ -334,6 +351,11 @@ class TemplateDigestorTest < ActionView::TestCase
|
|||
tree.children.map(&:to_dep_map)
|
||||
end
|
||||
|
||||
def tree_template_formats(template_name)
|
||||
tree = ActionView::Digestor.tree(template_name, finder)
|
||||
tree.flatten.map(&:template).flat_map(&:formats)
|
||||
end
|
||||
|
||||
def disable_resolver_caching
|
||||
old_caching, ActionView::Resolver.caching = ActionView::Resolver.caching, false
|
||||
yield
|
||||
|
|
Loading…
Reference in a new issue