diff options
-rw-r--r-- | actionpack/lib/action_controller/caching/actions.rb | 6 | ||||
-rw-r--r-- | actionpack/test/controller/caching_test.rb | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/caching/actions.rb b/actionpack/lib/action_controller/caching/actions.rb index 3b86a9a93a..a8aed4281b 100644 --- a/actionpack/lib/action_controller/caching/actions.rb +++ b/actionpack/lib/action_controller/caching/actions.rb @@ -102,8 +102,10 @@ module ActionController #:nodoc: end def _save_fragment(name, options) - content = response_body - content = content.join if content.is_a?(Array) + content = "" + response_body.each do |parts| + content << parts + end if caching_allowed? write_fragment(name, content, options) diff --git a/actionpack/test/controller/caching_test.rb b/actionpack/test/controller/caching_test.rb index 443b56830a..02b092ea8f 100644 --- a/actionpack/test/controller/caching_test.rb +++ b/actionpack/test/controller/caching_test.rb @@ -237,6 +237,7 @@ class ActionCachingTestController < CachingController caches_action :with_format_and_http_param, :cache_path => Proc.new { |c| { :key => 'value' } } caches_action :layout_false, :layout => false caches_action :record_not_found, :four_oh_four, :simple_runtime_error + caches_action :streaming layout 'talk_from_action' @@ -296,6 +297,10 @@ class ActionCachingTestController < CachingController expire_action url_for(:controller => 'action_caching_test', :action => 'index') render :nothing => true end + + def streaming + render :text => "streaming", :stream => true + end end class MockTime < Time @@ -647,6 +652,13 @@ class ActionCacheTest < ActionController::TestCase assert_response 500 end + def test_action_caching_plus_streaming + get :streaming + assert_response :success + assert_match(/streaming/, @response.body) + assert fragment_exist?('hostname.com/action_caching_test/streaming') + end + private def content_to_cache assigns(:cache_this) |