mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
stop applying default headers in ActionDispatch::Response
I'm making this change so that I can construct response objects that *don't* have the default headers applied. For example, I would like to construct a response object from the return value of a controller. If you need to construct a response object with the default headers, then please use the alternate constructor: `ActionDispatch::Response.create`
This commit is contained in:
parent
28cb10b15e
commit
e16afe61ab
7 changed files with 25 additions and 16 deletions
|
@ -1,3 +1,8 @@
|
|||
* ActionDispatch::Response#new no longer applies default headers. If you want
|
||||
default headers applied to the response object, then call
|
||||
`ActionDispatch::Response.create`. This change only impacts people who are
|
||||
directly constructing an `ActionDispatch::Response` object.
|
||||
|
||||
* Accessing mime types via constants like `Mime::HTML` is deprecated. Please
|
||||
change code like this:
|
||||
|
||||
|
|
|
@ -135,7 +135,7 @@ module ActionController
|
|||
end
|
||||
|
||||
def self.make_response!(request)
|
||||
ActionDispatch::Response.new.tap do |res|
|
||||
ActionDispatch::Response.create.tap do |res|
|
||||
res.request = request
|
||||
end
|
||||
end
|
||||
|
|
|
@ -236,6 +236,10 @@ module ActionController
|
|||
end
|
||||
end
|
||||
|
||||
def initialize(status = 200, header = {}, body = [])
|
||||
super(status, Header.new(self, header), body)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def before_committed
|
||||
|
@ -257,10 +261,6 @@ module ActionController
|
|||
buf
|
||||
end
|
||||
|
||||
def merge_default_headers(original, default)
|
||||
Header.new self, super
|
||||
end
|
||||
|
||||
def handle_conditional_get!
|
||||
super unless committed?
|
||||
end
|
||||
|
|
|
@ -585,7 +585,7 @@ module ActionController
|
|||
end
|
||||
|
||||
def build_response(klass)
|
||||
klass.new
|
||||
klass.create
|
||||
end
|
||||
|
||||
included do
|
||||
|
|
|
@ -103,13 +103,21 @@ module ActionDispatch # :nodoc:
|
|||
end
|
||||
end
|
||||
|
||||
def self.create(status = 200, header = {}, body = [], default_headers: self.default_headers)
|
||||
header = merge_default_headers(header, default_headers)
|
||||
new status, header, body
|
||||
end
|
||||
|
||||
def self.merge_default_headers(original, default)
|
||||
default.respond_to?(:merge) ? default.merge(original) : original
|
||||
end
|
||||
|
||||
# The underlying body, as a streamable object.
|
||||
attr_reader :stream
|
||||
|
||||
def initialize(status = 200, header = {}, body = [], default_headers: self.class.default_headers)
|
||||
def initialize(status = 200, header = {}, body = [])
|
||||
super()
|
||||
|
||||
header = merge_default_headers(header, default_headers)
|
||||
@header = header
|
||||
|
||||
self.body, self.status = body, status
|
||||
|
@ -345,10 +353,6 @@ module ActionDispatch # :nodoc:
|
|||
def before_sending
|
||||
end
|
||||
|
||||
def merge_default_headers(original, default)
|
||||
default.respond_to?(:merge) ? default.merge(original) : original
|
||||
end
|
||||
|
||||
def build_buffer(response, body)
|
||||
Buffer.new response, body
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ module ActionDispatch
|
|||
# See Response for more information on controller response objects.
|
||||
class TestResponse < Response
|
||||
def self.from_response(response)
|
||||
new response.status, response.headers, response.body, default_headers: nil
|
||||
new response.status, response.headers, response.body
|
||||
end
|
||||
|
||||
# Was the response successful?
|
||||
|
|
|
@ -4,7 +4,7 @@ require 'rack/content_length'
|
|||
|
||||
class ResponseTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@response = ActionDispatch::Response.new
|
||||
@response = ActionDispatch::Response.create
|
||||
end
|
||||
|
||||
def test_can_wait_until_commit
|
||||
|
@ -217,7 +217,7 @@ class ResponseTest < ActiveSupport::TestCase
|
|||
'X-Content-Type-Options' => 'nosniff',
|
||||
'X-XSS-Protection' => '1;'
|
||||
}
|
||||
resp = ActionDispatch::Response.new.tap { |response|
|
||||
resp = ActionDispatch::Response.create.tap { |response|
|
||||
response.body = 'Hello'
|
||||
}
|
||||
resp.to_a
|
||||
|
@ -236,7 +236,7 @@ class ResponseTest < ActiveSupport::TestCase
|
|||
ActionDispatch::Response.default_headers = {
|
||||
'X-XX-XXXX' => 'Here is my phone number'
|
||||
}
|
||||
resp = ActionDispatch::Response.new.tap { |response|
|
||||
resp = ActionDispatch::Response.create.tap { |response|
|
||||
response.body = 'Hello'
|
||||
}
|
||||
resp.to_a
|
||||
|
|
Loading…
Reference in a new issue