Passed
Pull Request — master (#11)
by
unknown
02:34
created

SearchResult   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 0 Features 2
Metric Value
eloc 23
c 3
b 0
f 2
dl 0
loc 56
ccs 22
cts 22
cp 1
rs 10
wmc 6

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
A fromArray() 0 14 4
A jsonSerialize() 0 7 1
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 10
    private function __construct(
17
        string $domainName,
18
        string $available,
19
        string $premium,
20
        array $priceList,
21
    ) {
22 10
        $this->domainName = $domainName;
23 10
        $this->available  = $available;
24 10
        $this->premium    = $premium;
25 10
        $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 10
    public static function fromArray(array $data): self
35
    {
36 10
        $priceList = [];
37 10
        if (isset($data['price_list']) && is_array($data['price_list'])) {
38 9
            foreach ($data['price_list'] as $priceData) {
39 7
                $priceList[] = PriceList::fromArray($priceData);
40
            }
41
        }
42
43 10
        return new self(
44 10
            $data['domain_name'] ?? '',
45 10
            $data['available'] ?? '',
46 10
            $data['premium'] ?? '',
47 10
            $priceList,
48 10
        );
49
    }
50
51
    /**
52
     * @return array<string, mixed>
53
     */
54 1
    public function jsonSerialize(): array
55
    {
56 1
        return [
57 1
            'domain_name' => $this->domainName,
58 1
            'available'   => $this->available,
59 1
            'premium'     => $this->premium,
60 1
            'price_list'  => array_map(fn ($price) => $price->jsonSerialize(), $this->priceList),
61 1
        ];
62
    }
63
}
64