Completed
Push — develop ( e716a3...960a7a )
by Baptiste
02:59
created

configureSpecificationBuilder()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 2
crap 1
1
<?php
2
declare(strict_types = 1);
3
4
namespace Innmind\Rest\ServerBundle\DependencyInjection;
5
6
use Innmind\Rest\Server\Format\{
7
    Format,
8
    MediaType
9
};
10
use Innmind\Immutable\{
11
    Map,
12
    Set
13
};
14
use Symfony\Component\{
15
    HttpKernel\DependencyInjection\Extension,
16
    DependencyInjection\ContainerBuilder,
17
    DependencyInjection\Loader,
18
    Config\FileLocator
19
};
20
21
final class InnmindRestServerExtension extends Extension
22
{
23
    /**
24
     * {@inheritdoc}
25
     */
26 15
    public function load(array $configs, ContainerBuilder $container)
27
    {
28 15
        $loader = new Loader\YamlFileLoader(
29
            $container,
30 15
            new FileLocator(__DIR__.'/../Resources/config')
31
        );
32 15
        $loader->load('services.yml');
33 15
        $config = $this->processConfiguration(
34 15
            new Configuration,
35
            $configs
36
        );
37
38
        $this
39 15
            ->registerTypes($config['types'], $container)
40 15
            ->registerAcceptFormats($config['accept'], $container)
41 15
            ->registerContentTypeFormats($config['content_type'], $container)
42 15
            ->configureRangeExtractor($config['range_extractor'], $container)
43 15
            ->configureSpecificationBuilder(
44 15
                $config['specification_builder'],
45
                $container
46
            )
47 15
            ->configureHeaderBuilders(
48 15
                $config['response']['header_builders'],
49
                $container
50
            );
51 15
    }
52
53 15
    private function registerTypes(array $types, ContainerBuilder $container): self
54
    {
55 15
        $definition = $container->getDefinition(
56 15
            'innmind_rest_server.definition.types'
57
        );
58
59 15
        foreach ($types as $type) {
60 4
            $definition->addMethodCall(
61 4
                'register',
62 4
                [$type]
63
            );
64
        }
65
66 15
        return $this;
67
    }
68
69 15
    private function registerAcceptFormats(
70
        array $formats,
71
        ContainerBuilder $container
72
    ): self {
73 15
        return $this->registerFormats(
74 15
            'innmind_rest_server.formats.accept',
75
            $formats,
76
            $container
77
        );
78
    }
79
80 15
    private function registerContentTypeFormats(
81
        array $formats,
82
        ContainerBuilder $container
83
    ): self {
84 15
        return $this->registerFormats(
85 15
            'innmind_rest_server.formats.content_type',
86
            $formats,
87
            $container
88
        );
89
    }
90
91 15
    private function registerFormats(
92
        string $service,
93
        array $formats,
94
        ContainerBuilder $container
95
    ): self {
96 15
        $map = new Map('string', Format::class);
97
98 15
        foreach ($formats as $format => $formatConfig) {
99 5
            $mediaTypes = new Set(MediaType::class);
100
101 5
            foreach ($formatConfig['media_types'] as $mediaType => $priority) {
102 5
                $mediaTypes = $mediaTypes->add(
103 5
                    new MediaType($mediaType, $priority)
104
                );
105
            }
106
107 5
            $map = $map->put(
108
                $format,
109 5
                new Format($format, $mediaTypes, $formatConfig['priority'])
110
            );
111
        }
112
113
        $container
114 15
            ->getDefinition($service)
115 15
            ->addArgument($map);
116
117 15
        return $this;
118
    }
119
120 15
    private function configureRangeExtractor(
0 ignored issues
show
Unused Code introduced by
This method is not used, and could be removed.
Loading history...
121
        string $service,
122
        ContainerBuilder $container
123
    ): self {
124 15
        $container->setAlias(
125 15
            'innmind_rest_server.range_extractor',
126
            $service
127
        );
128
129 15
        return $this;
130
    }
131
132 15
    private function configureSpecificationBuilder(
0 ignored issues
show
Unused Code introduced by
This method is not used, and could be removed.
Loading history...
133
        string $service,
134
        ContainerBuilder $container
135
    ): self {
136 15
        $container->setAlias(
137 15
            'innmind_rest_server.specification_builder',
138
            $service
139
        );
140
141 15
        return $this;
142
    }
143
144 15
    private function configureHeaderBuilders(
0 ignored issues
show
Unused Code introduced by
This method is not used, and could be removed.
Loading history...
145
        array $builders,
146
        ContainerBuilder $container
147
    ): self {
148 15
        $container->setAlias(
149 15
            'innmind_rest_server.response.header_builder.list',
150 15
            $builders['list']
151
        );
152
153 15
        return $this;
154
    }
155
}
156