RestExtension::configureDateRequestListener()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 15
ccs 10
cts 10
cp 1
rs 9.4285
cc 2
eloc 8
nc 2
nop 2
crap 2
1
<?php
2
3
namespace Alchemy\RestBundle\DependencyInjection;
4
5
use Symfony\Component\Config\FileLocator;
6
use Symfony\Component\DependencyInjection\ContainerBuilder;
7
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
8
use Symfony\Component\DependencyInjection\Reference;
9
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
10
11
class RestExtension extends ConfigurableExtension
12
{
13
    /**
14
     * @param array $config
15
     * @param ContainerBuilder $container
16
     * @return RestConfiguration
17
     */
18 12
    public function getConfiguration(array $config, ContainerBuilder $container)
19
    {
20 12
        return new RestConfiguration();
21
    }
22
23
    /**
24
     * @param array $config
25
     * @param ContainerBuilder $container
26
     */
27 12
    protected function loadInternal(array $config, ContainerBuilder $container)
28
    {
29 12
        $loader = new YamlFileLoader($container, new FileLocator(
30
            __DIR__ . '/../Resources/config'
31 12
        ));
32
33 12
        $loader->load('services.yml');
34 12
        $loader->load('listeners.yml');
35
36 12
        $this->configureExceptionListener($config['exceptions'], $container);
37 12
        $this->configureDateRequestListener($config, $container);
38 12
        $this->configurePaginationRequestListener($config, $container);
39 12
        $this->configureSortRequestListener($config, $container);
40 12
    }
41
42
    /**
43
     * @param array $config
44
     * @param ContainerBuilder $container
45
     */
46 12
    protected function configureExceptionListener(array $config, ContainerBuilder $container)
47
    {
48 12
        if (! $config['enabled']) {
49 8
            $container->removeDefinition('alchemy_rest.exception_listener');
50
51 8
            return;
52
        }
53
54 4
        $listenerDefinition = $container->getDefinition('alchemy_rest.exception_listener');
55
56 4
        if ($config['transformer'] !== null) {
57 2
            $listenerDefinition->replaceArgument(0, new Reference($config['transformer']));
58 2
        }
59
60 4
        $listenerDefinition->replaceArgument(2, $config['content_types']);
61 4
    }
62
63
    /**
64
     * @param array $config
65
     * @param ContainerBuilder $container
66
     */
67 12
    protected function configureDateRequestListener(array $config, ContainerBuilder $container)
68
    {
69 12
        if (! $config['dates']['enabled']) {
70 10
            $container->removeDefinition('alchemy_rest.date_request_listener');
71
72 10
            return;
73
        }
74
75 2
        $dateParser = $container->getDefinition('alchemy_rest.date_parser');
76
77 2
        $dateParser->setArguments(array(
78 2
            $config['dates']['timezone'],
79 2
            $config['dates']['format']
80 2
        ));
81 2
    }
82
83
    /**
84
     * @param array $config
85
     * @param ContainerBuilder $container
86
     */
87 12
    protected function configureSortRequestListener(array $config, ContainerBuilder $container)
88
    {
89 12
        if (! $config['sort']['enabled']) {
90 10
            $container->removeDefinition('alchemy_rest.sort_request_listener');
91
92 10
            return;
93
        }
94
95 2
        $sortOptionsFactory = $container->getDefinition('alchemy_rest.sort_options_factory');
96 2
        $sortOptionsFactory->setArguments(array(
97 2
            $config['sort']['sort_parameter'],
98 2
            $config['sort']['direction_parameter'],
99 2
            $config['sort']['multi_sort_parameter']
100 2
        ));
101 2
    }
102
103
    /**
104
     * @param array $config
105
     * @param ContainerBuilder $container
106
     */
107 12
    protected function configurePaginationRequestListener(array $config, ContainerBuilder $container)
108
    {
109 12
        if (! $config['pagination']['enabled']) {
110 10
            $container->removeDefinition('alchemy_rest.paginate_request_listener');
111
112 10
            return;
113
        }
114
115 2
        $paginateOptionsFactory = $container->getDefinition('alchemy_rest.paginate_options_factory');
116
117 2
        $paginateOptionsFactory->setArguments(array(
118 2
            $config['pagination']['offset_parameter'],
119 2
            $config['pagination']['limit_parameter']
120 2
        ));
121 2
    }
122
}
123