Test Failed
Pull Request — master (#10)
by
unknown
14:44
created

SearchResult::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 1
Metric Value
cc 1
eloc 4
c 2
b 0
f 1
nc 1
nop 4
dl 0
loc 10
ccs 0
cts 5
cp 0
crap 2
rs 10
1
<?php
2
3
namespace Level23\Dynadot\Dto;
4
5
final class SearchResult implements DtoInterface
6
{
7
    public string $domainName;
8
    public string $available;
9
    public string $premium;
10
    /** @var array<PriceList> */
11
    public array $priceList;
12
13
    /**
14
     * @param array<PriceList> $priceList
15
     */
16
    private function __construct(
17
        string $domainName,
18
        string $available,
19
        string $premium,
20
        array $priceList,
21
    ) {
22
        $this->domainName = $domainName;
23
        $this->available = $available;
24
        $this->premium = $premium;
25
        $this->priceList = $priceList;
26
    }
27
28
    /**
29
     * Hydrate from Dynadot's response data.
30
     *
31
     * @param array<string,mixed> $data
32
     * @return self
33
     */
34
    public static function fromArray(array $data): self
35
    {
36
        $priceList = [];
37
        if (isset($data['price_list']) && is_array($data['price_list'])) {
38
            foreach ($data['price_list'] as $priceData) {
39
                $priceList[] = PriceList::fromArray($priceData);
40
            }
41
        }
42
43
        return new self(
44
            $data['domain_name'] ?? '',
45
            $data['available'] ?? '',
46
            $data['premium'] ?? '',
47
            $priceList,
48
        );
49
    }
50
51
    /**
52
     * @return array<string, mixed>
53
     */
54
    public function jsonSerialize(): array
55
    {
56
        return [
57
            'domain_name' => $this->domainName,
58
            'available' => $this->available,
59
            'premium' => $this->premium,
60
            'price_list' => array_map(fn($price) => $price->jsonSerialize(), $this->priceList),
61
        ];
62
    }
63
}