public function __invoke(callable $handler)
{
return function (\Psr\Http\Message\RequestInterface $request, array $config) use($handler) {
return $handler($request, $config)->then(function (\Psr\Http\Message\ResponseInterface $response) use($request) {
$responses = [];
if (file_exists($this->cassette)) {
$responses = json_decode(file_get_contents($this->cassette), true);
}
$cassette = $response->withAddedHeader('X-VCR-Recording', time());
$responses[] = ['status' => $cassette->getStatusCode(), 'headers' => $cassette->getHeaders(), 'body' => (string) $cassette->getBody(), 'version' => $cassette->getProtocolVersion(), 'reason' => $cassette->getReasonPhrase()];
file_put_contents($this->cassette, json_encode($responses, JSON_PRETTY_PRINT));
return $response;
}, function (\Exception $reason) {
return new \GuzzleHttp\Promise\RejectedPromise($reason);
});
};
}