mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-12 03:24:26 +01:00
Adding some simple middleware helpers
This commit is contained in:
parent
aab03d40c5
commit
0123fa5420
@ -4,7 +4,6 @@ namespace GuzzleHttp;
|
|||||||
use GuzzleHttp\Cookie\CookieJarInterface;
|
use GuzzleHttp\Cookie\CookieJarInterface;
|
||||||
use GuzzleHttp\Exception\ClientException;
|
use GuzzleHttp\Exception\ClientException;
|
||||||
use GuzzleHttp\Exception\ServerException;
|
use GuzzleHttp\Exception\ServerException;
|
||||||
use GuzzleHttp\Promise\RejectedPromise;
|
|
||||||
use GuzzleHttp\Psr7;
|
use GuzzleHttp\Psr7;
|
||||||
use Psr\Http\Message\RequestInterface;
|
use Psr\Http\Message\RequestInterface;
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
@ -228,4 +227,38 @@ final class Middleware
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Middleware that applies a map function to the request before passing to
|
||||||
|
* the next handler.
|
||||||
|
*
|
||||||
|
* @param callable $fn Function that accepts a RequestInterface and returns
|
||||||
|
* a RequestInterface.
|
||||||
|
* @return callable
|
||||||
|
*/
|
||||||
|
public static function mapRequest(callable $fn)
|
||||||
|
{
|
||||||
|
return function (callable $handler) use ($fn) {
|
||||||
|
return function ($request, array $options) use ($handler, $fn) {
|
||||||
|
return $handler($fn($request), $options);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Middleware that applies a map function to the resolved promise's
|
||||||
|
* response.
|
||||||
|
*
|
||||||
|
* @param callable $fn Function that accepts a ResponseInterface and
|
||||||
|
* returns a ResponseInterface.
|
||||||
|
* @return callable
|
||||||
|
*/
|
||||||
|
public static function mapResponse(callable $fn)
|
||||||
|
{
|
||||||
|
return function (callable $handler) use ($fn) {
|
||||||
|
return function ($request, array $options) use ($handler, $fn) {
|
||||||
|
return $handler($request, $options)->then($fn);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ use GuzzleHttp\Psr7\FnStream;
|
|||||||
use GuzzleHttp\Psr7\Request;
|
use GuzzleHttp\Psr7\Request;
|
||||||
use GuzzleHttp\Psr7\Response;
|
use GuzzleHttp\Psr7\Response;
|
||||||
use Psr\Http\Message\RequestInterface;
|
use Psr\Http\Message\RequestInterface;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
|
||||||
class MiddlewareTest extends \PHPUnit_Framework_TestCase
|
class MiddlewareTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
@ -252,4 +253,34 @@ class MiddlewareTest extends \PHPUnit_Framework_TestCase
|
|||||||
$response = $p->wait();
|
$response = $p->wait();
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testMapsRequest()
|
||||||
|
{
|
||||||
|
$h = new MockHandler([
|
||||||
|
function (RequestInterface $request, array $options) {
|
||||||
|
$this->assertEquals('foo', $request->getHeader('Bar'));
|
||||||
|
return new Response(200);
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
$stack = new HandlerStack($h);
|
||||||
|
$stack->push(Middleware::mapRequest(function (RequestInterface $request) {
|
||||||
|
return $request->withHeader('Bar', 'foo');
|
||||||
|
}));
|
||||||
|
$comp = $stack->resolve();
|
||||||
|
$p = $comp(new Request('PUT', 'http://www.google.com'), []);
|
||||||
|
$this->assertInstanceOf('GuzzleHttp\Promise\FulfilledPromise', $p);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMapsResponse()
|
||||||
|
{
|
||||||
|
$h = new MockHandler([new Response(200)]);
|
||||||
|
$stack = new HandlerStack($h);
|
||||||
|
$stack->push(Middleware::mapResponse(function (ResponseInterface $response) {
|
||||||
|
return $response->withHeader('Bar', 'foo');
|
||||||
|
}));
|
||||||
|
$comp = $stack->resolve();
|
||||||
|
$p = $comp(new Request('PUT', 'http://www.google.com'), []);
|
||||||
|
$this->assertInstanceOf('GuzzleHttp\Promise\FulfilledPromise', $p);
|
||||||
|
$this->assertEquals('foo', $p->wait()->getHeader('Bar'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user