diff --git a/library/Guzzle/Http/Message/RequestFactory.php b/library/Guzzle/Http/Message/RequestFactory.php index 4d516716..697c9262 100644 --- a/library/Guzzle/Http/Message/RequestFactory.php +++ b/library/Guzzle/Http/Message/RequestFactory.php @@ -221,12 +221,12 @@ class RequestFactory $request = new $c($method, $url, $headers); if ($body) { - if ($method == 'POST' && is_array($body)) { - $request->addPostFields(new QueryString($body)); - } else if ($method == 'POST' && $body instanceof Collection) { - $request->addPostFields($body->getAll()); - } else { + if ($method == 'POST' && (is_array($body) || $body instanceof Collection)) { + $request->addPostFields($body); + } else if (is_resource($body) || $body instanceof EntityBody) { $request->setBody($body); + } else { + $request->setBody((string) $body); } } } diff --git a/library/Guzzle/Service/Description/DynamicCommandFactory.php b/library/Guzzle/Service/Description/DynamicCommandFactory.php index 4f0dea11..933aa883 100644 --- a/library/Guzzle/Service/Description/DynamicCommandFactory.php +++ b/library/Guzzle/Service/Description/DynamicCommandFactory.php @@ -30,7 +30,7 @@ class DynamicCommandFactory implements CommandFactoryInterface if ($command->getConcreteClass() != 'Guzzle\\Service\\Command\\ClosureCommand') { $class = $command->getConcreteClass(); - return new $class($args); + return new $class($args, $command); } // Build the command based on the service doc and supplied arguments diff --git a/tests/Guzzle/Tests/Http/Message/RequestFactoryTest.php b/tests/Guzzle/Tests/Http/Message/RequestFactoryTest.php index 6c78a2eb..9c78b5c7 100644 --- a/tests/Guzzle/Tests/Http/Message/RequestFactoryTest.php +++ b/tests/Guzzle/Tests/Http/Message/RequestFactoryTest.php @@ -7,6 +7,7 @@ namespace Guzzle\Tests\Http\Message; use Guzzle\Common\Collection; +use Guzzle\Http\Url; use Guzzle\Http\EntityBody; use Guzzle\Http\Message\RequestFactory; use Guzzle\Http\QueryString; @@ -47,6 +48,7 @@ class HttpRequestFactoryTest extends \Guzzle\Tests\GuzzleTestCase */ public function testCreatesPutRequests() { + // Test using a string $request = RequestFactory::put('http://www.google.com/path?q=1&v=2', null, 'Data'); $this->assertInstanceOf('Guzzle\\Http\\Message\\EntityEnclosingRequest', $request); $this->assertEquals('PUT', $request->getMethod()); @@ -56,13 +58,25 @@ class HttpRequestFactoryTest extends \Guzzle\Tests\GuzzleTestCase $this->assertEquals('/path', $request->getPath()); $this->assertEquals('/path?q=1&v=2', $request->getResourceUri()); $this->assertInstanceOf('Guzzle\\Http\\EntityBody', $request->getBody()); - $this->assertEquals('Data', (string)$request->getBody()); + $this->assertEquals('Data', (string) $request->getBody()); unset($request); // Test using an EntityBody $request = RequestFactory::put('http://www.google.com/path?q=1&v=2', null, EntityBody::factory('Data')); $this->assertInstanceOf('Guzzle\\Http\\Message\\EntityEnclosingRequest', $request); - $this->assertEquals('Data', (string)$request->getBody()); + $this->assertEquals('Data', (string) $request->getBody()); + + // Test using a resource + $resource = fopen('php://temp', 'w+'); + fwrite($resource, 'Data'); + $request = RequestFactory::put('http://www.google.com/path?q=1&v=2', null, $resource); + $this->assertInstanceOf('Guzzle\\Http\\Message\\EntityEnclosingRequest', $request); + $this->assertEquals('Data', (string) $request->getBody()); + + // Test using an object that can be cast as a string + $request = RequestFactory::put('http://www.google.com/path?q=1&v=2', null, Url::factory('http://www.example.com/')); + $this->assertInstanceOf('Guzzle\\Http\\Message\\EntityEnclosingRequest', $request); + $this->assertEquals('http://www.example.com/', (string) $request->getBody()); } /** @@ -94,7 +108,7 @@ class HttpRequestFactoryTest extends \Guzzle\Tests\GuzzleTestCase public function testCreatesNewPutRequestWithBody() { $request = RequestFactory::put('http://www.google.com/path?q=1&v=2', null, 'Data'); - $this->assertEquals('Data', (string)$request->getBody()); + $this->assertEquals('Data', (string) $request->getBody()); } /**