Passed
Pull Request — master (#318)
by Christoffer
03:53
created

ErrorHandler::setMiddleware()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Digia\GraphQL\Error\Handler;
4
5
use Digia\GraphQL\Execution\ExecutionContext;
6
use Digia\GraphQL\Execution\ExecutionException;
7
8
class ErrorHandler implements ErrorHandlerInterface
9
{
10
    /**
11
     * @var ErrorMiddlewareInterface[]
12
     */
13
    protected $middleware;
14
15
    /**
16
     * ErrorHandler constructor.
17
     * @param ErrorMiddlewareInterface[] $middleware
18
     */
19
    public function __construct(array $middleware)
20
    {
21
        $this->setMiddleware($middleware);
22
    }
23
24
    /**
25
     * @inheritdoc
26
     */
27
    public function handle(ExecutionException $exception, ExecutionContext $context)
28
    {
29
        $next = function () {
30
            // NO-OP
31
        };
32
33
        foreach (\array_reverse($this->middleware) as $mw) {
34
            /** @var ErrorMiddlewareInterface $mw */
35
            $next = function (ExecutionException $exception, ExecutionContext $context) use ($mw, $next) {
36
                return $mw->handle($exception, $context, $next);
37
            };
38
        }
39
40
        \call_user_func($next, $exception, $context);
41
    }
42
43
    /**
44
     * @param ErrorMiddlewareInterface $middleware
45
     */
46
    protected function addMiddleware(ErrorMiddlewareInterface $middleware)
47
    {
48
        $this->middleware[] = $middleware;
49
    }
50
51
    /**
52
     * @param ErrorMiddlewareInterface[] $middleware
53
     */
54
    public function setMiddleware(array $middleware): void
55
    {
56
        foreach ($middleware as $mw) {
57
            $this->addMiddleware($mw);
58
        }
59
    }
60
}
61