Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. MockHandler.php

function MockHandler::__invoke

File

vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php, line 80

Class

MockHandler
Handler that returns responses or throw exceptions from a queue.

Namespace

GuzzleHttp\Handler

Code

public function __invoke(RequestInterface $request, array $options) : PromiseInterface {
    if (!$this->queue) {
        throw new \OutOfBoundsException('Mock queue is empty');
    }
    if (isset($options['delay']) && \is_numeric($options['delay'])) {
        \usleep((int) $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 = $response($request, $options);
    }
    $response = $response instanceof \Throwable ? P\Create::rejectionFor($response) : P\Create::promiseFor($response);
    return $response->then(function (?ResponseInterface $value) use ($request, $options) {
        $this->invokeStats($request, $options, $value);
        if ($this->onFulfilled) {
            ($this->onFulfilled)($value);
        }
        if ($value !== null && 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 StreamInterface) {
                $sink->write($contents);
            }
        }
        return $value;
    }, function ($reason) use ($request, $options) {
        $this->invokeStats($request, $options, null, $reason);
        if ($this->onRejected) {
            ($this->onRejected)($reason);
        }
        return P\Create::rejectionFor($reason);
    });
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal