diff options
author | twinturbo <me@broadcastingadam.com> | 2012-05-03 15:47:02 -0700 |
---|---|---|
committer | twinturbo <me@broadcastingadam.com> | 2012-05-03 16:18:51 -0700 |
commit | 8eedd1a4a7bed400d0daed1fecafc4f84c5561f2 (patch) | |
tree | e381013b9603234d9424cbd682f8d77245b9525f | |
parent | 7d5146efad1c3bd471f315e4d259e00052eacbb6 (diff) | |
download | rails-8eedd1a4a7bed400d0daed1fecafc4f84c5561f2.tar.gz rails-8eedd1a4a7bed400d0daed1fecafc4f84c5561f2.tar.bz2 rails-8eedd1a4a7bed400d0daed1fecafc4f84c5561f2.zip |
Make ActionController#head pass rack-link
-rw-r--r-- | actionpack/lib/action_controller/metal/head.rb | 21 | ||||
-rw-r--r-- | actionpack/test/controller/new_base/bare_metal_test.rb | 60 |
2 files changed, 80 insertions, 1 deletions
diff --git a/actionpack/lib/action_controller/metal/head.rb b/actionpack/lib/action_controller/metal/head.rb index a618533d09..802c44cc73 100644 --- a/actionpack/lib/action_controller/metal/head.rb +++ b/actionpack/lib/action_controller/metal/head.rb @@ -27,8 +27,27 @@ module ActionController self.status = status self.location = url_for(location) if location - self.content_type = Mime[formats.first] if formats + + if include_content_type?(self.status) + self.content_type = Mime[formats.first] if formats + else + headers.delete('Content-Type') + end + self.response_body = " " end + + private + # :nodoc: + def include_content_type?(status) + case status + when 100..199 + false + when 204, 205, 304 + false + else + true + end + end end end diff --git a/actionpack/test/controller/new_base/bare_metal_test.rb b/actionpack/test/controller/new_base/bare_metal_test.rb index c424dcbd8d..df457f8a3c 100644 --- a/actionpack/test/controller/new_base/bare_metal_test.rb +++ b/actionpack/test/controller/new_base/bare_metal_test.rb @@ -37,6 +37,36 @@ module BareMetalTest def index head :not_found end + + def continue + self.content_type = "text/html" + head 100 + end + + def switching_protocols + self.content_type = "text/html" + head 101 + end + + def processing + self.content_type = "text/html" + head 102 + end + + def no_content + self.content_type = "text/html" + head 204 + end + + def reset_content + self.content_type = "text/html" + head 205 + end + + def not_modified + self.content_type = "text/html" + head 304 + end end class HeadTest < ActiveSupport::TestCase @@ -44,6 +74,36 @@ module BareMetalTest status = HeadController.action(:index).call(Rack::MockRequest.env_for("/")).first assert_equal 404, status end + + test "head :continue (100) does not return a content-type header" do + headers = HeadController.action(:continue).call(Rack::MockRequest.env_for("/")).second + assert_nil headers['Content-Type'] + end + + test "head :continue (101) does not return a content-type header" do + headers = HeadController.action(:continue).call(Rack::MockRequest.env_for("/")).second + assert_nil headers['Content-Type'] + end + + test "head :processing (102) does not return a content-type header" do + headers = HeadController.action(:processing).call(Rack::MockRequest.env_for("/")).second + assert_nil headers['Content-Type'] + end + + test "head :no_content (204) does not return a content-type header" do + headers = HeadController.action(:no_content).call(Rack::MockRequest.env_for("/")).second + assert_nil headers['Content-Type'] + end + + test "head :reset_content (205) does not return a content-type header" do + headers = HeadController.action(:reset_content).call(Rack::MockRequest.env_for("/")).second + assert_nil headers['Content-Type'] + end + + test "head :not_modified (304) does not return a content-type header" do + headers = HeadController.action(:not_modified).call(Rack::MockRequest.env_for("/")).second + assert_nil headers['Content-Type'] + end end class BareControllerTest < ActionController::TestCase |