mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add #no_content_type
attribute to AD::Response
Setting this attribute to `true` will remove the content type header from the request. This is use in `render :body` feature.
This commit is contained in:
parent
9fe506e394
commit
3047376870
5 changed files with 25 additions and 11 deletions
|
@ -5,8 +5,8 @@ module ActionController
|
|||
module RackDelegation
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
delegate :headers, :status=, :location=, :content_type=,
|
||||
:status, :location, :content_type, :to => "@_response"
|
||||
delegate :headers, :status=, :location=, :content_type=, :no_content_type=,
|
||||
:status, :location, :content_type, :no_content_type, :to => "@_response"
|
||||
|
||||
def dispatch(action, request)
|
||||
set_response!(request)
|
||||
|
|
|
@ -44,15 +44,13 @@ module ActionController
|
|||
|
||||
def _process_format(format, options = {})
|
||||
super
|
||||
self.content_type ||= format.to_s
|
||||
|
||||
if options[:body].present?
|
||||
self.content_type = "none"
|
||||
if options[:body]
|
||||
self.headers.delete "Content-Type"
|
||||
end
|
||||
|
||||
if options[:plain].present?
|
||||
elsif options[:plain]
|
||||
self.content_type = Mime::TEXT
|
||||
else
|
||||
self.content_type ||= format.to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -63,6 +63,8 @@ module ActionDispatch # :nodoc:
|
|||
# content you're giving them, so we need to send that along.
|
||||
attr_accessor :charset
|
||||
|
||||
attr_accessor :no_content_type # :nodoc:
|
||||
|
||||
CONTENT_TYPE = "Content-Type".freeze
|
||||
SET_COOKIE = "Set-Cookie".freeze
|
||||
LOCATION = "Location".freeze
|
||||
|
@ -288,7 +290,7 @@ module ActionDispatch # :nodoc:
|
|||
end
|
||||
|
||||
def assign_default_content_type_and_charset!(headers)
|
||||
return if headers[CONTENT_TYPE].present? || @content_type == "none"
|
||||
return if headers[CONTENT_TYPE].present?
|
||||
|
||||
@content_type ||= Mime::HTML
|
||||
@charset ||= self.class.default_charset unless @charset == false
|
||||
|
@ -303,8 +305,17 @@ module ActionDispatch # :nodoc:
|
|||
!@sending_file && @charset != false
|
||||
end
|
||||
|
||||
def remove_content_type!
|
||||
headers.delete CONTENT_TYPE
|
||||
end
|
||||
|
||||
def rack_response(status, header)
|
||||
assign_default_content_type_and_charset!(header)
|
||||
if no_content_type
|
||||
remove_content_type!
|
||||
else
|
||||
assign_default_content_type_and_charset!(header)
|
||||
end
|
||||
|
||||
handle_conditional_get!
|
||||
|
||||
header[SET_COOKIE] = header[SET_COOKIE].join("\n") if header[SET_COOKIE].respond_to?(:join)
|
||||
|
|
|
@ -238,7 +238,7 @@ class ResponseTest < ActiveSupport::TestCase
|
|||
|
||||
test "does not add default content-type if Content-Type is none" do
|
||||
resp = ActionDispatch::Response.new.tap { |response|
|
||||
response.content_type = 'none'
|
||||
response.no_content_type = true
|
||||
}
|
||||
|
||||
assert_not resp.headers.has_key?('Content-Type')
|
||||
|
|
|
@ -102,6 +102,11 @@ module ActionView
|
|||
# Assign the rendered format to lookup context.
|
||||
def _process_format(format, options = {}) #:nodoc:
|
||||
super
|
||||
|
||||
if options[:body]
|
||||
self.no_content_type = true
|
||||
end
|
||||
|
||||
lookup_context.formats = [format.to_sym]
|
||||
lookup_context.rendered_format = lookup_context.formats.first
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue