MiddlewareFailureStack   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 63
ccs 17
cts 17
cp 1
rs 10
c 0
b 0
f 0
wmc 5

7 Methods

Rating   Name   Duplication   Size   Complexity  
A hp$0 ➔ wrap() 0 18 2
A handleFailure() 0 8 2
A __construct() 0 4 1
A hp$0 ➔ __construct() 0 4 1
A hp$0 ➔ handleFailure() 0 7 2
wrap() 0 18 ?
A build() 0 9 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Queue\Middleware\FailureHandling;
6
7
use Closure;
8
9
final class MiddlewareFailureStack implements MessageFailureHandlerInterface
10
{
11
    /**
12
     * Contains a stack of middleware wrapped in handlers.
13
     * Each handler points to the handler of middleware that will be processed next.
14
     *
15
     * @var MessageFailureHandlerInterface|null stack of middleware
16
     */
17
    private ?MessageFailureHandlerInterface $stack = null;
18
19
    /**
20
     * @param Closure[] $middlewares Middlewares.
21
     * @param MessageFailureHandlerInterface $finishHandler Fallback handler
22
     * events.
23
     */
24 8
    public function __construct(
25
        private array $middlewares,
26
        private MessageFailureHandlerInterface $finishHandler,
27
    ) {
28 8
    }
29
30 8
    public function handleFailure(FailureHandlingRequest $request): FailureHandlingRequest
31
    {
32 8
        if ($this->stack === null) {
33 8
            $this->build();
34
        }
35
36
        /** @psalm-suppress PossiblyNullReference */
37 8
        return $this->stack->handleFailure($request);
0 ignored issues
show
Bug introduced by
The method handleFailure() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

37
        return $this->stack->/** @scrutinizer ignore-call */ handleFailure($request);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
38
    }
39
40 8
    private function build(): void
41
    {
42 8
        $handler = $this->finishHandler;
43
44 8
        foreach ($this->middlewares as $middleware) {
45 7
            $handler = $this->wrap($middleware, $handler);
46
        }
47
48 8
        $this->stack = $handler;
49
    }
50
51
    /**
52
     * Wrap handler by middlewares.
53
     */
54 7
    private function wrap(Closure $middlewareFactory, MessageFailureHandlerInterface $handler): MessageFailureHandlerInterface
55
    {
56 7
        return new class ($middlewareFactory, $handler) implements MessageFailureHandlerInterface {
57
            private ?MiddlewareFailureInterface $middleware = null;
58
59
            public function __construct(
60
                private Closure $middlewareFactory,
61
                private MessageFailureHandlerInterface $handler,
62
            ) {
63 7
            }
64
65
            public function handleFailure(FailureHandlingRequest $request): FailureHandlingRequest
66
            {
67 7
                if ($this->middleware === null) {
68 7
                    $this->middleware = ($this->middlewareFactory)();
69
                }
70
71 7
                return $this->middleware->processFailure($request, $this->handler);
0 ignored issues
show
Bug introduced by
The method processFailure() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

71
                return $this->middleware->/** @scrutinizer ignore-call */ processFailure($request, $this->handler);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
72
            }
73 7
        };
74
    }
75
}
76