aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-01 12:30:52 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-01 12:30:52 +0000
commitab70e53ac3b5102d4ecbe8f38d4f76afad29d37d (patch)
tree6c68653e33e9f6a1c8e74d96669e058952bd60e9
parentb64083376ef9fdd04ea48d7b4002934ab4f921b9 (diff)
downloadruby-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--ChangeLog13
-rw-r--r--lib/net/http.rb42
-rw-r--r--test/net/http/test_http.rb19
-rw-r--r--test/net/http/utils.rb6
4 files changed, 70 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 05853f4cf0..ec08c6a37d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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