Completed
Push — master ( b29392...560c34 )
by Nikola
03:37 queued 56s
created

Constraint::getParser()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 9.4285
cc 2
eloc 4
nc 2
nop 0
crap 2
1
<?php
2
3
/**
4
 * This file is part of the Version package.
5
 *
6
 * Copyright (c) Nikola Posa <[email protected]>
7
 *
8
 * For full copyright and license information, please refer to the LICENSE file,
9
 * located at the package root folder.
10
 */
11
12
namespace Version\Constraint;
13
14
use Version\Version;
15
use Version\Exception\InvalidConstraintException;
16
use Version\Constraint\Parser\ParserInterface;
17
use Version\Constraint\Parser\StandardParser;
18
19
/**
20
 * @author Nikola Posa <[email protected]>
21
 */
22
class Constraint implements ConstraintInterface
23
{
24
    const OPERATOR_EQ = '=';
25
    const OPERATOR_NEQ = '!=';
26
    const OPERATOR_GT = '>';
27
    const OPERATOR_GTE = '>=';
28
    const OPERATOR_LT = '<';
29
    const OPERATOR_LTE = '<=';
30
31
    /**
32
     * @var string
33
     */
34
    protected $operator;
35
36
    /**
37
     * @var Version
38
     */
39
    protected $operand;
40
41
    /**
42
     * @var array
43
     */
44
    private static $validOperators = [
45
        self::OPERATOR_EQ,
46
        self::OPERATOR_NEQ,
47
        self::OPERATOR_GT,
48
        self::OPERATOR_GTE,
49
        self::OPERATOR_LT,
50
        self::OPERATOR_LTE,
51
    ];
52
53
    /**
54
     * @var ParserInterface
55
     */
56
    private static $parser;
57
58 15
    private function __construct($operator, Version $operand)
59
    {
60 15
        $this->operator = $operator;
61 15
        $this->operand = $operand;
62 15
    }
63
64
    /**
65
     * @param string $operator
66
     * @param Version $operand
67
     * @return self
68
     */
69 16
    public static function fromProperties($operator, Version $operand)
70
    {
71 16
        if (!self::isOperatorValid($operator)) {
72 1
            throw InvalidConstraintException::forOperator($operator);
73
        }
74
75 15
        return new self($operator, $operand);
76
    }
77
78 16
    protected static function isOperatorValid($operator)
79
    {
80 16
        return in_array($operator, self::$validOperators);
81
    }
82
83
    /**
84
     * @param string $constraintString
85
     * @return self
86
     */
87 2
    public static function fromString($constraintString)
88
    {
89 2
        return self::getParser()->parse($constraintString);
90
    }
91
92
    /**
93
     * @return ParserInterface
94
     */
95 2
    public static function getParser()
96
    {
97 2
        if (!isset(self::$parser)) {
98 1
            self::setParser(new StandardParser());
99 1
        }
100
101 2
        return self::$parser;
102
    }
103
104
    /**
105
     * @param ParserInterface $parser
106
     * @return void
107
     */
108 1
    public static function setParser(ParserInterface $parser)
109
    {
110 1
        self::$parser = $parser;
111 1
    }
112
113
    /**
114
     * @return string
115
     */
116 5
    public function getOperator()
117
    {
118 5
        return $this->operator;
119
    }
120
121
    /**
122
     * @return Version
123
     */
124 5
    public function getOperand()
125
    {
126 5
        return $this->operand;
127
    }
128
129
    /**
130
     * {@inheritDoc}
131
     */
132 10
    public function assert(Version $version)
133
    {
134 10
        switch ($this->operator) {
135 10
            case self::OPERATOR_EQ :
136 2
                return $version->isEqualTo($this->operand);
137 8
            case self::OPERATOR_NEQ :
138 1
                return !$version->isEqualTo($this->operand);
139 7
            case self::OPERATOR_GT :
140 2
                return $version->isGreaterThan($this->operand);
141 5
            case self::OPERATOR_GTE :
142 2
                return $version->isGreaterOrEqualTo($this->operand);
143 4
            case self::OPERATOR_LT :
144 2
                return $version->isLessThan($this->operand);
145 2
            case self::OPERATOR_LTE :
146 2
                return $version->isLessOrEqualTo($this->operand);
147
        }
148
    }
149
}
150