From ab70e53ac3b5102d4ecbe8f38d4f76afad29d37d Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 1 Jun 2010 12:30:52 +0000 Subject: * 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 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/net/http.rb | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) (limited to 'lib/net') 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) @@ -1831,6 +1843,16 @@ module Net #:nodoc: RESPONSE_HAS_BODY = true end + # + # PATCH method --- RFC5789 + # + + class Patch < HTTPRequest + METHOD = 'PATCH' + REQUEST_HAS_BODY = true + RESPONSE_HAS_BODY = true + end + # # WebDAV methods --- RFC2518 # -- cgit v1.2.3