From a109f7537a0527282308ac87aea6e54fb135054c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 14 Aug 2009 21:03:45 -0700 Subject: http_response: pass through unknown status codes This lets clients can pass through newly-invented status codes that Rack does not know about. --- lib/unicorn/http_response.rb | 2 +- test/unit/test_response.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/unicorn/http_response.rb b/lib/unicorn/http_response.rb index bfaa33d..5602a43 100644 --- a/lib/unicorn/http_response.rb +++ b/lib/unicorn/http_response.rb @@ -36,7 +36,7 @@ module Unicorn # writes the rack_response to socket as an HTTP response def self.write(socket, rack_response) status, headers, body = rack_response - status = CODES[status.to_i] + status = CODES[status.to_i] || status OUT.clear # Don't bother enforcing duplicate supression, it's a Hash most of diff --git a/test/unit/test_response.rb b/test/unit/test_response.rb index 66c2b54..0c4d29e 100644 --- a/test/unit/test_response.rb +++ b/test/unit/test_response.rb @@ -94,4 +94,15 @@ class ResponseTest < Test::Unit::TestCase assert_match(expect_body, out.string.split(/\r\n/).last) end + def test_unknown_status_pass_through + out = StringIO.new + HttpResponse.write(out,["666 I AM THE BEAST", {}, [] ]) + assert out.closed? + headers = out.string.split(/\r\n\r\n/).first.split(/\r\n/) + assert %r{\AHTTP/\d\.\d 666 I AM THE BEAST\z}.match(headers[0]) + status = headers.grep(/\AStatus:/i).first + assert status + assert_equal "Status: 666 I AM THE BEAST", status + end + end -- cgit v1.2.3-24-ge0c7