From 9abb447a573751b87e26ce35f4f05d58290f4c41 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 8 Jul 2010 23:21:18 +0000 Subject: restore Rainbows::HttpResponse.write for Cramp Cramp monkey patches Rainbows internals for WebSockets support and we forgot about it. Add a new integration test to ensure this continues to work in the future (and force us to update the test for newer Cramp). --- lib/rainbows/response.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lib/rainbows/response.rb (limited to 'lib/rainbows/response.rb') diff --git a/lib/rainbows/response.rb b/lib/rainbows/response.rb new file mode 100644 index 0000000..8d131b0 --- /dev/null +++ b/lib/rainbows/response.rb @@ -0,0 +1,44 @@ +# -*- encoding: binary -*- +require 'time' # for Time#httpdate + +# :stopdoc: +module Rainbows::Response + + CODES = Unicorn::HttpResponse::CODES + + def response_header(response, out) + status, headers = response + status = CODES[status.to_i] || status + + headers.each do |key, value| + next if %r{\A(?:X-Rainbows-|Connection\z|Date\z|Status\z)}i =~ key + if value =~ /\n/ + # avoiding blank, key-only cookies with /\n+/ + out.concat(value.split(/\n+/).map! { |v| "#{key}: #{v}\r\n" }) + else + out << "#{key}: #{value}\r\n" + end + end + + "HTTP/1.1 #{status}\r\n" \ + "Date: #{Time.now.httpdate}\r\n" \ + "Status: #{status}\r\n" \ + "#{out.join('')}\r\n" + end + + def write_header(socket, response, out) + out and socket.write(response_header(response, out)) + end + + def write_response(socket, response, out) + write_header(socket, response, out) + write_body(socket, response[2]) + end + + # called after forking + def self.setup(klass) + require('rainbows/response/body') and + klass.__send__(:include, Rainbows::Response::Body) + end +end +# :startdoc: -- cgit v1.2.3-24-ge0c7