diff options
author | Carlhuda <carlhuda@engineyard.com> | 2010-03-18 14:55:13 -0700 |
---|---|---|
committer | Carlhuda <carlhuda@engineyard.com> | 2010-03-18 14:55:29 -0700 |
commit | 523d0f3700f5bb68cdd3d549eaad63d8a88c2aef (patch) | |
tree | a9ce703bc593defdda7b3d6bab45e3f3f9cc6f39 /actionpack | |
parent | d8c7efece60f23d09031c11928be5048ac6340de (diff) | |
download | rails-523d0f3700f5bb68cdd3d549eaad63d8a88c2aef.tar.gz rails-523d0f3700f5bb68cdd3d549eaad63d8a88c2aef.tar.bz2 rails-523d0f3700f5bb68cdd3d549eaad63d8a88c2aef.zip |
Remove caching's dependency on view_context. Also, make it so that the layout is always rendered the same way (so that layout dependencies on the action actually being rendered aren't masked on the first render)
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/abstract_controller/layouts.rb | 16 | ||||
-rw-r--r-- | actionpack/lib/action_controller/caching/actions.rb | 24 |
2 files changed, 26 insertions, 14 deletions
diff --git a/actionpack/lib/abstract_controller/layouts.rb b/actionpack/lib/abstract_controller/layouts.rb index 24a3923447..39a389dcb9 100644 --- a/actionpack/lib/abstract_controller/layouts.rb +++ b/actionpack/lib/abstract_controller/layouts.rb @@ -185,6 +185,8 @@ module AbstractController # ==== Returns # Boolean:: True if the action has a layout, false otherwise. def action_has_layout? + return unless super + conditions = _layout_conditions if only = conditions[:only] @@ -297,6 +299,16 @@ module AbstractController end end + attr_writer :action_has_layout + + def initialize(*) + @action_has_layout = true + end + + def action_has_layout? + @action_has_layout + end + private # This will be overwritten by _write_layout_method @@ -353,9 +365,5 @@ module AbstractController def _include_layout?(options) (options.keys & [:text, :inline, :partial]).empty? || options.key?(:layout) end - - def action_has_layout? - true - end end end diff --git a/actionpack/lib/action_controller/caching/actions.rb b/actionpack/lib/action_controller/caching/actions.rb index 3e5240a0ef..e89bf64026 100644 --- a/actionpack/lib/action_controller/caching/actions.rb +++ b/actionpack/lib/action_controller/caching/actions.rb @@ -80,6 +80,7 @@ module ActionController #:nodoc: def caches_action(*actions) return unless cache_configured? options = actions.extract_options! + options[:layout] = true unless options.key?(:layout) filter_options = options.extract!(:if, :unless).merge(:only => actions) cache_options = options.extract!(:layout, :cache_path).merge(:store_options => options) @@ -87,14 +88,10 @@ module ActionController #:nodoc: end end - def _render_cache_fragment(cache, extension, layout) - render :text => cache, :layout => layout, :content_type => Mime[extension || :html] - end - - def _save_fragment(name, layout, options) + def _save_fragment(name, options) return unless caching_allowed? - content = layout ? view_context.content_for(:layout) : response_body + content = response_body write_fragment(name, content, options) end @@ -125,12 +122,19 @@ module ActionController #:nodoc: cache_path = ActionCachePath.new(controller, path_options || {}) - if cache = controller.read_fragment(cache_path.path, @store_options) - controller._render_cache_fragment(cache, cache_path.extension, @cache_layout == false) - else + body = controller.read_fragment(cache_path.path, @store_options) + + unless body + controller.action_has_layout = false unless @cache_layout yield - controller._save_fragment(cache_path.path, @cache_layout == false, @store_options) + controller.action_has_layout = true + body = controller._save_fragment(cache_path.path, @store_options) end + + body = controller.render_to_string(:text => cache, :layout => true) unless @cache_layout + + controller.response_body = body + controller.content_type = Mime[cache_path.extension || :html] end end |