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:
parent
d5ecd17aee
commit
9dff71ad78
4 changed files with 107 additions and 4 deletions
|
@ -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>
|
Wed Aug 7 23:06:26 2013 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* ruby.c (Process.argv0): New method to return the original value
|
* ruby.c (Process.argv0): New method to return the original value
|
||||||
|
|
4
NEWS
4
NEWS
|
@ -145,6 +145,10 @@ with all sufficient information, see the ChangeLog file.
|
||||||
* CGI::Util
|
* CGI::Util
|
||||||
* All class methods modulized.
|
* 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
|
* XMLRPC::Client
|
||||||
* New methods:
|
* New methods:
|
||||||
* XMLRPC::Client#http. It returns Net::HTTP for the client. Normally,
|
* XMLRPC::Client#http. It returns Net::HTTP for the client. Normally,
|
||||||
|
|
|
@ -47,7 +47,8 @@ module WEBrick
|
||||||
attr_accessor :reason_phrase
|
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
|
attr_accessor :body
|
||||||
|
|
||||||
|
@ -299,9 +300,10 @@ module WEBrick
|
||||||
# Sends the body on +socket+
|
# Sends the body on +socket+
|
||||||
|
|
||||||
def send_body(socket) # :nodoc:
|
def send_body(socket) # :nodoc:
|
||||||
case @body
|
if @body.respond_to? :readpartial then
|
||||||
when IO then send_body_io(socket)
|
send_body_io(socket)
|
||||||
else send_body_string(socket)
|
else
|
||||||
|
send_body_string(socket)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
require "webrick"
|
require "webrick"
|
||||||
require "minitest/autorun"
|
require "minitest/autorun"
|
||||||
|
require "stringio"
|
||||||
|
|
||||||
module WEBrick
|
module WEBrick
|
||||||
class TestHTTPResponse < MiniTest::Unit::TestCase
|
class TestHTTPResponse < MiniTest::Unit::TestCase
|
||||||
|
@ -45,5 +46,93 @@ module WEBrick
|
||||||
|
|
||||||
assert_equal 0, logger.messages.length
|
assert_equal 0, logger.messages.length
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue