Test Failed
Pull Request — master (#24)
by Herberto
05:13
created

AddressFactory   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 93.75%

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 4
dl 0
loc 60
ccs 30
cts 32
cp 0.9375
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 1
    public function fromArray(array $data): array
18
    {
19 1
        $addresses = [];
20 1
        foreach ($data as $address) {
21 1
            $addresses[] = $this->buildFromArray($address);
22
        }
23
24 1
        return $addresses;
25
    }
26
27 1
    private function buildFromArray($data): Address
28
    {
29 1
        return new Address(
30 1
            $this->extractStringOrNull('type', $data),
31 1
            $this->extractStringOrNull('bagId', $data),
32 1
            $this->extractStringOrNull('street', $data),
33 1
            $this->extractStringOrNull('houseNumber', $data),
34 1
            $this->extractStringOrNull('houseNumberAddition', $data),
35 1
            $this->extractStringOrNull('postalCode', $data),
36 1
            $this->extractStringOrNull('city', $data),
37 1
            $this->extractStringOrNull('country', $data),
38 1
            $this->extractGpsCoordinates($data),
39 1
            $this->extractRijksDriehoek($data)
40
        );
41
    }
42
43 1
    private function extractGpsCoordinates(array $data): ?GpsCoordinates
44
    {
45 1
        if (array_key_exists('gpsLatitude', $data) && array_key_exists('gpsLongitude', $data)) {
46 1
            return new GpsCoordinates(
47 1
                $this->extractFloatOrNull('gpsLatitude', $data),
48 1
                $this->extractFloatOrNull('gpsLongitude', $data)
49
            );
50
        }
51
52
        return null;
53
    }
54
55 1
    private function extractRijksDriehoek(array $data): ?RijksDriehoek
56
    {
57
        if (
58 1
            array_key_exists('rijksdriehoekX', $data) &&
59 1
            array_key_exists('rijksdriehoekY', $data) &&
60 1
            array_key_exists('rijksdriehoekZ', $data)
61
        ) {
62 1
            return new RijksDriehoek(
63 1
                $this->extractFloatOrNull('rijksdriehoekX', $data),
64 1
                $this->extractFloatOrNull('rijksdriehoekY', $data),
65 1
                $this->extractFloatOrNull('rijksdriehoekZ', $data)
66
            );
67
        }
68
69
        return null;
70
    }
71
}
72