Completed
Push — master ( 722c99...fbdeaf )
by Dawid
01:59
created

Configuration::getOverridableHttpMethods()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 10
cts 10
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Spiechu\SymfonyCommonsBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
6
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
7
use Symfony\Component\Config\Definition\ConfigurationInterface;
8
use Symfony\Component\HttpFoundation\Request;
9
10
class Configuration implements ConfigurationInterface
11
{
12
    /**
13
     * {@inheritdoc}
14
     *
15
     * @throws \RuntimeException
16
     */
17 11
    public function getConfigTreeBuilder(): TreeBuilder
18
    {
19 11
        $treeBuilder = new TreeBuilder();
20 11
        $rootNode = $treeBuilder->root('spiechu_symfony_commons');
21
22 11
        $this->addGetMethodOverride($rootNode);
23 11
        $this->addResponseSchemaValidation($rootNode);
24
25 11
        return $treeBuilder;
26
    }
27
28 11
    protected function addGetMethodOverride(ArrayNodeDefinition $rootNode): void
29
    {
30 11
        $overridableHttpMethods = $this->getOverridableHttpMethods();
31
        $defaultOverridedHttpMethods = [
32 11
            Request::METHOD_DELETE,
33 11
            Request::METHOD_POST,
34 11
            Request::METHOD_PUT,
35
        ];
36
37
        $rootNode
38 11
            ->children()
39 11
                ->arrayNode('get_method_override')
40 11
                    ->addDefaultsIfNotSet()
41 11
                    ->children()
42 11
                        ->booleanNode('enabled')->defaultFalse()->end()
43 11
                        ->scalarNode('listener_service_id')
44 11
                            ->cannotBeEmpty()
45 11
                            ->defaultValue('spiechu_symfony_commons.event_listener.get_method_override_listener')
46 11
                        ->end()
47 11
                        ->scalarNode('query_param_name')
48 11
                            ->cannotBeEmpty()
49 11
                            ->defaultValue('_method')
50 11
                            ->validate()
51
                                ->ifTrue(function ($methodName): bool {
52 1
                                    return !is_string($methodName);
53 11
                                })
54 11
                                ->thenInvalid('Not a string provided')
55 11
                            ->end()
56 11
                        ->end()
57 11
                        ->arrayNode('allow_methods_override')
58 11
                            ->beforeNormalization()
59 11
                                ->ifString()->castToArray()
60 11
                            ->end()
61 11
                            ->defaultValue($defaultOverridedHttpMethods)
62 11
                            ->prototype('scalar')
63 11
                                ->validate()
64 11
                                    ->ifNotInArray($overridableHttpMethods)
65 11
                                    ->thenInvalid(sprintf(
66 11
                                        'Invalid methods to override provided, known are: "%s"',
67 11
                                        implode(', ', $overridableHttpMethods)
68
                                    ))
69 11
                                ->end()
70 11
                            ->end()
71 11
                            ->beforeNormalization()
72 11
                                ->ifArray()
73 11
                                ->then(function (array $methods): array {
74 3
                                    return array_unique(array_map('strtoupper', $methods));
75 11
                                })
76 11
                            ->end()
77 11
                        ->end()
78 11
                    ->end()
79 11
                ->end()
80 11
            ->end()
81 11
        ->end();
82 11
    }
83
84 11
    protected function addResponseSchemaValidation(ArrayNodeDefinition $rootNode): void
85
    {
86
        $rootNode
87 11
            ->children()
88 11
                ->arrayNode('response_schema_validation')
89 11
                    ->addDefaultsIfNotSet()
90 11
                    ->children()
91 11
                        ->booleanNode('enabled')->defaultFalse()->end()
92 11
                        ->booleanNode('throw_exception_when_format_not_found')->defaultTrue()->end()
93 11
                        ->scalarNode('failed_schema_check_listener_service_id')
94 11
                            ->defaultValue('spiechu_symfony_commons.event_listener.failed_schema_check_listener')
95 11
                        ->end()
96 11
                        ->booleanNode('disable_json_check_schema_subscriber')->defaultFalse()->end()
97 11
                    ->end()
98 11
                ->end()
99 11
            ->end()
100 11
        ->end();
101 11
    }
102
103
    /**
104
     * @return string[]
105
     */
106 11
    protected function getOverridableHttpMethods(): array
107
    {
108
        return [
109 11
            Request::METHOD_CONNECT,
110 11
            Request::METHOD_DELETE,
111 11
            Request::METHOD_HEAD,
112 11
            Request::METHOD_OPTIONS,
113 11
            Request::METHOD_PATCH,
114 11
            Request::METHOD_POST,
115 11
            Request::METHOD_PURGE,
116 11
            Request::METHOD_TRACE,
117 11
            Request::METHOD_PUT,
118
        ];
119
    }
120
}
121