diff --git a/lib/Cake/Network/Http/HttpSocket.php b/lib/Cake/Network/Http/HttpSocket.php index 540f357f7..c615ce051 100644 --- a/lib/Cake/Network/Http/HttpSocket.php +++ b/lib/Cake/Network/Http/HttpSocket.php @@ -494,6 +494,19 @@ class HttpSocket extends CakeSocket { return $this->request($request); } +/** + * Issues a PATCH request to the specified URI, query, and request. + * + * @param string|array $uri URI to request, See HttpSocket::_parseUri() + * @param array $data Array of PATCH data keys and values. + * @param array $request An indexed array with indexes such as 'method' or uri + * @return mixed Result of request + */ + public function patch($uri = null, $data = array(), $request = array()) { + $request = Hash::merge(array('method' => 'PATCH', 'uri' => $uri, 'body' => $data), $request); + return $this->request($request); + } + /** * Issues a DELETE request to the specified URI, query, and request. * diff --git a/lib/Cake/Test/Case/Network/Http/HttpSocketTest.php b/lib/Cake/Test/Case/Network/Http/HttpSocketTest.php index 2bfb64f65..df932961b 100644 --- a/lib/Cake/Test/Case/Network/Http/HttpSocketTest.php +++ b/lib/Cake/Test/Case/Network/Http/HttpSocketTest.php @@ -1147,6 +1147,30 @@ class HttpSocketTest extends CakeTestCase { $this->RequestSocket->put('http://www.google.com/', null, array('line' => 'Hey Server')); } +/** + * testPatch + * + * @return void + */ + public function testPatch() { + $this->RequestSocket->reset(); + $this->RequestSocket->expects($this->at(0)) + ->method('request') + ->with(array('method' => 'PATCH', 'uri' => 'http://www.google.com/', 'body' => array())); + + $this->RequestSocket->expects($this->at(1)) + ->method('request') + ->with(array('method' => 'PATCH', 'uri' => 'http://www.google.com/', 'body' => array('Foo' => 'bar'))); + + $this->RequestSocket->expects($this->at(2)) + ->method('request') + ->with(array('method' => 'PATCH', 'uri' => 'http://www.google.com/', 'body' => null, 'line' => 'Hey Server')); + + $this->RequestSocket->patch('http://www.google.com/'); + $this->RequestSocket->patch('http://www.google.com/', array('Foo' => 'bar')); + $this->RequestSocket->patch('http://www.google.com/', null, array('line' => 'Hey Server')); + } + /** * testDelete *