1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/webrick/httpresponse.rb: Allow #body to be an IO-like object

that responds to #readpartial and #read.
  [ruby-trunk - Feature #8155]
* NEWS:  NEWS for above
* test/webrick/test_httpresponse.rb:  Tests for above.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42427 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2013-08-07 18:38:39 +00:00
parent d5ecd17aee
commit 9dff71ad78
4 changed files with 107 additions and 4 deletions

View file

@ -1,3 +1,11 @@
Thu Aug 8 03:37:38 2013 Eric Hodel <drbrain@segment7.net>
* lib/webrick/httpresponse.rb: Allow #body to be an IO-like object
that responds to #readpartial and #read.
[ruby-trunk - Feature #8155]
* NEWS: NEWS for above
* test/webrick/test_httpresponse.rb: Tests for above.
Wed Aug 7 23:06:26 2013 Akinori MUSHA <knu@iDaemons.org>
* ruby.c (Process.argv0): New method to return the original value

4
NEWS
View file

@ -145,6 +145,10 @@ with all sufficient information, see the ChangeLog file.
* CGI::Util
* All class methods modulized.
* WEBrick
* The body of a response may now be a StringIO or other IO-like that responds
to #readpartial and #read.
* XMLRPC::Client
* New methods:
* XMLRPC::Client#http. It returns Net::HTTP for the client. Normally,

View file

@ -47,7 +47,8 @@ module WEBrick
attr_accessor :reason_phrase
##
# Body may be a String or IO subclass.
# Body may be a String or IO-like object that responds to #read and
# #readpartial.
attr_accessor :body
@ -299,9 +300,10 @@ module WEBrick
# Sends the body on +socket+
def send_body(socket) # :nodoc:
case @body
when IO then send_body_io(socket)
else send_body_string(socket)
if @body.respond_to? :readpartial then
send_body_io(socket)
else
send_body_string(socket)
end
end

View file

@ -1,5 +1,6 @@
require "webrick"
require "minitest/autorun"
require "stringio"
module WEBrick
class TestHTTPResponse < MiniTest::Unit::TestCase
@ -45,5 +46,93 @@ module WEBrick
assert_equal 0, logger.messages.length
end
def test_send_body_io
body_r, body_w = IO.pipe
body_w.write 'hello'
body_w.close
@res.body = body_r
r, w = IO.pipe
@res.send_body w
w.close
assert_equal 'hello', r.read
end
def test_send_body_string
@res.body = 'hello'
r, w = IO.pipe
@res.send_body w
w.close
assert_equal 'hello', r.read
end
def test_send_body_string_io
@res.body = StringIO.new 'hello'
r, w = IO.pipe
@res.send_body w
w.close
assert_equal 'hello', r.read
end
def test_send_body_io_chunked
@res.chunked = true
body_r, body_w = IO.pipe
body_w.write 'hello'
body_w.close
@res.body = body_r
r, w = IO.pipe
@res.send_body w
w.close
assert_equal "5\r\nhello\r\n0\r\n\r\n", r.read
end
def test_send_body_string_chunked
@res.chunked = true
@res.body = 'hello'
r, w = IO.pipe
@res.send_body w
w.close
assert_equal "5\r\nhello\r\n0\r\n\r\n", r.read
end
def test_send_body_string_io_chunked
@res.chunked = true
@res.body = StringIO.new 'hello'
r, w = IO.pipe
@res.send_body w
w.close
assert_equal "5\r\nhello\r\n0\r\n\r\n", r.read
end
end
end