提交 1ee4eebb 编写于 作者: J Javan Makhmali

Fix finding templates for digesting for */* requests that render a non-default (html) template

上级 1717836e
......@@ -38,10 +38,13 @@ def logger
# 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
......
<%= render partial: "comments/comment", collection: commentable.comments %>
......@@ -22,6 +22,12 @@ def initialize(details = {})
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 @@ def test_nested_template_deps
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 @@ def nested_dependencies(template_name)
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册