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 | |
parent | 9d7d6cd7baf9b9e552a2ece8fca7f381417d06c1 (diff) | |
download | rails-df85ab41c1ff6992dd462a0e63dac9dcdcee0348.tar.gz rails-df85ab41c1ff6992dd462a0e63dac9dcdcee0348.tar.bz2 rails-df85ab41c1ff6992dd462a0e63dac9dcdcee0348.zip |
Renamed LocalizedCache to DetailsCache.
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/abstract_controller.rb | 2 | ||||
-rw-r--r-- | actionpack/lib/abstract_controller/details_cache.rb | 48 | ||||
-rw-r--r-- | actionpack/lib/abstract_controller/localized_cache.rb | 49 | ||||
-rw-r--r-- | actionpack/lib/abstract_controller/rendering.rb | 10 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/rendering.rb | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/base.rb | 2 | ||||
-rw-r--r-- | actionpack/test/abstract/details_cache_test.rb (renamed from actionpack/test/abstract/localized_cache_test.rb) | 2 |
7 files changed, 59 insertions, 56 deletions
diff --git a/actionpack/lib/abstract_controller.rb b/actionpack/lib/abstract_controller.rb index 1e15ab090c..1944e42ef1 100644 --- a/actionpack/lib/abstract_controller.rb +++ b/actionpack/lib/abstract_controller.rb @@ -13,9 +13,9 @@ module AbstractController autoload :Callbacks autoload :Collector autoload :Compatibility + autoload :DetailsCache autoload :Helpers autoload :Layouts - autoload :LocalizedCache autoload :Logger autoload :Rendering autoload :Translation 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 diff --git a/actionpack/lib/abstract_controller/localized_cache.rb b/actionpack/lib/abstract_controller/localized_cache.rb deleted file mode 100644 index 5e3efa002c..0000000000 --- a/actionpack/lib/abstract_controller/localized_cache.rb +++ /dev/null @@ -1,49 +0,0 @@ -module AbstractController - class HashKey - @hash_keys = Hash.new {|h,k| h[k] = Hash.new {|sh,sk| sh[sk] = {} } } - - 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(*args) - 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 diff --git a/actionpack/lib/abstract_controller/rendering.rb b/actionpack/lib/abstract_controller/rendering.rb index f5c20e8013..14f51ae1bf 100644 --- a/actionpack/lib/abstract_controller/rendering.rb +++ b/actionpack/lib/abstract_controller/rendering.rb @@ -165,13 +165,17 @@ module AbstractController details = _normalize_details(options) - options[:_template] ||= with_template_cache(name) do + options[:_template] ||= with_template_cache(name, details) do find_template(name, details, options) end end + def _details_defaults + { :formats => formats, :locale => [I18n.locale] } + end + def _normalize_details(options) - details = { :formats => formats } + details = _details_defaults details[:formats] = Array(options[:format]) if options[:format] details[:locale] = Array(options[:locale]) if options[:locale] details @@ -185,7 +189,7 @@ module AbstractController view_paths.exists?(name, details, options[:_prefix], options[:_partial]) end - def with_template_cache(name) + def with_template_cache(name, details) yield end diff --git a/actionpack/lib/action_controller/metal/rendering.rb b/actionpack/lib/action_controller/metal/rendering.rb index b90c054e98..a026289ee5 100644 --- a/actionpack/lib/action_controller/metal/rendering.rb +++ b/actionpack/lib/action_controller/metal/rendering.rb @@ -4,7 +4,7 @@ module ActionController include ActionController::RackDelegation include AbstractController::Rendering - include AbstractController::LocalizedCache + include AbstractController::DetailsCache def process_action(*) self.formats = request.formats.map {|x| x.to_sym } diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 44e5870131..a61017ae11 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -196,7 +196,7 @@ module ActionView #:nodoc: # This is expensive, but we need to reset this when the format is updated, # which currently only happens Thread.current[:format_locale_key] = - AbstractController::HashKey.get(self.class, formats, I18n.locale) + AbstractController::HashKey.get(self.class, :formats => formats, :locale => [I18n.locale]) end end diff --git a/actionpack/test/abstract/localized_cache_test.rb b/actionpack/test/abstract/details_cache_test.rb index 8b0b0fff03..ee746c1bb0 100644 --- a/actionpack/test/abstract/localized_cache_test.rb +++ b/actionpack/test/abstract/details_cache_test.rb @@ -5,7 +5,7 @@ module AbstractController class CachedController < AbstractController::Base include AbstractController::Rendering - include AbstractController::LocalizedCache + include AbstractController::DetailsCache self.view_paths = [ActionView::FixtureResolver.new( "default.erb" => "With Default", |