PaginationExtension   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 62
rs 10
wmc 9

5 Methods

Rating   Name   Duplication   Size   Complexity  
A addPaginator() 0 11 1
A addAdapters() 0 5 3
A addNormalizers() 0 7 3
A getAlias() 0 3 1
A loadInternal() 0 3 1
1
<?php declare(strict_types=1);
2
3
namespace Mgid\PaginationBundle\DependencyInjection;
4
5
use Mgid\Component\Pagination\Paginator;
6
use Symfony\Component\DependencyInjection\Definition;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
9
10
final class PaginationExtension extends ConfigurableExtension
11
{
12
    public const EXTENSION_ALIAS = 'sb_pagination';
13
14
    /**
15
     * {@inheritdoc}
16
     */
17
    public function getAlias(): string
18
    {
19
        return self::EXTENSION_ALIAS;
20
    }
21
22
    /**
23
     * @param array<mixed>     $configs
24
     * @param ContainerBuilder $container
25
     */
26
    protected function loadInternal(array $configs, ContainerBuilder $container): void
27
    {
28
        $this->addPaginator($configs, $container);
29
    }
30
31
    /**
32
     * @param array<mixed>     $configs
33
     * @param ContainerBuilder $container
34
     */
35
    private function addPaginator(array $configs, ContainerBuilder $container): void
36
    {
37
        $paginator = new Definition(Paginator::class);
38
        $paginator->setPublic(true);
39
        $paginator->setAutowired(true);
40
        $paginator->setAutoconfigured(true);
41
42
        $this->addAdapters($configs, $paginator);
43
        $this->addNormalizers($configs, $paginator);
44
45
        $container->setDefinition(Paginator::class, $paginator);
46
    }
47
48
    /**
49
     * @param array<mixed> $configs
50
     * @param Definition   $paginator
51
     */
52
    private function addAdapters(array $configs, Definition $paginator): void
53
    {
54
        foreach ($configs['adapters'] as $queryBuilderClassName => $adapterClassName) {
55
            if (\class_exists($queryBuilderClassName)) {
56
                $paginator->addMethodCall('addAdapter', [$queryBuilderClassName, $adapterClassName]);
57
            }
58
        }
59
    }
60
61
    /**
62
     * @param array<mixed> $configs
63
     * @param Definition   $paginator
64
     */
65
    private function addNormalizers(array $configs, Definition $paginator): void
66
    {
67
        foreach ($configs['normalizers'] as $queryBuilderClassName => $normalizers) {
68
            foreach ($normalizers as $normalizerClassName) {
69
                $normalizer = new Definition($normalizerClassName);
70
71
                $paginator->addMethodCall('addNormalizer', [$queryBuilderClassName, $normalizer]);
72
            }
73
        }
74
    }
75
}
76