diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-07-29 20:26:40 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-07-29 21:43:07 -0700 |
commit | 4509494f702d58852ad47488ee1496dd34e31149 (patch) | |
tree | ec37229daf4c123764c2e9db9c63e49e714d7276 /actionpack/lib/action_dispatch/http | |
parent | b3d1f5b630debcc2d0572a3e3af1855ef93300c2 (diff) | |
download | rails-4509494f702d58852ad47488ee1496dd34e31149.tar.gz rails-4509494f702d58852ad47488ee1496dd34e31149.tar.bz2 rails-4509494f702d58852ad47488ee1496dd34e31149.zip |
header hash is duped before being sent up the rack stack
Diffstat (limited to 'actionpack/lib/action_dispatch/http')
-rw-r--r-- | actionpack/lib/action_dispatch/http/response.rb | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/actionpack/lib/action_dispatch/http/response.rb b/actionpack/lib/action_dispatch/http/response.rb index fa48594c93..17e74656af 100644 --- a/actionpack/lib/action_dispatch/http/response.rb +++ b/actionpack/lib/action_dispatch/http/response.rb @@ -216,17 +216,7 @@ module ActionDispatch # :nodoc: end def to_a - assign_default_content_type_and_charset! - handle_conditional_get! - - @header[SET_COOKIE] = @header[SET_COOKIE].join("\n") if @header[SET_COOKIE].respond_to?(:join) - - if [204, 304].include?(@status) - @header.delete CONTENT_TYPE - [@status, @header, []] - else - [@status, @header, self] - end + rack_response @status, @header.to_hash end alias prepare! to_a alias to_ary to_a # For implicit splat on 1.9.2 @@ -258,7 +248,7 @@ module ActionDispatch # :nodoc: body.respond_to?(:each) ? body : [body] end - def assign_default_content_type_and_charset! + def assign_default_content_type_and_charset!(headers) return if headers[CONTENT_TYPE].present? @content_type ||= Mime::HTML @@ -269,5 +259,19 @@ module ActionDispatch # :nodoc: headers[CONTENT_TYPE] = type end + + def rack_response(status, header) + assign_default_content_type_and_charset!(header) + handle_conditional_get! + + header[SET_COOKIE] = header[SET_COOKIE].join("\n") if header[SET_COOKIE].respond_to?(:join) + + if [204, 304].include?(@status) + header.delete CONTENT_TYPE + [status, header, []] + else + [status, header, self] + end + end end end |