Passed
Push — master ( 737114...d97858 )
by Esteban De La Fuente
04:54
created

AbstractServiceRegistry::getBasePath()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
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 17
    public function register(ContainerBuilder $container): void
64
    {
65
        // Primero registrar las dependencias.
66 17
        foreach ($this->getRegistries() as $registryClass) {
67
            (new $registryClass())->register($container);
68
        }
69
70
        // Luego registrar los servicios propios.
71 17
        $loader = new YamlFileLoader(
72 17
            $container,
73 17
            new FileLocator($this->getConfigPath())
74 17
        );
75 17
        foreach ($this->servicesFiles as $servicesFile) {
76 17
            $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 17
    private function getRegistries(): array
86
    {
87 17
        return $this->registries;
88
    }
89
90
    /**
91
     * Obtiene la ruta base del registry.
92
     *
93
     * @return string
94
     */
95 12
    private function getBasePath(): string
96
    {
97 12
        return dirname(__DIR__, 3);
98
    }
99
100
    /**
101
     * Obtiene la ruta de configuración.
102
     *
103
     * @return string
104
     */
105 17
    private function getConfigPath(): string
106
    {
107 17
        return $this->configPath ?? $this->getBasePath() . '/config';
108
    }
109
}
110