AddressFactory   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 4
dl 0
loc 60
ccs 32
cts 32
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A fromArray() 0 9 2
A buildFromArray() 0 15 1
A extractGpsCoordinates() 0 11 3
A extractRijksDriehoek() 0 16 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Werkspot\KvkApi\Client\Factory\Profile\Company;
6
7
use Werkspot\KvkApi\Client\Factory\AbstractFactory;
8
use Werkspot\KvkApi\Client\Profile\Company\Address;
9
use Werkspot\KvkApi\Client\Profile\Company\Address\GpsCoordinates;
10
use Werkspot\KvkApi\Client\Profile\Company\Address\RijksDriehoek;
11
12
final class AddressFactory extends AbstractFactory implements AddressFactoryInterface
13
{
14
    /**
15
     * @return Address[]
16
     */
17 32
    public function fromArray(array $data): array
18
    {
19 32
        $addresses = [];
20 32
        foreach ($data as $address) {
21 32
            $addresses[] = $this->buildFromArray($address);
22
        }
23
24 32
        return $addresses;
25
    }
26
27 32
    private function buildFromArray($data): Address
28
    {
29 32
        return new Address(
30 32
            $this->extractStringOrNull('type', $data),
31 32
            $this->extractStringOrNull('bagId', $data),
32 32
            $this->extractStringOrNull('street', $data),
33 32
            $this->extractStringOrNull('houseNumber', $data),
34 32
            $this->extractStringOrNull('houseNumberAddition', $data),
35 32
            $this->extractStringOrNull('postalCode', $data),
36 32
            $this->extractStringOrNull('city', $data),
37 32
            $this->extractStringOrNull('country', $data),
38 32
            $this->extractGpsCoordinates($data),
39 32
            $this->extractRijksDriehoek($data)
40
        );
41
    }
42
43 32
    private function extractGpsCoordinates(array $data): ?GpsCoordinates
44
    {
45 32
        if (array_key_exists('gpsLatitude', $data) && array_key_exists('gpsLongitude', $data)) {
46 16
            return new GpsCoordinates(
47 16
                $this->extractFloatOrNull('gpsLatitude', $data),
48 16
                $this->extractFloatOrNull('gpsLongitude', $data)
49
            );
50
        }
51
52 23
        return null;
53
    }
54
55 32
    private function extractRijksDriehoek(array $data): ?RijksDriehoek
56
    {
57
        if (
58 32
            array_key_exists('rijksdriehoekX', $data) &&
59 32
            array_key_exists('rijksdriehoekY', $data) &&
60 32
            array_key_exists('rijksdriehoekZ', $data)
61
        ) {
62 16
            return new RijksDriehoek(
63 16
                $this->extractFloatOrNull('rijksdriehoekX', $data),
64 16
                $this->extractFloatOrNull('rijksdriehoekY', $data),
65 16
                $this->extractFloatOrNull('rijksdriehoekZ', $data)
66
            );
67
        }
68
69 23
        return null;
70
    }
71
}
72