1
0
Fork 0
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:
Javan Makhmali 2016-06-15 17:56:17 -04:00
parent 1717836e4f
commit 1ee4eebb2b
4 changed files with 30 additions and 3 deletions

View file

@ -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

View file

@ -0,0 +1 @@
<%= render partial: "comments/comment", collection: commentable.comments %>

View file

@ -0,0 +1 @@
<%= render "comments/comments" %>

View file

@ -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