Test Failed
Push — master ( 1352e7...0da4e2 )
by Esteban De La Fuente
03:30
created

AbstractServiceRegistry   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 15
c 0
b 0
f 0
dl 0
loc 73
ccs 0
cts 15
cp 0
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getBasePath() 0 3 1
A getConfigPath() 0 3 1
A register() 0 14 3
A getRegistries() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Derafu: Biblioteca PHP (Núcleo).
7
 * Copyright (C) Derafu <https://www.derafu.org>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la Licencia Pública General Affero de GNU publicada por
11
 * la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o
12
 * (a su elección) cualquier versión posterior de la misma.
13
 *
14
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN
15
 * GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
16
 * PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública
17
 * General Affero de GNU para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la Licencia Pública General Affero de GNU
20
 * junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace Derafu\Lib\Core\Foundation\Abstract;
26
27
use Derafu\Lib\Core\Foundation\Contract\ServiceRegistryInterface;
28
use Symfony\Component\Config\FileLocator;
29
use Symfony\Component\DependencyInjection\ContainerBuilder;
30
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
31
32
/**
33
 * Clase basa para registrar servicios en el contenedor de dependencias.
34
 */
35
class AbstractServiceRegistry implements ServiceRegistryInterface
36
{
37
    /**
38
     * Listado con las clases de los ServiceRegistry de los que este depende.
39
     *
40
     * @var array<class-string>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<class-string> at position 2 could not be parsed: Unknown type name 'class-string' at position 2 in array<class-string>.
Loading history...
41
     */
42
    protected $registries = [];
43
44
    /**
45
     * Ruta hacia la configuración de la aplicación.
46
     *
47
     * @var string
48
     */
49
    protected string $configPath;
50
51
    /**
52
     * Listado de archivos de configuración que se deben cargar.
53
     *
54
     * @var array
55
     */
56
    protected array $servicesFiles = [
57
        'services.yaml',
58
    ];
59
60
    /**
61
     * {@inheritDoc}
62
     */
63
    public function register(ContainerBuilder $container): void
64
    {
65
        // Primero registrar las dependencias.
66
        foreach ($this->getRegistries() as $registryClass) {
67
            (new $registryClass())->register($container);
68
        }
69
70
        // Luego registrar los servicios propios.
71
        $loader = new YamlFileLoader(
72
            $container,
73
            new FileLocator($this->getConfigPath())
74
        );
75
        foreach ($this->servicesFiles as $servicesFile) {
76
            $loader->load($servicesFile);
77
        }
78
    }
79
80
    /**
81
     * Obtiene los registros de servicios de las dependencias.
82
     *
83
     * @return array<class-string>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<class-string> at position 2 could not be parsed: Unknown type name 'class-string' at position 2 in array<class-string>.
Loading history...
84
     */
85
    private function getRegistries(): array
86
    {
87
        return $this->registries;
88
    }
89
90
    /**
91
     * Obtiene la ruta base del registry.
92
     *
93
     * @return string
94
     */
95
    private function getBasePath(): string
96
    {
97
        return dirname(__DIR__, 3);
98
    }
99
100
    /**
101
     * Obtiene la ruta de configuración.
102
     *
103
     * @return string
104
     */
105
    private function getConfigPath(): string
106
    {
107
        return $this->configPath ?? $this->getBasePath() . '/config';
108
    }
109
}
110