GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 3ac9c0...c55375 )
by Cees-Jan
13s
created

MiddlewareRunner::pre()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 1
1
<?php declare(strict_types=1);
2
3
namespace ApiClients\Foundation\Middleware;
4
5
use Psr\Http\Message\RequestInterface;
6
use Psr\Http\Message\ResponseInterface;
7
use React\Promise\CancellablePromiseInterface;
8
use function React\Promise\resolve;
9
10
final class MiddlewareRunner
11
{
12
    /**
13
     * @var array
14
     */
15
    private $options;
16
17
    /**
18
     * @var MiddlewareInterface[]
19
     */
20
    private $middlewares;
21
22
    /**
23
     * MiddlewareRunner constructor.
24
     * @param array $options
25
     * @param MiddlewareInterface[] $middlewares
26
     */
27
    public function __construct(array $options, MiddlewareInterface ...$middlewares)
28
    {
29
        $this->options = $options;
30
        $this->middlewares = $this->orderMiddlewares(...$middlewares);
31
    }
32
33
    /**
34
     * Sort the middlewares by priority
35
     *
36
     * @param MiddlewareInterface[] $middlewares
37
     * @return array
38
     */
39
    protected function orderMiddlewares(MiddlewareInterface ...$middlewares): array
40
    {
41
        usort($middlewares, function (MiddlewareInterface $left, MiddlewareInterface $right) {
42
            return $right->priority() <=> $left->priority();
43
        });
44
45
        return $middlewares;
46
    }
47
48
    /**
49
     * @param RequestInterface $request
50
     * @return CancellablePromiseInterface
51
     */
52
    public function pre(
53
        RequestInterface $request
54
    ): CancellablePromiseInterface {
55
        $promise = resolve($request);
56
57
        foreach ($this->middlewares as $middleware) {
58
            $requestMiddleware = $middleware;
59
            $promise = $promise->then(function (RequestInterface $request) use ($requestMiddleware) {
60
                return $requestMiddleware->pre($request, $this->options);
61
            });
62
        }
63
64
        return $promise;
65
    }
66
67
    /**
68
     * @param ResponseInterface $response
69
     * @return CancellablePromiseInterface
70
     */
71
    public function post(
72
        ResponseInterface $response
73
    ): CancellablePromiseInterface {
74
        $promise = resolve($response);
75
76
        $this->middlewares = array_reverse($this->middlewares);
77
78
        foreach ($this->middlewares as $middleware) {
79
            $responseMiddleware = $middleware;
80
            $promise = $promise->then(function (ResponseInterface $response) use ($responseMiddleware) {
81
                return $responseMiddleware->post($response, $this->options);
82
            });
83
        }
84
85
        return $promise;
86
    }
87
}
88