aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/abstract_controller
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-10-28 10:33:05 -0200
committerYehuda Katz <wycats@gmail.com>2009-11-01 02:23:49 +0100
commit976c2647240fd40a2b706ab5e41856cd47e7b212 (patch)
tree424a54f1b025cf8e3d17dcd15632d68eb62a78ef /actionpack/lib/abstract_controller
parenta107103e85a2cc294faedddbb44707fd2bc2e206 (diff)
downloadrails-976c2647240fd40a2b706ab5e41856cd47e7b212.tar.gz
rails-976c2647240fd40a2b706ab5e41856cd47e7b212.tar.bz2
rails-976c2647240fd40a2b706ab5e41856cd47e7b212.zip
Extracted localized_cache.rb from ActionController, added it to AbstractController and made ActionMailer use it.
Diffstat (limited to 'actionpack/lib/abstract_controller')
-rw-r--r--actionpack/lib/abstract_controller/localized_cache.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/actionpack/lib/abstract_controller/localized_cache.rb b/actionpack/lib/abstract_controller/localized_cache.rb
new file mode 100644
index 0000000000..ee7b43cb9f
--- /dev/null
+++ b/actionpack/lib/abstract_controller/localized_cache.rb
@@ -0,0 +1,49 @@
+module AbstractController
+ class HashKey
+ @hash_keys = Hash.new {|h,k| h[k] = Hash.new {|h,k| h[k] = {} } }
+
+ def self.get(klass, formats, locale)
+ @hash_keys[klass][formats][locale] ||= new(klass, formats, locale)
+ end
+
+ attr_accessor :hash
+ def initialize(klass, formats, locale)
+ @formats, @locale = formats, locale
+ @hash = [formats, locale].hash
+ end
+
+ alias_method :eql?, :equal?
+
+ def inspect
+ "#<HashKey -- formats: #{@formats.inspect} locale: #{@locale.inspect}>"
+ end
+ end
+
+ module LocalizedCache
+ 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(options)
+ Thread.current[:format_locale_key] = HashKey.get(self.class, formats, I18n.locale)
+ super
+ end
+
+ private
+
+ def with_template_cache(name)
+ self.class.template_cache[Thread.current[:format_locale_key]][name] ||= super
+ end
+
+ end
+end