Completed
Push — master ( 59f7a1...075b21 )
by Daniel
03:25
created

Version   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 0
dl 0
loc 82
ccs 23
cts 23
cp 1
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A major() 0 4 1
A minor() 0 4 1
A __toString() 0 4 1
A equalTo() 0 5 2
A greaterThan() 0 5 3
A __construct() 0 8 3
A fromString() 0 8 2
1
<?php
2
3
namespace DDDominio\EventSourcing\Versioning;
4
5
class Version
6
{
7
    /**
8
     * @var int
9
     */
10
    private $major;
11
12
    /**
13
     * @var int
14
     */
15
    private $minor;
16
17
    /**
18
     * @param int $major
19
     * @param int $minor
20
     */
21 74
    public function __construct($major, $minor)
22
    {
23 74
        if ($major < 1 || $minor < 0) {
24 2
            throw new \InvalidArgumentException('Invalid version.');
25
        }
26 72
        $this->major = $major;
27 72
        $this->minor = $minor;
28 72
    }
29
30
    /**
31
     * @param $version
32
     * @return Version
33
     */
34 71
    public static function fromString($version)
35
    {
36 71
        $versionPattern = '/^(\d+)\.(\d+)$/';
37 71
        if (preg_match($versionPattern, $version, $matches) !== 1) {
38 6
            throw new \InvalidArgumentException('Invalid version format.');
39
        }
40 65
        return new self((int)$matches[1], (int)$matches[2]);
41
    }
42
43
    /**
44
     * @return int
45
     */
46 42
    public function major()
47
    {
48 42
        return $this->major;
49
    }
50
51
    /**
52
     * @return int
53
     */
54 38
    public function minor()
55
    {
56 38
        return $this->minor;
57
    }
58
59
    /**
60
     * @return string
61
     */
62 21
    public function __toString()
63
    {
64 21
        return $this->major() . '.' . $this->minor();
65
    }
66
67
    /**
68
     * @param Version $version
69
     * @return bool
70
     */
71 17
    public function equalTo($version)
72
    {
73 17
        return $this->major() === $version->major() &&
74 17
            $this->minor() === $version->minor();
75
    }
76
77
    /**
78
     * @param Version $version
79
     * @return bool
80
     */
81 11
    public function greaterThan($version)
82
    {
83 11
        return $this->major() > $version->major() ||
84 11
            $this->major() == $version->major() && $this->minor() > $version->minor();
85
    }
86
}
87