Completed
Push — master ( 9fd723...978a62 )
by Nikola
02:35
created

Constraint::fromString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
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 16
    private function __construct($operator, Version $operand)
59
    {
60 16
        $this->operator = $operator;
61 16
        $this->operand = $operand;
62 16
    }
63
64
    /**
65
     * @param string $operator
66
     * @param Version $operand
67
     * @return self
68
     */
69 17
    public static function fromProperties($operator, Version $operand)
70
    {
71 17
        if (!self::isOperatorValid($operator)) {
72 1
            throw InvalidConstraintException::forOperator($operator);
73
        }
74
75 16
        return new self($operator, $operand);
76
    }
77
78 17
    protected static function isOperatorValid($operator)
79
    {
80 17
        return in_array($operator, self::$validOperators);
81
    }
82
83
    /**
84
     * @param string $constraintString
85
     * @return self
86
     */
87 3
    public static function fromString($constraintString)
88
    {
89 3
        return self::getParser()->parse($constraintString);
90
    }
91
92
    /**
93
     * @return ParserInterface
94
     */
95 3
    public static function getParser()
96
    {
97 3
        if (!isset(self::$parser)) {
98 1
            self::setParser(new StandardParser());
99
        }
100
101 3
        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 11
    public function assert(Version $version)
133
    {
134 11
        switch ($this->operator) {
135 11
            case self::OPERATOR_EQ:
136 2
                return $version->isEqualTo($this->operand);
137 9
            case self::OPERATOR_NEQ:
138 1
                return !$version->isEqualTo($this->operand);
139 8
            case self::OPERATOR_GT:
140 2
                return $version->isGreaterThan($this->operand);
141 6
            case self::OPERATOR_GTE:
142 3
                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