aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/abstract_controller
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/abstract_controller')
-rw-r--r--actionpack/lib/abstract_controller/details_cache.rb48
-rw-r--r--actionpack/lib/abstract_controller/localized_cache.rb49
-rw-r--r--actionpack/lib/abstract_controller/rendering.rb10
3 files changed, 55 insertions, 52 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
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