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

DataHandler   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Test Coverage

Coverage 45.45%

Importance

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

1 Method

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