Test Failed
Push — master ( 49be21...52345e )
by Esteban De La Fuente
05:38
created

DocumentBatch::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 6
ccs 3
cts 3
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * LibreDTE: Biblioteca PHP (Núcleo).
7
 * Copyright (C) LibreDTE <https://www.libredte.cl>
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
20
 * GNU junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace libredte\lib\Core\Package\Billing\Component\Document\Support;
26
27
use Derafu\Lib\Core\Support\Store\Contract\DataContainerInterface;
28
use Derafu\Lib\Core\Support\Store\DataContainer;
29
use libredte\lib\Core\Package\Billing\Component\Document\Contract\DocumentBatchInterface;
30
31
/**
32
 * Contenedor de datos para procesamiento en lote de documentos tributarios.
33
 *
34
 * Permite "mover" varios documentos, junto a otros datos asociados, por métodos
35
 * de manera sencilla y, sobre todo, extensible.
36
 */
37
class DocumentBatch implements DocumentBatchInterface
38
{
39
    /**
40
     * Ruta al archivo que contiene el lote de documentos que se deben procesar.
41
     *
42
     * @var string
43
     */
44
    private string $file;
45
46
    /**
47
     * Opciones para los workers asociados al procesamiento en lote de
48
     * documentos.
49
     *
50
     * Se definen los siguientes índices para las opciones:
51
     *
52
     *   - `batch_processor`: Opciones para el procesador en lote de documentos.
53
     *   - `builder`: Opciones para los constructores.
54
     *   - `normalizer`: Opciones para los normalizadores.
55
     *   - `parser`: Opciones para los analizadores sintácticos.
56
     *   - `renderer`: Opciones para los renderizadores.
57
     *   - `sanitizer`: Opciones para los sanitizadores.
58
     *   - `validator`: Opciones para los validadores.
59
     *
60
     * Se usarán las opciones por defecto en cada worker si no se indican los
61
     * índices en el arreglo $options.
62
     *
63
     * @var DataContainerInterface|null
64
     */
65
    private ?DataContainerInterface $options;
66
67
    /**
68
     * Reglas de esquema de las opciones del lote de documentos.
69
     *
70
     * El formato del esquema es el utilizado por
71
     * Symfony\Component\OptionsResolver\OptionsResolver.
72
     *
73
     * Acá solo se indicarán los índices que deben pueden existir en las
74
     * opciones. No se define el esquema de cada opción pues cada clase que
75
     * utilice estas opciones deberá resolver y validar sus propias opciones.
76
     *
77
     * @var array
78
     */
79
    protected array $optionsSchema = [
80
        'batch_processor' => [
81
            'types' => 'array',
82
            'default' => [],
83
        ],
84
        'builder' => [
85
            'types' => 'array',
86
            'default' => [],
87
        ],
88
        'normalizer' => [
89
            'types' => 'array',
90
            'default' => [],
91
        ],
92
        'parser' => [
93
            'types' => 'array',
94
            'default' => [],
95
        ],
96
        'renderer' => [
97
            'types' => 'array',
98
            'default' => [],
99
        ],
100
        'sanitizer' => [
101
            'types' => 'array',
102
            'default' => [],
103
        ],
104
        'validator' => [
105
            'types' => 'array',
106
            'default' => [],
107
        ],
108
    ];
109
110 1
    public function __construct(
111
        string $file,
112
        array|DataContainerInterface|null $options = null
113
    ) {
114 1
        $this->file = $file;
115 1
        $this->setOptions($options);
116
    }
117
118
    /**
119
     * {@inheritdoc}
120
     */
121
    public function getFile(): string
122
    {
123
        return $this->file;
124
    }
125
126
    /**
127
     * {@inheritdoc}
128
     */
129 1
    public function setOptions(array|DataContainerInterface|null $options): static
130
    {
131 1
        if ($options === null) {
0 ignored issues
show
introduced by
The condition $options === null is always false.
Loading history...
132 1
            $options = [];
133
        }
134
135 1
        if (is_array($options)) {
0 ignored issues
show
introduced by
The condition is_array($options) is always true.
Loading history...
136 1
            $options = new DataContainer($options, $this->optionsSchema);
137
        }
138
139 1
        $this->options = $options;
140
141 1
        return $this;
142
    }
143
144
    /**
145
     * {@inheritdoc}
146
     */
147 1
    public function getOptions(): ?DataContainerInterface
148
    {
149 1
        return $this->options;
150
    }
151
}
152