Completed
Branch new-version (3f233d)
by Jeroen
02:44
created

AddressParser::convertEmptyStringToNull()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 3
nc 3
nop 1
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace JeroenDesloovere\VCard\Parser\Property;
4
5
use JeroenDesloovere\VCard\Property\Address;
6
use JeroenDesloovere\VCard\Property\NodeInterface;
7
use JeroenDesloovere\VCard\Property\Parameter\Type;
8
9
final class AddressParser implements NodeParserInterface
10
{
11
    public function parseLine(string $value, array $parameters = []): NodeInterface
12
    {
13
        $address = $this->parseAddress($value);
14
15
        if (array_key_exists(Type::getNode(), $parameters)) {
16
            $address->setType($parameters[Type::getNode()]);
17
        }
18
19
        return $address;
20
    }
21
22
    private function parseAddress(string $value): Address
23
    {
24
        @list(
25
            $postOfficeBox,
26
            $extendedAddress,
27
            $streetAddress,
28
            $locality,
29
            $region,
30
            $postalCode,
31
            $countryName
32
        ) = explode(';', $value);
33
34
        $this->convertEmptyStringToNull([
35
            $postOfficeBox,
36
            $extendedAddress,
37
            $streetAddress,
38
            $locality,
39
            $region,
40
            $postalCode,
41
            $countryName
42
        ]);
43
44
        return new Address($postOfficeBox, $extendedAddress, $streetAddress, $locality, $region, $postalCode, $countryName);
45
    }
46
47
    private function convertEmptyStringToNull(array $values): void
48
    {
49
        foreach ($values as &$value) {
50
            if ($value === '') {
51
                $value = null;
52
            }
53
        }
54
    }
55
}
56