lib/reel/response.rb in reel-0.4.0.pre vs lib/reel/response.rb in reel-0.4.0.pre2

- old
+ new

@@ -6,15 +6,14 @@ CHUNKED = 'chunked'.freeze # Use status code tables from the Http gem STATUS_CODES = Http::Response::STATUS_CODES SYMBOL_TO_STATUS_CODE = Http::Response::SYMBOL_TO_STATUS_CODE - CRLF = "\r\n" attr_reader :status # Status has a special setter to coerce symbol names attr_accessor :reason # Reason can be set explicitly if desired - attr_reader :headers, :body + attr_reader :headers, :body, :version def initialize(status, body_or_headers = nil, body = nil) self.status = status if body_or_headers.is_a?(Hash) @@ -38,10 +37,14 @@ @headers = canonicalize_headers(headers) @version = http_version end + def chunked? + headers[TRANSFER_ENCODING] == CHUNKED + end + # Set the status def status=(status, reason=nil) case status when Integer @status = status @@ -55,56 +58,10 @@ else raise TypeError, "invalid status type: #{status.inspect}" end end - # Write the response out to the wire - def render(socket) - socket << render_header - - case @body - when String - socket << @body - when IO - begin - if !defined?(JRUBY_VERSION) - IO.copy_stream(@body, socket) - else - # JRuby 1.6.7 doesn't support IO.copy_stream :( - while data = @body.read(4096) - socket << data - end - end - ensure - @body.close - end - when Enumerable - @body.each do |chunk| - chunk_header = chunk.bytesize.to_s(16) - socket << chunk_header + CRLF - socket << chunk + CRLF - end - - socket << "0#{CRLF * 2}" - end - end - - # Convert headers into a string - # FIXME: this should probably be factored elsewhere, SRP and all - def render_header - response_header = "#{@version} #{@status} #{@reason}#{CRLF}" - - unless @headers.empty? - response_header << @headers.map do |header, value| - "#{header}: #{value}" - end.join(CRLF) << CRLF - end - - response_header << CRLF - end - private :render_header - def canonicalize_headers(headers) headers.inject({}) do |headers, (header, value)| headers.merge Http.canonicalize_header(header) => value.to_s end.freeze end @@ -113,8 +70,7 @@ def http_version # FIXME: real HTTP versioning "HTTP/1.1".freeze end private :http_version - end end