comparison vendor/composer/semver/src/Constraint/MultiConstraint.php @ 0:1e000243b222

vanilla 1.3.3 distro, I hope
author Charlie Root
date Thu, 04 Jan 2018 15:50:29 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e000243b222
1 <?php
2
3 /*
4 * This file is part of composer/semver.
5 *
6 * (c) Composer <https://github.com/composer>
7 *
8 * For the full copyright and license information, please view
9 * the LICENSE file that was distributed with this source code.
10 */
11
12 namespace Composer\Semver\Constraint;
13
14 /**
15 * Defines a conjunctive or disjunctive set of constraints.
16 */
17 class MultiConstraint implements ConstraintInterface
18 {
19 /** @var ConstraintInterface[] */
20 protected $constraints;
21
22 /** @var string */
23 protected $prettyString;
24
25 /** @var bool */
26 protected $conjunctive;
27
28 /**
29 * @param ConstraintInterface[] $constraints A set of constraints
30 * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive
31 */
32 public function __construct(array $constraints, $conjunctive = true)
33 {
34 $this->constraints = $constraints;
35 $this->conjunctive = $conjunctive;
36 }
37
38 /**
39 * @return ConstraintInterface[]
40 */
41 public function getConstraints()
42 {
43 return $this->constraints;
44 }
45
46 /**
47 * @return bool
48 */
49 public function isConjunctive()
50 {
51 return $this->conjunctive;
52 }
53
54 /**
55 * @return bool
56 */
57 public function isDisjunctive()
58 {
59 return !$this->conjunctive;
60 }
61
62 /**
63 * @param ConstraintInterface $provider
64 *
65 * @return bool
66 */
67 public function matches(ConstraintInterface $provider)
68 {
69 if (false === $this->conjunctive) {
70 foreach ($this->constraints as $constraint) {
71 if ($constraint->matches($provider)) {
72 return true;
73 }
74 }
75
76 return false;
77 }
78
79 foreach ($this->constraints as $constraint) {
80 if (!$constraint->matches($provider)) {
81 return false;
82 }
83 }
84
85 return true;
86 }
87
88 /**
89 * @param string $prettyString
90 */
91 public function setPrettyString($prettyString)
92 {
93 $this->prettyString = $prettyString;
94 }
95
96 /**
97 * @return string
98 */
99 public function getPrettyString()
100 {
101 if ($this->prettyString) {
102 return $this->prettyString;
103 }
104
105 return $this->__toString();
106 }
107
108 /**
109 * @return string
110 */
111 public function __toString()
112 {
113 $constraints = array();
114 foreach ($this->constraints as $constraint) {
115 $constraints[] = (string) $constraint;
116 }
117
118 return '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']';
119 }
120 }