Passed
Push — master ( c87045...1efded )
by Chris
34s
created

DiscountCodeMetadata   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 10.53%

Importance

Changes 0
Metric Value
dl 0
loc 55
ccs 2
cts 19
cp 0.1053
rs 10
c 0
b 0
f 0
wmc 7

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getDiscountCode() 0 3 1
A fromArray() 0 9 1
A getAvailableTo() 0 3 1
A getAvailableFrom() 0 3 1
A __construct() 0 8 1
A isAvailableOn() 0 3 2
1
<?php
2
3
namespace ConferenceTools\Tickets\Domain\ValueObject;
4
5
class DiscountCodeMetadata
6
{
7
    private $discountCode;
8
    private $availableFrom;
9
    private $availableTo;
10
11
    public function __construct(
12
        DiscountCode $discountCode,
13
        \DateTime $availableFrom,
14
        \DateTime $availableTo
15
    ) {
16
        $this->discountCode = $discountCode;
17
        $this->availableFrom = $availableFrom;
18
        $this->availableTo = $availableTo;
19
    }
20
21
    public static function fromArray(DiscountCode $discountCode, array $metadata)
22
    {
23
        $instance = new static(
24
            $discountCode,
25
            $metadata['availableFrom'] ?? (new \DateTime())->sub(new \DateInterval('P1D')),
26
            $metadata['availableTo'] ?? (new \DateTime())->add(new \DateInterval('P1D'))
27
        );
28
29
        return $instance;
30
    }
31
32
    /**
33
     * @return DiscountCode
34
     */
35
    public function getDiscountCode(): DiscountCode
36
    {
37
        return $this->discountCode;
38
    }
39
40
41
    /**
42
     * @return \DateTime
43
     */
44
    public function getAvailableFrom(): \DateTime
45
    {
46
        return $this->availableFrom;
47
    }
48
49
    /**
50
     * @return \DateTime
51
     */
52
    public function getAvailableTo(): \DateTime
53
    {
54
        return $this->availableTo;
55
    }
56
57 4
    public function isAvailableOn(\DateTime $date)
58
    {
59 4
        return ($this->availableFrom < $date && $date < $this->availableTo);
60
    }
61
}