Passed
Push — master ( fe617e...bc2c58 )
by Carlos C
14:43 queued 11s
created

OriginsTranslator::scrapingOriginFromArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 8
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpCfdi\SatCatalogosPopulate\Origins;
6
7
use DateTimeImmutable;
8
use RuntimeException;
9
10
final class OriginsTranslator
11
{
12
    public function originFromArray(array $data): OriginInterface
13
    {
14
        $type = ($data['type'] ?? '') ?: 'const';
15
        if ('const' === $type) {
16
            return $this->constantOriginFromArray($data);
17
        }
18
        if ('scrap' === $type) {
19
            return $this->scrapingOriginFromArray($data);
20
        }
21
        throw new RuntimeException("Unable to create an origin with type $type");
22
    }
23
24
    public function constantOriginFromArray(array $data): ConstantOrigin
25
    {
26
        return new ConstantOrigin(
27
            strval($data['name'] ?? ''),
28
            strval($data['href'] ?? ''),
29
            $this->dateTimeFromStringOrNull(strval($data['last-update'] ?? '')),
30
            strval($data['destination-file'] ?? '')
31
        );
32
    }
33
34
    public function originToArray(OriginInterface $origin): array
35
    {
36
        if ($origin instanceof ConstantOrigin) {
37
            return $this->constantOriginToArray($origin);
38
        }
39
        if ($origin instanceof ScrapingOrigin) {
40
            return $this->scrapingOriginToArray($origin);
41
        }
42
        throw new RuntimeException(sprintf('Unable to export an origin with type %s', get_class($origin)));
43
    }
44
45
    public function scrapingOriginFromArray(array $data): ScrapingOrigin
46
    {
47
        return new ScrapingOrigin(
48
            strval($data['name'] ?? ''),
49
            strval($data['href'] ?? ''),
50
            strval($data['destination-file'] ?? ''),
51
            strval($data['link-text'] ?? ''),
52
            $this->dateTimeFromStringOrNull(strval($data['last-update'] ?? ''))
53
        );
54
    }
55
56
    public function dateTimeFromStringOrNull(string $value): ?DateTimeImmutable
57
    {
58
        /** @noinspection PhpUnhandledExceptionInspection */
59
        return ('' !== $value) ? new DateTimeImmutable($value) : null;
60
    }
61
62
    public function constantOriginToArray(ConstantOrigin $origin): array
63
    {
64
        return array_filter([
65
            'name' => $origin->name(),
66
            'href' => $origin->url(),
67
            'destination-file' => $origin->destinationFilename(),
68
            'last-update' => ($origin->hasLastVersion()) ? $origin->lastVersion()->format('c') : '',
69
        ]);
70
    }
71
72
    public function scrapingOriginToArray(ScrapingOrigin $origin): array
73
    {
74
        return array_filter([
75
            'name' => $origin->name(),
76
            'type' => 'scrap',
77
            'href' => $origin->url(),
78
            'link-text' => $origin->linkText(),
79
            'destination-file' => $origin->destinationFilename(),
80
            'last-update' => ($origin->hasLastVersion()) ? $origin->lastVersion()->format('c') : '',
81
        ]);
82
    }
83
}
84