aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/digestor.rb
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2015-05-30 23:11:49 +0200
committerKasper Timm Hansen <kaspth@gmail.com>2015-07-18 21:54:19 +0200
commit40f79da8f22d301f87873669d7355346049eccf2 (patch)
tree7ffb78cc82ca248629845d8e48cbf0d2ec309bef /actionview/lib/action_view/digestor.rb
parent57ab74cdb1304b6baf79d37886d08551e065b5d6 (diff)
downloadrails-40f79da8f22d301f87873669d7355346049eccf2.tar.gz
rails-40f79da8f22d301f87873669d7355346049eccf2.tar.bz2
rails-40f79da8f22d301f87873669d7355346049eccf2.zip
Make digest cache work in development.
Avoid computing the same fragment digest many times when looping over templates. The cache is cleared on every request so template changes are still picked up.
Diffstat (limited to 'actionview/lib/action_view/digestor.rb')
-rw-r--r--actionview/lib/action_view/digestor.rb12
1 files changed, 8 insertions, 4 deletions
diff --git a/actionview/lib/action_view/digestor.rb b/actionview/lib/action_view/digestor.rb
index df8059d04e..4224346a2f 100644
--- a/actionview/lib/action_view/digestor.rb
+++ b/actionview/lib/action_view/digestor.rb
@@ -8,6 +8,13 @@ module ActionView
@@cache = ThreadSafe::Cache.new
@@digest_monitor = Monitor.new
+ class PerRequestDigestCacheExpiry < Struct.new(:app) # :nodoc:
+ def call(env)
+ ActionView::Digestor.cache.clear
+ app.call(env)
+ end
+ end
+
class << self
# Supported options:
#
@@ -41,10 +48,7 @@ module ActionView
Digestor
end
- digest = klass.new(options).digest
- # Store the actual digest if config.cache_template_loading is true
- @@cache[cache_key] = stored_digest = digest if ActionView::Resolver.caching?
- digest
+ @@cache[cache_key] = stored_digest = klass.new(options).digest
ensure
# something went wrong or ActionView::Resolver.caching? is false, make sure not to corrupt the @@cache
@@cache.delete_pair(cache_key, false) if pre_stored && !stored_digest