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