FailedMessagesRetryCommandFactory::__invoke()   A
last analyzed

Complexity

Conditions 5
Paths 6

Size

Total Lines 29
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 5.0061

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 16
c 1
b 0
f 0
nc 6
nop 1
dl 0
loc 29
ccs 15
cts 16
cp 0.9375
crap 5.0061
rs 9.4222
1
<?php
2
3
declare(strict_types=1);
4
5
namespace TMV\Messenger\Factory\Command;
6
7
use Psr\Container\ContainerInterface;
8
use Symfony\Component\Messenger\Command\FailedMessagesRetryCommand;
9
use Symfony\Component\Messenger\MessageBusInterface;
10
use TMV\Messenger\Exception\InvalidArgumentException;
11
12
final class FailedMessagesRetryCommandFactory
13
{
14 3
    public function __invoke(ContainerInterface $container): FailedMessagesRetryCommand
15
    {
16 3
        $config = $container->has('config') ? $container->get('config') : [];
17
        /** @var string|null $failureTransportName */
18 3
        $failureTransportName = $config['messenger']['failure_transport'] ?? null;
19
20 3
        if (null === $failureTransportName) {
21 1
            throw new InvalidArgumentException('Invalid failure_transport name');
22
        }
23
24 2
        $eventDispatcher = $config['messenger']['event_dispatcher'] ?? 'messenger.event_dispatcher';
25
26 2
        if (null === $eventDispatcher) {
27
            throw new InvalidArgumentException('Invalid event_dispatcher service');
28
        }
29
30
        /** @var ContainerInterface $receiverLocator */
31 2
        $receiverLocator = $container->get('messenger.receivers_locator');
32
        /** @var MessageBusInterface $messageBus */
33 2
        $messageBus = $container->get('messenger.routable_message_bus');
34
        /** @var string|null $logger */
35 2
        $logger = $config['messenger']['logger'] ?? null;
36
37 2
        return new FailedMessagesRetryCommand(
38 2
            $failureTransportName,
39 2
            $receiverLocator->get($failureTransportName),
40
            $messageBus,
41 2
            $container->get($eventDispatcher),
42 2
            $logger ? $container->get($logger) : null
43
        );
44
    }
45
}
46