Test Failed
Pull Request — master (#11)
by Pavel
07:46
created

BankiruJsonRpcServerExtension::load()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
rs 8.8571
c 0
b 0
f 0
cc 2
eloc 16
nc 2
nop 2
1
<?php
2
3
namespace Bankiru\Api\JsonRpc\DependencyInjection;
4
5
use Bankiru\Api\JsonRpc\Listener\NormalizingListener;
6
use Bankiru\Api\Rpc\RpcEvents;
7
use JMS\SerializerBundle\JMSSerializerBundle;
8
use Symfony\Bundle\SecurityBundle\SecurityBundle;
9
use Symfony\Component\Config\FileLocator;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
use Symfony\Component\DependencyInjection\Extension\Extension;
12
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
13
use Symfony\Component\DependencyInjection\Reference;
14
15
final class BankiruJsonRpcServerExtension extends Extension
16
{
17
    /** {@inheritdoc} */
18
    public function load(array $configs, ContainerBuilder $container)
19
    {
20
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
21
        $loader->load('jsonrpc.yml');
22
23
        $config = $this->processConfiguration(new Configuration(), $configs);
24
25
        $this->configureSecurity($container);
26
        $this->configureBuiltinAdapter($container);
27
        $this->configureJmsAdapter($container, $config);
28
29
        if ($this->isConfigEnabled($container, $config['normalizer_listener'])) {
30
            $container->register('jsonrpc_server.response_listener.normalizer', NormalizingListener::class)
31
                      ->setPublic(true)
32
                      ->setArguments([new Reference($config['normalizer_listener']['normalizer'])])
33
                      ->addTag(
34
                          'kernel.event_listener',
35
                          [
36
                              'event'    => RpcEvents::VIEW,
37
                              'method'   => 'onPlainResponse',
38
                              'priority' => 255,
39
                          ]
40
                      );
41
        }
42
    }
43
44
    public function getAlias()
45
    {
46
        return 'jsonrpc_server';
47
    }
48
49
    /**
50
     * @param ContainerBuilder $container
51
     */
52
    private function configureBuiltinAdapter(ContainerBuilder $container)
53
    {
54
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config/adapters'));
55
56
        $loader->load('builtin.yml');
57
    }
58
59
    /**
60
     * @param ContainerBuilder $container
61
     * @param array            $config
62
     */
63
    private function configureJmsAdapter(ContainerBuilder $container, array $config)
64
    {
65
        if (!in_array(JMSSerializerBundle::class, $container->getParameter('kernel.bundles'), true)) {
66
            return;
67
        }
68
69
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config/adapters'));
70
        $loader->load('jms.yml');
71
72
        if (!$this->isConfigEnabled($container, $config['adapters']['jms'])) {
73
            return;
74
        }
75
76
        $container->setParameter('jsonrpc_server.jms.handlers', (array)$config['adapters']['jms']['relation_handlers']);
77
    }
78
79
    /**
80
     * @param ContainerBuilder $container
81
     */
82
    private function configureSecurity(ContainerBuilder $container)
83
    {
84
        if (in_array(SecurityBundle::class, $container->getParameter('kernel.bundles'), true)) {
85
            $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
86
            $loader->load('security.yml');
87
        }
88
    }
89
}
90