diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-01 12:30:52 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-01 12:30:52 +0000 |
commit | ab70e53ac3b5102d4ecbe8f38d4f76afad29d37d (patch) | |
tree | 6c68653e33e9f6a1c8e74d96669e058952bd60e9 | |
parent | b64083376ef9fdd04ea48d7b4002934ab4f921b9 (diff) | |
download | ruby-ab70e53ac3b5102d4ecbe8f38d4f76afad29d37d.tar.gz |
* lib/net/http.rb: adding support to rfc5789 patch verb.
Added a Net::HTTP::Patch class which expects a message body
and response body. It recycles the post method into a patch one,
that will send the encoded representation to the server.
Summarizing, a new class has been created, the post method
extracted into send_entity, including a new argument,
which defines which class to use (Post or Patch) and
finally a patch method was created. [ruby-core:30426]
Patched by Guilherme Silveira
<guilherme.silveira AT caelum.com.br>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | lib/net/http.rb | 42 | ||||
-rw-r--r-- | test/net/http/test_http.rb | 19 | ||||
-rw-r--r-- | test/net/http/utils.rb | 6 |
4 files changed, 70 insertions, 10 deletions
@@ -1,3 +1,16 @@ +Tue Jun 1 21:29:39 2010 NARUSE, Yui <naruse@ruby-lang.org> + + * lib/net/http.rb: adding support to rfc5789 patch verb. + Added a Net::HTTP::Patch class which expects a message body + and response body. It recycles the post method into a patch one, + that will send the encoded representation to the server. + Summarizing, a new class has been created, the post method + extracted into send_entity, including a new argument, + which defines which class to use (Post or Patch) and + finally a patch method was created. [ruby-core:30426] + Patched by Guilherme Silveira + <guilherme.silveira AT caelum.com.br> + Tue Jun 1 03:46:08 2010 NARUSE, Yui <naruse@ruby-lang.org> * ext/readline/extconf.rb: reject GPLv3 readline. [ruby-dev:39172] diff --git a/lib/net/http.rb b/lib/net/http.rb index f39451591f..920301f350 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -966,16 +966,13 @@ module Net #:nodoc: # "application/x-www-form-urlencoded" by default. # def post(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+ - res = nil - request(Post.new(path, initheader), data) {|r| - r.read_body dest, &block - res = r - } - unless @newimpl - res.value - return res, res.body - end - res + send_entity(path, data, initheader, dest, Post, &block) + end + + # Sends a PATCH request to the +path+ and gets a response, + # as an HTTPResponse object. + def patch(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+ + send_entity(path, data, initheader, dest, Patch, &block) end def put(path, data, initheader = nil) #:nodoc: @@ -1176,6 +1173,21 @@ module Net #:nodoc: private + # Executes a request which uses a representation + # and returns its body. + def send_entity(path, data, initheader, dest, type, &block) + res = nil + request(type.new(path, initheader), data) {|r| + r.read_body dest, &block + res = r + } + unless @newimpl + res.value + return res, res.body + end + res + end + def transport_request(req) begin_transport req req.exec @socket, @curr_http_version, edit_path(req.path) @@ -1832,6 +1844,16 @@ module Net #:nodoc: end # + # PATCH method --- RFC5789 + # + + class Patch < HTTPRequest + METHOD = 'PATCH' + REQUEST_HAS_BODY = true + RESPONSE_HAS_BODY = true + end + + # # WebDAV methods --- RFC2518 # diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb index 167eda933e..76280ad168 100644 --- a/test/net/http/test_http.rb +++ b/test/net/http/test_http.rb @@ -169,6 +169,25 @@ module TestNetHTTP_version_1_1_methods assert_equal ["a=x1", "a=x2", "b=y"], res.body.split(/[;&]/).sort end + def test_patch + start {|http| + _test_patch__base http + } + end + + def _test_patch__base(http) + uheader = {} + uheader['Accept'] = 'application/octet-stream' + data = 'patch data' + res, body = http.patch('/', data) + assert_kind_of Net::HTTPResponse, res + assert_kind_of String, body + assert_kind_of String, res.body + assert_equal data, body + assert_equal data, res.body + assert_equal data, res.entity + end + end diff --git a/test/net/http/utils.rb b/test/net/http/utils.rb index 10c88d70d7..32cea2a78c 100644 --- a/test/net/http/utils.rb +++ b/test/net/http/utils.rb @@ -92,6 +92,12 @@ module TestNetHTTPUtils res.body = req.body res.chunked = @chunked end + + def do_PATCH(req, res) + res['Content-Type'] = req['Content-Type'] + res.body = req.body + res.chunked = @chunked + end end class NullWriter |