Completed
Pull Request — master (#81)
by Tobias
06:03
created

DiscoveryPass   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 2
Bugs 1 Features 0
Metric Value
wmc 3
c 2
b 1
f 0
lcom 1
cbo 2
dl 0
loc 43
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A process() 0 13 3
1
<?php
2
3
namespace Http\HttplugBundle\DependencyInjection\Compiler;
4
5
use Http\Client\HttpClient;
6
use Http\Discovery\HttpClientDiscovery;
7
use Http\Discovery\MessageFactoryDiscovery;
8
use Http\Discovery\StreamFactoryDiscovery;
9
use Http\Discovery\UriFactoryDiscovery;
10
use Http\Message\MessageFactory;
11
use Http\Message\StreamFactory;
12
use Http\Message\UriFactory;
13
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
14
use Symfony\Component\DependencyInjection\ContainerBuilder;
15
16
/**
17
 * Adds fallback and discovery services.
18
 *
19
 * @author Márk Sági-Kazár <[email protected]>
20
 */
21
final class DiscoveryPass implements CompilerPassInterface
22
{
23
    /**
24
     * Fallback services and classes.
25
     *
26
     * @var array
27
     */
28
    private $services = [
29
        'client' => HttpClient::class,
30
        'message_factory' => MessageFactory::class,
31
        'uri_factory' => UriFactory::class,
32
        'stream_factory' => StreamFactory::class,
33
    ];
34
35
    /**
36
     * Factories by type.
37
     *
38
     * @var array
39
     */
40
    private $factoryClasses = [
41
        'client' => HttpClientDiscovery::class,
42
        'message_factory' => MessageFactoryDiscovery::class,
43
        'uri_factory' => UriFactoryDiscovery::class,
44
        'stream_factory' => StreamFactoryDiscovery::class,
45
    ];
46
47
    /**
48
     * {@inheritdoc}
49
     */
50
    public function process(ContainerBuilder $container)
51
    {
52
        foreach ($this->services as $service => $class) {
53
            $serviceId = sprintf('httplug.%s.default', $service);
54
55
            if (false === $container->has($serviceId)) {
56
                // Register and create factory for service
57
                $definition = $container->register($serviceId, $class);
58
                $definition->setFactory([$this->factoryClasses[$service], 'find']);
59
                $definition->addArgument($class);
60
            }
61
        }
62
    }
63
}
64