ReceiversLocatorFactory::__invoke()   A
last analyzed

Complexity

Conditions 5
Paths 12

Size

Total Lines 25
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 13
c 1
b 0
f 0
nc 12
nop 1
dl 0
loc 25
ccs 12
cts 12
cp 1
crap 5
rs 9.5222
1
<?php
2
3
declare(strict_types=1);
4
5
namespace TMV\Messenger\Factory\Transport\Receiver;
6
7
use function array_key_exists;
8
use function array_keys;
9
use Psr\Container\ContainerInterface;
10
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
11
use TMV\Messenger\Exception\InvalidArgumentException;
12
use Zend\ServiceManager\ServiceManager;
13
14
final class ReceiversLocatorFactory
15
{
16 2
    public function __invoke(ContainerInterface $container): ContainerInterface
17
    {
18 2
        $factories = [];
19
20 2
        $config = $container->has('config') ? $container->get('config') : [];
21 2
        $transportNames = array_keys($config['messenger']['transports'] ?? []);
22 2
        $receivers = $config['messenger']['receivers'] ?? [];
23
24 2
        foreach ($transportNames as $name) {
25
            $factories[(string) $name] = static function () use ($name, $container): ReceiverInterface {
26 1
                return $container->get((string) $name);
27
            };
28
        }
29
30 2
        foreach ($receivers as $name => $serviceName) {
31 2
            if (array_key_exists((string) $name, $factories)) {
32 1
                throw new InvalidArgumentException(sprintf('A receiver named "%s" already exists as a transport name', $name));
33
            }
34
35
            $factories[(string) $name] = static function () use ($serviceName, $container): ReceiverInterface {
36 1
                return $container->get($serviceName);
37
            };
38
        }
39
40 1
        return new ServiceManager(['factories' => $factories]);
41
    }
42
}
43