1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

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!`.
This commit is contained in:
eileencodes 2016-01-26 19:15:09 -05:00
parent 6162c49e40
commit c4d85dfbc7
2 changed files with 17 additions and 0 deletions

View file

@ -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

View file

@ -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