about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2007-10-11 07:22:37 +0000
committerevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2007-10-11 07:22:37 +0000
commit370a88b2e428a41008d2f9e4e2c2a4ed215ab873 (patch)
treed051124162f20217b092959a084e35b1720409ec
parente577ab7e62af6674acf3292eda9f604981b48202 (diff)
downloadunicorn-370a88b2e428a41008d2f9e4e2c2a4ed215ab873.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@640 19e92222-5c0b-0410-8929-a290d50e31e9
-rw-r--r--lib/mongrel.rb6
-rw-r--r--test/test_response.rb23
2 files changed, 27 insertions, 2 deletions
diff --git a/lib/mongrel.rb b/lib/mongrel.rb
index 5ed1e66..3569e07 100644
--- a/lib/mongrel.rb
+++ b/lib/mongrel.rb
@@ -406,6 +406,7 @@ module Mongrel
       @socket = socket
       @body = StringIO.new
       @status = 404
+      @reason = HTTP_STATUS_CODES[@status]
       @header = HeaderOut.new(StringIO.new)
       @header[Const::DATE] = Time.now.httpdate
       @body_sent = false
@@ -421,8 +422,9 @@ module Mongrel
     # by simple passing "finalize=true" to the start method.  By default
     # all handlers run and then mongrel finalizes the request when they're
     # all done.
-    def start(status=200, finalize=false)
+    def start(status=200, finalize=false, reason=HTTP_STATUS_CODES[status])
       @status = status.to_i
+      @reason = reason
       yield @header, @body
       finished if finalize
     end
@@ -445,7 +447,7 @@ module Mongrel
     def send_status(content_length=@body.length)
       if not @status_sent
         @header['Content-Length'] = content_length if content_length and @status != 304
-        write(Const::STATUS_FORMAT % [@status, HTTP_STATUS_CODES[@status]])
+        write(Const::STATUS_FORMAT % [@status, @reason])
         @status_sent = true
       end
     end
diff --git a/test/test_response.rb b/test/test_response.rb
index 584b28f..90953b1 100644
--- a/test/test_response.rb
+++ b/test/test_response.rb
@@ -102,5 +102,28 @@ class ResponseTest < Test::Unit::TestCase
     assert io.length > 0, "output didn't have data"
     assert io.read[-contents.length..-1] == contents, "output doesn't end with file payload"
   end
+
+  def test_response_with_custom_reason
+    reason = "You made a bad request"
+    io = StringIO.new
+    resp = HttpResponse.new(io)
+    resp.start(400, false, reason) { |head,out| }
+    resp.finished
+
+    io.rewind
+    assert_match(/.* #{reason}$/, io.readline.chomp, "wrong custom reason phrase")
+  end
+
+  def test_response_with_default_reason
+    code = 400
+    io = StringIO.new
+    resp = HttpResponse.new(io)
+    resp.start(code) { |head,out| }
+    resp.finished
+
+    io.rewind
+    assert_match(/.* #{HTTP_STATUS_CODES[code]}$/, io.readline.chomp, "wrong default reason phrase")
+  end
+
 end