diff options
author | Yehuda Katz <wycats@gmail.com> | 2009-08-14 12:00:52 -0700 |
---|---|---|
committer | Yehuda Katz <wycats@gmail.com> | 2009-08-15 12:32:01 -0700 |
commit | 9b552fb300c4606fe517eadaa30708e9d75498a6 (patch) | |
tree | bdf53599767b72628e5ce49fa701cd953c69175c /actionpack/lib/action_controller/metal/rendering_controller.rb | |
parent | 9f5cd0156ab907d8097fc9c588823a9b09038b93 (diff) | |
download | rails-9b552fb300c4606fe517eadaa30708e9d75498a6.tar.gz rails-9b552fb300c4606fe517eadaa30708e9d75498a6.tar.bz2 rails-9b552fb300c4606fe517eadaa30708e9d75498a6.zip |
Caches and cache clearing seems to actually work, but the actual architecture is kind of messy. Next: CLEAN UP.
Diffstat (limited to 'actionpack/lib/action_controller/metal/rendering_controller.rb')
-rw-r--r-- | actionpack/lib/action_controller/metal/rendering_controller.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal/rendering_controller.rb b/actionpack/lib/action_controller/metal/rendering_controller.rb index 5b1be763ad..46a69b6b57 100644 --- a/actionpack/lib/action_controller/metal/rendering_controller.rb +++ b/actionpack/lib/action_controller/metal/rendering_controller.rb @@ -1,11 +1,39 @@ module ActionController + 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) + @hash = [formats, locale].hash + end + + alias_method :eql?, :equal? + end + module RenderingController extend ActiveSupport::Concern include AbstractController::RenderingController + 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 process_action(*) self.formats = request.formats.map {|x| x.to_sym} + Thread.current[:format_locale_key] = HashKey.get(self.class, formats, I18n.locale) super end @@ -34,6 +62,10 @@ module ActionController controller_path end + def with_template_cache(name) + self.class.template_cache[Thread.current[:format_locale_key]][name] ||= super + end + def _determine_template(options) if options.key?(:text) options[:_template] = ActionView::TextTemplate.new(options[:text], formats.first) |