* Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Package\LinkConstraint; /** * Defines a conjunctive or disjunctive set of constraints on the target of a package link * * @author Nils Adermann * @author Jordi Boggiano */ class MultiConstraint implements LinkConstraintInterface { protected $constraints; protected $prettyString; protected $conjunctive; /** * Sets operator and version to compare a package with * * @param array $constraints A set of constraints * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive */ public function __construct(array $constraints, $conjunctive = true) { $this->constraints = $constraints; $this->conjunctive = $conjunctive; } public function matches(LinkConstraintInterface $provider) { if (false === $this->conjunctive) { foreach ($this->constraints as $constraint) { if ($constraint->matches($provider)) { return true; } } return false; } foreach ($this->constraints as $constraint) { if (!$constraint->matches($provider)) { return false; } } return true; } public function setPrettyString($prettyString) { $this->prettyString = $prettyString; } public function getPrettyString() { if ($this->prettyString) { return $this->prettyString; } return $this->__toString(); } public function __toString() { $constraints = array(); foreach ($this->constraints as $constraint) { $constraints[] = $constraint->__toString(); } return '['.implode($this->conjunctive ? ', ' : ' | ', $constraints).']'; } }