GuzzleHttp\Handler\MockHandler::__invoke PHP Method

__invoke() public method

public __invoke ( Psr\Http\Message\RequestInterface $request, array $options )
$request Psr\Http\Message\RequestInterface
$options array
    public function __invoke(RequestInterface $request, array $options)
    {
        if (!$this->queue) {
            throw new \OutOfBoundsException('Mock queue is empty');
        }
        if (isset($options['delay'])) {
            usleep($options['delay'] * 1000);
        }
        $this->lastRequest = $request;
        $this->lastOptions = $options;
        $response = array_shift($this->queue);
        if (isset($options['on_headers'])) {
            if (!is_callable($options['on_headers'])) {
                throw new \InvalidArgumentException('on_headers must be callable');
            }
            try {
                $options['on_headers']($response);
            } catch (\Exception $e) {
                $msg = 'An error was encountered during the on_headers event';
                $response = new RequestException($msg, $request, $response, $e);
            }
        }
        if (is_callable($response)) {
            $response = call_user_func($response, $request, $options);
        }
        $response = $response instanceof \Exception ? new RejectedPromise($response) : \GuzzleHttp\Promise\promise_for($response);
        return $response->then(function ($value) use($request, $options) {
            $this->invokeStats($request, $options, $value);
            if ($this->onFulfilled) {
                call_user_func($this->onFulfilled, $value);
            }
            if (isset($options['sink'])) {
                $contents = (string) $value->getBody();
                $sink = $options['sink'];
                if (is_resource($sink)) {
                    fwrite($sink, $contents);
                } elseif (is_string($sink)) {
                    file_put_contents($sink, $contents);
                } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) {
                    $sink->write($contents);
                }
            }
            return $value;
        }, function ($reason) use($request, $options) {
            $this->invokeStats($request, $options, null, $reason);
            if ($this->onRejected) {
                call_user_func($this->onRejected, $reason);
            }
            return new RejectedPromise($reason);
        });
    }