Feature #5778 ยป httpresponse.patch
lib/webrick/httpresponse.rb | ||
---|---|---|
attr_accessor :reason_phrase
|
||
##
|
||
# Body may be a String or IO subclass.
|
||
# Body may be a String or IO subclass, or anything which
|
||
# implements #read and #close methods to mimic an IO. If body
|
||
# implements a #bytesize method, that will be used to determine
|
||
# the Content-Length header.
|
||
attr_accessor :body
|
||
... | ... | |
elsif %r{^multipart/byteranges} =~ @header['content-type']
|
||
@header.delete('content-length')
|
||
elsif @header['content-length'].nil?
|
||
unless @body.is_a?(IO)
|
||
if @body.respond_to?( :bytesize )
|
||
@header['content-length'] = @body ? @body.bytesize : 0
|
||
end
|
||
end
|
||
... | ... | |
def send_body(socket)
|
||
case @body
|
||
when IO then send_body_io(socket)
|
||
else send_body_string(socket)
|
||
when String then send_body_string(socket)
|
||
else send_body_io(socket)
|
||
end
|
||
end
|
||
test/webrick/test_httpresponse.rb | ||
---|---|---|
require "webrick"
|
||
require "stringio"
|
||
require "minitest/autorun"
|
||
module WEBrick
|
||
... | ... | |
def warn msg
|
||
@messages << msg
|
||
end
|
||
def error msg
|
||
fail msg
|
||
end
|
||
end
|
||
attr_reader :config, :logger, :res
|
||
... | ... | |
assert_equal 0, logger.messages.length
|
||
end
|
||
def test_can_send_string_response
|
||
res.body = "tulips!"
|
||
socket = StringIO.new
|
||
|
||
res.send_response( socket )
|
||
|
||
assert_match /tulips!/, socket.string
|
||
end
|
||
def test_can_send_io_response
|
||
io_r, io_w = IO.pipe
|
||
io_w.write "beards!"
|
||
io_w.close_write
|
||
res.body = io_r
|
||
socket = StringIO.new
|
||
res.send_response( socket )
|
||
|
||
assert_match /beards!/, socket.string
|
||
end
|
||
|
||
def test_can_send_stringio_response
|
||
res.body = StringIO.new("octopodes!")
|
||
socket = StringIO.new
|
||
|
||
res.send_response( socket )
|
||
assert_match /octopodes!/, socket.string
|
||
end
|
||
def test_can_send_arbitrary_io_like_object
|
||
thing = Class.new do
|
||
def read(n); @sent = (@sent ? nil : "MIGHTY GIRAFFES"); end
|
||
def close; end
|
||
end.new
|
||
res.body = thing
|
||
socket = StringIO.new
|
||
|
||
res.send_response( socket )
|
||
|
||
assert_match /MIGHTY GIRAFFES/, socket.string
|
||
end
|
||
end
|
||
end
|