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 9
CRAP Score 5

Importance

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