aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/digestor.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2016-02-16 15:10:25 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2016-02-16 15:34:16 -0800
commit90997f9300eef08d380f2e0fb5874885b5d57a26 (patch)
tree970de495c69d77b6a5cb53fa47c45fce69fd4316 /actionview/lib/action_view/digestor.rb
parent497b1350bbfb35ea3e57f5b8363d5d8605930aa6 (diff)
downloadrails-90997f9300eef08d380f2e0fb5874885b5d57a26.tar.gz
rails-90997f9300eef08d380f2e0fb5874885b5d57a26.tar.bz2
rails-90997f9300eef08d380f2e0fb5874885b5d57a26.zip
change internal implementation to use a tree
Diffstat (limited to 'actionview/lib/action_view/digestor.rb')
-rw-r--r--actionview/lib/action_view/digestor.rb24
1 files changed, 22 insertions, 2 deletions
diff --git a/actionview/lib/action_view/digestor.rb b/actionview/lib/action_view/digestor.rb
index 9b51579117..78c141dafc 100644
--- a/actionview/lib/action_view/digestor.rb
+++ b/actionview/lib/action_view/digestor.rb
@@ -25,17 +25,22 @@ module ActionView
def digest(name:, finder:, **options)
options.assert_valid_keys(:dependencies, :partial)
- cache_key = ([ name, finder.details_key.hash ].compact + Array.wrap(options[:dependencies])).join('.')
+ dependencies = Array.wrap(options[:dependencies])
+ cache_key = ([ name, finder.details_key.hash ].compact + dependencies).join('.')
# this is a correctly done double-checked locking idiom
# (Concurrent::Map's lookups have volatile semantics)
@@cache[cache_key] || @@digest_monitor.synchronize do
@@cache.fetch(cache_key) do # re-check under lock
- compute_and_store_digest(cache_key, name, finder, options)
+ @@cache[cache_key] = tree(name, finder, dependencies).digest
end
end
end
+ def logger
+ ActionView::Base.logger || NullLogger
+ end
+
private
def compute_and_store_digest(cache_key, name, finder, options) # called under @@digest_monitor lock
klass = if options[:partial] || name.include?("/_")
@@ -77,6 +82,7 @@ module ActionView
node
end
else
+ logger.error " '#{name}' file doesn't exist, so no dependencies"
seen[name] ||= Missing.new(name, logical_name, nil)
end
end
@@ -116,6 +122,10 @@ module ActionView
end
end.join("-")
end
+
+ def to_dep_map
+ children.any? ? { name => children.map(&:to_dep_map) } : name
+ end
end
class Partial < Node
@@ -126,8 +136,18 @@ module ActionView
class Missing < Node
def digest(_ = [])
+ logger.error " Couldn't find template for digesting: #{name}"
''
end
+
+ class NullLogger
+ def self.debug(_); end
+ def self.error(_); end
+ end
+
+ def logger
+ ActionView::Base.logger || NullLogger
+ end
end
class Injected < Node