ReceiversLocatorFactory   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 13
c 1
b 0
f 0
dl 0
loc 27
ccs 12
cts 12
cp 1
rs 10
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 25 5
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