aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
diff options
context:
space:
mode:
Diffstat (limited to 'actionview')
-rw-r--r--actionview/lib/action_view/digestor.rb18
-rw-r--r--actionview/test/template/digestor_test.rb2
2 files changed, 11 insertions, 9 deletions
diff --git a/actionview/lib/action_view/digestor.rb b/actionview/lib/action_view/digestor.rb
index 07600f2092..518f0da16c 100644
--- a/actionview/lib/action_view/digestor.rb
+++ b/actionview/lib/action_view/digestor.rb
@@ -28,7 +28,7 @@ module ActionView
# (Concurrent::Map's lookups have volatile semantics)
finder.digest_cache[cache_key] || @@digest_mutex.synchronize do
finder.digest_cache.fetch(cache_key) do # re-check under lock
- finder.digest_cache[cache_key] = tree(name, finder, dependencies).digest
+ finder.digest_cache[cache_key] = tree(name, finder, dependencies).digest(finder)
end
end
end
@@ -83,17 +83,19 @@ module ActionView
@children = children
end
- def digest(stack = [])
- Digest::MD5.hexdigest("#{template.source}-#{dependency_digest(stack)}")
+ def digest(finder, stack = [])
+ Digest::MD5.hexdigest("#{template.source}-#{dependency_digest(finder, stack)}")
end
- def dependency_digest(stack)
+ def dependency_digest(finder, stack)
children.map do |node|
if stack.include?(node)
false
else
- stack.push node
- node.digest(stack).tap { stack.pop }
+ finder.digest_cache[node.name] ||= begin
+ stack.push node
+ node.digest(finder, stack).tap { stack.pop }
+ end
end
end.join("-")
end
@@ -106,11 +108,11 @@ module ActionView
class Partial < Node; end
class Missing < Node
- def digest(_ = []) '' end
+ def digest(finder, _ = []) '' end
end
class Injected < Node
- def digest(_ = []) name end
+ def digest(finder, _ = []) name end
end
class NullLogger
diff --git a/actionview/test/template/digestor_test.rb b/actionview/test/template/digestor_test.rb
index 6384aac46e..56bc967c83 100644
--- a/actionview/test/template/digestor_test.rb
+++ b/actionview/test/template/digestor_test.rb
@@ -319,7 +319,7 @@ class TemplateDigestorTest < ActionView::TestCase
finder.variants = options.delete(:variants) || []
node = ActionView::Digestor.tree(template_name, finder, options[:dependencies] || [])
- node.digest
+ node.digest(finder)
end
def dependencies(template_name)