Completed
Pull Request — master (#345)
by
unknown
25:32 queued 12:36
created

Address   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 128
Duplicated Lines 14.06 %

Coupling/Cohesion

Components 1
Dependencies 10

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 10
dl 18
loc 128
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
A getCountry() 0 4 1
A getLocality() 0 4 1
A getPostalCode() 0 4 1
A getStreetAddress() 0 4 1
A serialize() 9 9 1
A deserialize() 0 9 1
A toJsonLd() 9 9 1
A sameAs() 0 4 1
A fromUdb3Model() 0 9 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace CultuurNet\UDB3\Address;
4
5
use Broadway\Serializer\SerializableInterface;
6
use CultuurNet\UDB3\JsonLdSerializableInterface;
7
use CultuurNet\UDB3\Model\ValueObject\Geography\Address as Udb3ModelAddress;
8
use ValueObjects\Geography\Country;
9
use ValueObjects\Geography\CountryCode;
10
11
/**
12
 * Value object for address information.
13
 */
14
class Address implements SerializableInterface, JsonLdSerializableInterface
15
{
16
    /**
17
     * @var string
18
     */
19
    protected $countryCode;
20
21
    /**
22
     * @var Locality
23
     */
24
    protected $locality;
25
26
    /**
27
     * @var PostalCode
28
     */
29
    protected $postalCode;
30
31
    /**
32
     * @var Street
33
     */
34
    protected $streetAddress;
35
36
    public function __construct(
37
        Street $streetAddress,
38
        PostalCode $postalCode,
39
        Locality $locality,
40
        Country $country
41
    ) {
42
        $this->streetAddress = $streetAddress;
43
        $this->postalCode = $postalCode;
44
        $this->locality = $locality;
45
        $this->countryCode = $country->getCode()->toNative();
46
    }
47
48
    /**
49
     * @return Country
50
     */
51
    public function getCountry()
52
    {
53
        return Country::fromNative($this->countryCode);
54
    }
55
56
    /**
57
     * @return Locality
58
     */
59
    public function getLocality()
60
    {
61
        return $this->locality;
62
    }
63
64
    /**
65
     * @return PostalCode
66
     */
67
    public function getPostalCode()
68
    {
69
        return $this->postalCode;
70
    }
71
72
    /**
73
     * @return Street
74
     */
75
    public function getStreetAddress()
76
    {
77
        return $this->streetAddress;
78
    }
79
80
    /**
81
     * {@inheritdoc}
82
     */
83 View Code Duplication
    public function serialize()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
84
    {
85
        return [
86
          'streetAddress' => $this->streetAddress->toNative(),
87
          'postalCode' => $this->postalCode->toNative(),
88
          'addressLocality' => $this->locality->toNative(),
89
          'addressCountry' => $this->countryCode,
90
        ];
91
    }
92
93
    /**
94
     * {@inheritdoc}
95
     */
96
    public static function deserialize(array $data)
97
    {
98
        return new static(
99
            new Street($data['streetAddress']),
100
            new PostalCode($data['postalCode']),
101
            new Locality($data['addressLocality']),
102
            Country::fromNative($data['addressCountry'])
103
        );
104
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109 View Code Duplication
    public function toJsonLd()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
110
    {
111
        return [
112
            'addressCountry' => $this->countryCode,
113
            'addressLocality' => $this->locality->toNative(),
114
            'postalCode' => $this->postalCode->toNative(),
115
            'streetAddress' => $this->streetAddress->toNative(),
116
        ];
117
    }
118
119
    /**
120
     * @param Address $otherAddress
121
     * @return bool
122
     */
123
    public function sameAs(Address $otherAddress)
124
    {
125
        return $this->toJsonLd() === $otherAddress->toJsonLd();
126
    }
127
128
    /**
129
     * @param Udb3ModelAddress $address
130
     * @return self
131
     */
132
    public static function fromUdb3Model(Udb3ModelAddress $address)
133
    {
134
        return new self(
135
            new Street($address->getStreet()->toString()),
136
            new PostalCode($address->getPostalCode()->toString()),
137
            new Locality($address->getLocality()->toString()),
138
            new Country(CountryCode::fromNative($address->getCountryCode()->toString()))
139
        );
140
    }
141
}
142