@@ -12,17 +12,13 @@ class << self
1212 # Supported options:
1313 #
1414 # * <tt>name</tt> - Template name
15- # * <tt>format</tt> - Template format
16- # * <tt>variant</tt> - Variant of +format+ (optional)
1715 # * <tt>finder</tt> - An instance of ActionView::LookupContext
1816 # * <tt>dependencies</tt> - An array of dependent views
1917 # * <tt>partial</tt> - Specifies whether the template is a partial
20- def digest ( options_or_deprecated_name , * deprecated_args )
21- options = _options_for_digest ( options_or_deprecated_name , * deprecated_args )
18+ def digest ( options )
19+ options . assert_valid_keys ( :name , :finder , :dependencies , :partial )
2220
23- details_key = options [ :finder ] . details_key . hash
24- dependencies = Array . wrap ( options [ :dependencies ] )
25- cache_key = ( [ options [ :name ] , details_key , options [ :format ] , options [ :variant ] ] . compact + dependencies ) . join ( '.' )
21+ cache_key = ( [ options [ :name ] , options [ :finder ] . details_key . hash ] . compact + Array . wrap ( options [ :dependencies ] ) ) . join ( '.' )
2622
2723 # this is a correctly done double-checked locking idiom
2824 # (ThreadSafe::Cache's lookups have volatile semantics)
@@ -33,63 +29,41 @@ def digest(options_or_deprecated_name, *deprecated_args)
3329 end
3430 end
3531
36- def _options_for_digest ( options_or_deprecated_name , *deprecated_args )
37- if !options_or_deprecated_name . is_a? ( Hash )
38- ActiveSupport ::Deprecation . warn \
39- 'ActionView::Digestor.digest changed its method signature from ' \
40- '#digest(name, format, finder, options) to #digest(options), ' \
41- 'with options now including :name, :format, :finder, and ' \
42- ':variant. Please update your code to pass a Hash argument. ' \
43- 'Support for the old method signature will be removed in Rails 5.0.'
44-
45- _options_for_digest ( deprecated_args [ 2 ] || { } ) . merge \
46- name : options_or_deprecated_name ,
47- format : deprecated_args [ 0 ] ,
48- finder : deprecated_args [ 1 ]
49- else
50- options_or_deprecated_name . assert_valid_keys ( :name , :format , :variant , :finder , :dependencies , :partial )
51- options_or_deprecated_name
52- end
53- end
54-
5532 private
33+ def compute_and_store_digest ( cache_key , options ) # called under @@digest_monitor lock
34+ klass = if options [ :partial ] || options [ :name ] . include? ( "/_" )
35+ # Prevent re-entry or else recursive templates will blow the stack.
36+ # There is no need to worry about other threads seeing the +false+ value,
37+ # as they will then have to wait for this thread to let go of the @@digest_monitor lock.
38+ pre_stored = @@cache . put_if_absent ( cache_key , false ) . nil? # put_if_absent returns nil on insertion
39+ PartialDigestor
40+ else
41+ Digestor
42+ end
5643
57- def compute_and_store_digest ( cache_key , options ) # called under @@digest_monitor lock
58- klass = if options [ :partial ] || options [ :name ] . include? ( "/_" )
59- # Prevent re-entry or else recursive templates will blow the stack.
60- # There is no need to worry about other threads seeing the +false+ value,
61- # as they will then have to wait for this thread to let go of the @@digest_monitor lock.
62- pre_stored = @@cache . put_if_absent ( cache_key , false ) . nil? # put_if_absent returns nil on insertion
63- PartialDigestor
64- else
65- Digestor
44+ digest = klass . new ( options ) . digest
45+ # Store the actual digest if config.cache_template_loading is true
46+ @@cache [ cache_key ] = stored_digest = digest if ActionView ::Resolver . caching?
47+ digest
48+ ensure
49+ # something went wrong or ActionView::Resolver.caching? is false, make sure not to corrupt the @@cache
50+ @@cache . delete_pair ( cache_key , false ) if pre_stored && !stored_digest
6651 end
67-
68- digest = klass . new ( options ) . digest
69- # Store the actual digest if config.cache_template_loading is true
70- @@cache [ cache_key ] = stored_digest = digest if ActionView ::Resolver . caching?
71- digest
72- ensure
73- # something went wrong or ActionView::Resolver.caching? is false, make sure not to corrupt the @@cache
74- @@cache . delete_pair ( cache_key , false ) if pre_stored && !stored_digest
75- end
7652 end
7753
78- attr_reader :name , :format , :variant , :path , : finder, :options
54+ attr_reader :name , :finder , :options
7955
80- def initialize ( options_or_deprecated_name , *deprecated_args )
81- options = self . class . _options_for_digest ( options_or_deprecated_name , *deprecated_args )
82- @options = options . except ( :name , :format , :variant , :finder )
83- @name , @format , @variant , @finder = options . values_at ( :name , :format , :variant , :finder )
84- @path = "#{ @name } .#{ format } " . tap { |path | path << "+#{ @variant } " if @variant }
56+ def initialize ( options )
57+ @name , @finder = options . values_at ( :name , :finder )
58+ @options = options . except ( :name , :finder )
8559 end
8660
8761 def digest
8862 Digest ::MD5 . hexdigest ( "#{ source } -#{ dependency_digest } " ) . tap do |digest |
89- logger . try :info , "Cache digest for #{ path } : #{ digest } "
63+ logger . try :info , " Cache digest for #{ template . inspect } : #{ digest } "
9064 end
9165 rescue ActionView ::MissingTemplate
92- logger . try :error , "Couldn't find template for digesting: #{ path } "
66+ logger . try :error , " Couldn't find template for digesting: #{ name } "
9367 ''
9468 end
9569
@@ -101,13 +75,12 @@ def dependencies
10175
10276 def nested_dependencies
10377 dependencies . collect do |dependency |
104- dependencies = PartialDigestor . new ( name : dependency , format : format , variant : variant , finder : finder ) . nested_dependencies
78+ dependencies = PartialDigestor . new ( name : dependency , finder : finder ) . nested_dependencies
10579 dependencies . any? ? { dependency => dependencies } : dependency
10680 end
10781 end
10882
10983 private
110-
11184 def logger
11285 ActionView ::Base . logger
11386 end
@@ -121,11 +94,7 @@ def partial?
12194 end
12295
12396 def template
124- @template ||= begin
125- finder . disable_cache do
126- finder . find ( logical_name , [ ] , partial? , [ ] , formats : [ format ] , variants : [ variant ] )
127- end
128- end
97+ @template ||= finder . disable_cache { finder . find ( logical_name , [ ] , partial? ) }
12998 end
13099
131100 def source
@@ -134,7 +103,7 @@ def source
134103
135104 def dependency_digest
136105 template_digests = dependencies . collect do |template_name |
137- Digestor . digest ( name : template_name , format : format , variant : variant , finder : finder , partial : true )
106+ Digestor . digest ( name : template_name , finder : finder , partial : true )
138107 end
139108
140109 ( template_digests + injected_dependencies ) . join ( "-" )
0 commit comments