aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/abstract_controller/details_cache.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-02-24 22:06:24 +0100
committerJosé Valim <jose.valim@gmail.com>2010-02-24 22:17:26 +0100
commitdf85ab41c1ff6992dd462a0e63dac9dcdcee0348 (patch)
tree108c69a8d0b238d055367b397c8945a06ea1bd2a /actionpack/lib/abstract_controller/details_cache.rb
parent9d7d6cd7baf9b9e552a2ece8fca7f381417d06c1 (diff)
downloadrails-df85ab41c1ff6992dd462a0e63dac9dcdcee0348.tar.gz
rails-df85ab41c1ff6992dd462a0e63dac9dcdcee0348.tar.bz2
rails-df85ab41c1ff6992dd462a0e63dac9dcdcee0348.zip
Renamed LocalizedCache to DetailsCache.
Diffstat (limited to 'actionpack/lib/abstract_controller/details_cache.rb')
-rw-r--r--actionpack/lib/abstract_controller/details_cache.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/actionpack/lib/abstract_controller/details_cache.rb b/actionpack/lib/abstract_controller/details_cache.rb
new file mode 100644
index 0000000000..5b87b41e7d
--- /dev/null
+++ b/actionpack/lib/abstract_controller/details_cache.rb
@@ -0,0 +1,48 @@
+module AbstractController
+ class HashKey
+ @hash_keys = Hash.new {|h,k| h[k] = {} }
+
+ def self.get(klass, details)
+ @hash_keys[klass][details] ||= new(klass, details)
+ end
+
+ attr_reader :hash
+ alias_method :eql?, :equal?
+
+ def initialize(klass, details)
+ @details, @hash = details, details.hash
+ end
+
+ def inspect
+ "#<HashKey -- details: #{@details.inspect}>"
+ end
+ end
+
+ module DetailsCache
+ extend ActiveSupport::Concern
+
+ module ClassMethods
+ def clear_template_caches!
+ ActionView::Partials::PartialRenderer::TEMPLATES.clear
+ template_cache.clear
+ super
+ end
+
+ def template_cache
+ @template_cache ||= Hash.new {|h,k| h[k] = {} }
+ end
+ end
+
+ def render_to_body(*args)
+ Thread.current[:format_locale_key] = HashKey.get(self.class, _details_defaults)
+ super
+ end
+
+ private
+
+ def with_template_cache(name, details)
+ self.class.template_cache[HashKey.get(self.class, details)][name] ||= super
+ end
+
+ end
+end