Passed
Pull Request — master (#1)
by Alex
02:35
created

AbstractEventDispatcherFactory   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 47
rs 10
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A getListenerProvider() 0 32 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arp\LaminasEvent\Factory;
6
7
use Arp\LaminasEvent\Factory\Listener\ListenerRegistrationTrait;
8
use Arp\LaminasFactory\AbstractFactory;
9
use Laminas\ServiceManager\Exception\ServiceNotCreatedException;
10
use Laminas\ServiceManager\ServiceLocatorInterface;
11
use Psr\Container\ContainerInterface;
12
use Psr\EventDispatcher\ListenerProviderInterface;
13
14
/**
15
 * @author  Alex Patterson <[email protected]>
16
 * @package Arp\LaminasEvent\Factory
17
 */
18
abstract class AbstractEventDispatcherFactory extends AbstractFactory
19
{
20
    use ListenerRegistrationTrait;
21
22
    /**
23
     * Attempt to resolve or build the AddableListenerProviderInterface
24
     *
25
     * @param ContainerInterface&ServiceLocatorInterface    $container
26
     * @param ListenerProviderInterface|string|array<mixed> $listenerProviderConfig
27
     * @param string                                        $serviceName
28
     *
29
     * @return ListenerProviderInterface
30
     *
31
     * @throws ServiceNotCreatedException
32
     */
33
    protected function getListenerProvider(
34
        ContainerInterface $container,
35
        $listenerProviderConfig,
36
        string $serviceName
37
    ): ListenerProviderInterface {
38
        $listenerProvider = null;
39
40
        if (is_string($listenerProviderConfig)) {
41
            $listenerProvider = $this->getService($container, $listenerProviderConfig, $serviceName);
42
        }
43
44
        if (is_array($listenerProviderConfig)) {
45
            $listenerProvider = $this->buildService(
46
                $container,
47
                ListenerProviderInterface::class,
48
                $listenerProviderConfig,
49
                $serviceName
50
            );
51
        }
52
53
        if (!$listenerProvider instanceof ListenerProviderInterface) {
54
            throw new ServiceNotCreatedException(
55
                sprintf(
56
                    'The listener provider must be an object of type \'%s\'; \'%s\' provided for service \'%s\'',
57
                    ListenerProviderInterface::class,
58
                    is_object($listenerProvider) ? get_class($listenerProvider) : gettype($listenerProvider),
59
                    $serviceName
60
                )
61
            );
62
        }
63
64
        return $listenerProvider;
65
    }
66
}
67