提交 5f62c86b 编写于 作者: J José Valim

Merge pull request #6148 from twinturbo/head-fix

Make ActionController#head pass rack-link
......@@ -27,8 +27,28 @@ def head(status, options = {})
self.status = status
self.location = url_for(location) if location
self.content_type = Mime[formats.first] if formats
if include_content_headers?(self.status)
self.content_type = Mime[formats.first] if formats
else
headers.delete('Content-Type')
headers.delete('Content-Length')
end
self.response_body = " "
end
private
# :nodoc:
def include_content_headers?(status)
case status
when 100..199
false
when 204, 205, 304
false
else
true
end
end
end
end
......@@ -37,6 +37,36 @@ class HeadController < ActionController::Metal
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,42 @@ class HeadTest < ActiveSupport::TestCase
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']
assert_nil headers['Content-Length']
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']
assert_nil headers['Content-Length']
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']
assert_nil headers['Content-Length']
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']
assert_nil headers['Content-Length']
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']
assert_nil headers['Content-Length']
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']
assert_nil headers['Content-Length']
end
end
class BareControllerTest < ActionController::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册