Completed
Pull Request — master (#2)
by Jakub
02:55
created

NoExtension::loadParameters()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 3
nc 2
nop 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Zalas\Behat\NoExtension\ServiceContainer;
5
6
use Behat\Testwork\ServiceContainer\Extension;
7
use Behat\Testwork\ServiceContainer\ExtensionManager;
8
use Psr\Container\ContainerInterface;
9
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
10
use Symfony\Component\Config\FileLocator;
11
use Symfony\Component\DependencyInjection\ContainerBuilder;
12
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
13
use Symfony\Component\DependencyInjection\Reference;
14
use Zalas\Behat\NoExtension\Context\Argument\ServiceArgumentResolver;
15
16
class NoExtension implements Extension
17
{
18
    public function process(ContainerBuilder $container)
19
    {
20
    }
21
22
    public function getConfigKey()
23
    {
24
        return 'no';
25
    }
26
27
    public function initialize(ExtensionManager $extensionManager)
28
    {
29
    }
30
31
    public function configure(ArrayNodeDefinition $builder)
32
    {
33
        $config = $builder->children();
34
        $config->arrayNode('imports')->prototype('scalar');
35
        $config->arrayNode('parameters')->prototype('variable');
36
        $config->booleanNode('argument_resolver');
37
    }
38
39
    public function load(ContainerBuilder $container, array $config)
40
    {
41
        $this->loadImports($container, $config);
42
        $this->loadParameters($container, $config);
43
        $this->loadArgumentResolver($container, $config);
44
    }
45
46
    private function loadImports(ContainerBuilder $container, array $config): void
47
    {
48
        $basePath = $container->getParameter('paths.base');
49
        $yamlLoader = new YamlFileLoader($container, new FileLocator($basePath));
50
51
        foreach ($config['imports'] as $file) {
52
            $file = \str_replace('%paths.base%', $basePath, $file);
53
            $yamlLoader->load($file);
54
        }
55
    }
56
57
    private function loadParameters(ContainerBuilder $container, array $config): void
58
    {
59
        foreach ($config['parameters'] as $name => $value) {
60
            $container->setParameter($name, $value);
61
        }
62
    }
63
64
    private function loadArgumentResolver(ContainerBuilder $container, array $config): void
65
    {
66
        if ($config['argument_resolver']) {
67
            $container->register(ServiceArgumentResolver::class)
68
                ->addArgument(new Reference(ContainerInterface::class))
69
                ->addTag('context.argument_resolver');
70
        }
71
    }
72
}
73