diff options
-rw-r--r-- | actionview/lib/action_view/digestor.rb | 18 | ||||
-rw-r--r-- | actionview/test/template/digestor_test.rb | 2 |
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) |