class ActionView::Digestor
def digest(name:, finder:, dependencies: [])
* dependencies - An array of dependent views
* finder - An instance of ActionView::LookupContext
* name - Template name
Supported options:
def digest(name:, finder:, dependencies: []) dependencies ||= [] cache_key = ([ name ].compact + dependencies).join('.') # this is a correctly done double-checked locking idiom # (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 partial = name.include?("/_") root = tree(name, finder, partial) dependencies.each do |injected_dep| root.children << Injected.new(injected_dep, nil, nil) end finder.digest_cache[cache_key] = root.digest(finder) end end end