diff options
author | José Valim <jose.valim@gmail.com> | 2010-02-24 22:06:24 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-02-24 22:17:26 +0100 |
commit | df85ab41c1ff6992dd462a0e63dac9dcdcee0348 (patch) | |
tree | 108c69a8d0b238d055367b397c8945a06ea1bd2a /actionpack/lib/abstract_controller/details_cache.rb | |
parent | 9d7d6cd7baf9b9e552a2ece8fca7f381417d06c1 (diff) | |
download | rails-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.rb | 48 |
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 |