InnmindRestServerExtension   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 108
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 6
dl 0
loc 108
ccs 51
cts 51
cp 1
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A registerTypes() 0 15 2
A registerAcceptFormats() 0 10 1
A registerContentTypeFormats() 0 10 1
B load() 0 26 1
A configureRangeExtractor() 0 11 1
A configureSpecificationBuilder() 0 11 1
A configureHeaderBuilders() 0 13 2
1
<?php
2
declare(strict_types = 1);
3
4
namespace Innmind\Rest\ServerBundle\DependencyInjection;
5
6
use Symfony\Component\{
7
    HttpKernel\DependencyInjection\Extension,
8
    DependencyInjection\ContainerBuilder,
9
    DependencyInjection\Loader,
10
    Config\FileLocator
11
};
12
13
final class InnmindRestServerExtension extends Extension
14
{
15
    /**
16
     * {@inheritdoc}
17
     */
18 64
    public function load(array $configs, ContainerBuilder $container)
19
    {
20 64
        $loader = new Loader\YamlFileLoader(
21 64
            $container,
22 64
            new FileLocator(__DIR__.'/../Resources/config')
23
        );
24 64
        $loader->load('services.yml');
25 64
        $config = $this->processConfiguration(
26 64
            new Configuration,
27 64
            $configs
28
        );
29
30
        $this
31 64
            ->registerTypes($config['types'], $container)
32 64
            ->registerAcceptFormats($config['accept'], $container)
33 64
            ->registerContentTypeFormats($config['content_type'], $container)
34 64
            ->configureRangeExtractor($config['range_extractor'], $container)
35 64
            ->configureSpecificationBuilder(
36 64
                $config['specification_builder'],
37 64
                $container
38
            )
39 64
            ->configureHeaderBuilders(
40 64
                $config['response']['header_builders'],
41 64
                $container
42
            );
43 64
    }
44
45 64
    private function registerTypes(array $types, ContainerBuilder $container): self
46
    {
47 64
        $definition = $container->getDefinition(
48 64
            'innmind_rest_server.definition.types'
49
        );
50
51 64
        foreach ($types as $type) {
52 8
            $definition->addMethodCall(
53 8
                'register',
54 8
                [$type]
55
            );
56
        }
57
58 64
        return $this;
59
    }
60
61 64
    private function registerAcceptFormats(
62
        array $formats,
63
        ContainerBuilder $container
64
    ): self {
65
        $container
66 64
            ->getDefinition('innmind_rest_server.formats.accept')
67 64
            ->replaceArgument(0, $formats);
68
69 64
        return $this;
70
    }
71
72 64
    private function registerContentTypeFormats(
73
        array $formats,
74
        ContainerBuilder $container
75
    ): self {
76
        $container
77 64
            ->getDefinition('innmind_rest_server.formats.content_type')
78 64
            ->replaceArgument(0, $formats);
79
80 64
        return $this;
81
    }
82
83 64
    private function configureRangeExtractor(
84
        string $service,
85
        ContainerBuilder $container
86
    ): self {
87 64
        $container->setAlias(
88 64
            'innmind_rest_server.range_extractor',
89 64
            $service
90
        );
91
92 64
        return $this;
93
    }
94
95 64
    private function configureSpecificationBuilder(
96
        string $service,
97
        ContainerBuilder $container
98
    ): self {
99 64
        $container->setAlias(
100 64
            'innmind_rest_server.specification_builder',
101 64
            $service
102
        );
103
104 64
        return $this;
105
    }
106
107 64
    private function configureHeaderBuilders(
108
        array $builders,
109
        ContainerBuilder $container
110
    ): self {
111 64
        foreach ($builders as $action => $value) {
112 64
            $container->setAlias(
113 64
                'innmind_rest_server.response.header_builder.'.$action,
114 64
                $value
115
            );
116
        }
117
118 64
        return $this;
119
    }
120
}
121