Completed
Push — master ( 123428...b17853 )
by David
7s
created

DiscoveryPass::process()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 13
rs 9.4285
cc 3
eloc 7
nc 3
nop 1
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