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:
parent
6162c49e40
commit
c4d85dfbc7
2 changed files with 17 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue