Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view Chris@0: * the LICENSE file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Composer\Semver\Constraint; Chris@0: Chris@0: /** Chris@0: * Defines a conjunctive or disjunctive set of constraints. Chris@0: */ Chris@0: class MultiConstraint implements ConstraintInterface Chris@0: { Chris@0: /** @var ConstraintInterface[] */ Chris@0: protected $constraints; Chris@0: Chris@0: /** @var string */ Chris@0: protected $prettyString; Chris@0: Chris@0: /** @var bool */ Chris@0: protected $conjunctive; Chris@0: Chris@0: /** Chris@0: * @param ConstraintInterface[] $constraints A set of constraints Chris@0: * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive Chris@0: */ Chris@0: public function __construct(array $constraints, $conjunctive = true) Chris@0: { Chris@0: $this->constraints = $constraints; Chris@0: $this->conjunctive = $conjunctive; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return ConstraintInterface[] Chris@0: */ Chris@0: public function getConstraints() Chris@0: { Chris@0: return $this->constraints; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isConjunctive() Chris@0: { Chris@0: return $this->conjunctive; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isDisjunctive() Chris@0: { Chris@0: return !$this->conjunctive; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @param ConstraintInterface $provider Chris@0: * Chris@0: * @return bool Chris@0: */ Chris@0: public function matches(ConstraintInterface $provider) Chris@0: { Chris@0: if (false === $this->conjunctive) { Chris@0: foreach ($this->constraints as $constraint) { Chris@0: if ($constraint->matches($provider)) { Chris@0: return true; Chris@0: } Chris@0: } Chris@0: Chris@0: return false; Chris@0: } Chris@0: Chris@0: foreach ($this->constraints as $constraint) { Chris@0: if (!$constraint->matches($provider)) { Chris@0: return false; Chris@0: } Chris@0: } Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @param string $prettyString Chris@0: */ Chris@0: public function setPrettyString($prettyString) Chris@0: { Chris@0: $this->prettyString = $prettyString; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return string Chris@0: */ Chris@0: public function getPrettyString() Chris@0: { Chris@0: if ($this->prettyString) { Chris@0: return $this->prettyString; Chris@0: } Chris@0: Chris@0: return $this->__toString(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return string Chris@0: */ Chris@0: public function __toString() Chris@0: { Chris@0: $constraints = array(); Chris@0: foreach ($this->constraints as $constraint) { Chris@0: $constraints[] = (string) $constraint; Chris@0: } Chris@0: Chris@0: return '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']'; Chris@0: } Chris@0: }