diff options
author | eileencodes <eileencodes@gmail.com> | 2016-01-26 19:15:09 -0500 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2016-01-30 09:42:59 -0500 |
commit | c4d85dfbc71043e2a746acd310e32f4f04db801a (patch) | |
tree | 161068d34bce60413e1cf045080ebd9a02ce45b0 /actionpack | |
parent | 6162c49e40582bf058a6bb82ccc0cfb8f92332b6 (diff) | |
download | rails-c4d85dfbc71043e2a746acd310e32f4f04db801a.tar.gz rails-c4d85dfbc71043e2a746acd310e32f4f04db801a.tar.bz2 rails-c4d85dfbc71043e2a746acd310e32f4f04db801a.zip |
Handle response_body= when body is nil
There are some cases when the `body` in `response_body=` can be set to
nil. One of those cases is in `actionpack-action_caching` which I found
while upgrading it for Rails 5.
It's not possible to run `body.each` on a `nil` body so we have to
return after we run `response.reset_body!`.
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_controller/metal.rb | 1 | ||||
-rw-r--r-- | actionpack/test/controller/new_base/bare_metal_test.rb | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal.rb b/actionpack/lib/action_controller/metal.rb index f6a93a8940..1641d01c30 100644 --- a/actionpack/lib/action_controller/metal.rb +++ b/actionpack/lib/action_controller/metal.rb @@ -174,6 +174,7 @@ module ActionController def response_body=(body) body = [body] unless body.nil? || body.respond_to?(:each) response.reset_body! + return unless body body.each { |part| next if part.empty? response.write part diff --git a/actionpack/test/controller/new_base/bare_metal_test.rb b/actionpack/test/controller/new_base/bare_metal_test.rb index c226fa57ee..ee3c498b1c 100644 --- a/actionpack/test/controller/new_base/bare_metal_test.rb +++ b/actionpack/test/controller/new_base/bare_metal_test.rb @@ -40,6 +40,22 @@ module BareMetalTest end end + class BareEmptyController < ActionController::Metal + def index + self.response_body = nil + end + end + + class BareEmptyTest < ActiveSupport::TestCase + test "response body is nil" do + controller = BareEmptyController.new + controller.set_request!(ActionDispatch::Request.empty) + controller.set_response!(BareController.make_response!(controller.request)) + controller.index + assert_equal nil, controller.response_body + end + end + class HeadController < ActionController::Metal include ActionController::Head |