Passed
Push — master ( d4f916...00f97a )
by Esteban De La Fuente
04:27
created

DataHandler   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Test Coverage

Coverage 54.55%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 11
c 1
b 0
f 0
dl 0
loc 31
ccs 6
cts 11
cp 0.5455
rs 10
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A handle() 0 29 5
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\Package\Prime\Component\Template\Service;
26
27
use Derafu\Lib\Core\Package\Prime\Component\Template\Contract\DataHandlerInterface;
28
use Derafu\Lib\Core\Package\Prime\Component\Template\Contract\DataInterface;
29
use Derafu\Lib\Core\Support\Store\Contract\RepositoryInterface;
30
31
/**
32
 * Servicio de manejo de datos.
33
 *
34
 * Permite manejar un dato (valor de una variable) y transformarlo (formatear)
35
 * según las reglas definidas para el handler.
36
 */
37
class DataHandler implements DataHandlerInterface
38
{
39 2
    public function handle(
40
        DataInterface $data,
41
        string|array|callable|DataHandlerInterface|RepositoryInterface $handler = null
42
    ): string {
43
        // Si es un string es una máscara de sprint.
44 2
        if (is_string($handler)) {
0 ignored issues
show
introduced by
The condition is_string($handler) is always false.
Loading history...
45
            $data->setFormatted(sprintf($handler, $data->getValue()));
46
        }
47
48
        // Si es un arreglo es el arreglo deberá contener el valor a traducir.
49
        // Si no existe, se entregará el mismo valor como string.
50 2
        elseif (is_array($handler)) {
51
            $data->setFormatted($handler[$data->getValue()] ?? (string) $data->getValue());
52
        }
53
54
        // Si es una función se llama directamente y se retorna su resultado.
55 2
        elseif (is_callable($handler)) {
56
            $data->setFormatted($handler($data->getValue(), $data->getId()));
57
        }
58
59
        // Si es un repositorio se busca la entidad y se retorna el string que
60
        // representa la interfaz. Cada Entidad deberá implementar __toString().
61 2
        elseif ($handler instanceof RepositoryInterface) {
62
            $entity = $handler->find($data->getValue());
63
            $data->setFormatted($entity->__toString());
64
        }
65
66
        // Entregar los datos formateados.
67 2
        return $data->getFormatted();
68
    }
69
}
70