annotate vendor/phar-io/version/src/VersionConstraintParser.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php
Chris@14 2 /*
Chris@14 3 * This file is part of PharIo\Version.
Chris@14 4 *
Chris@14 5 * (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
Chris@14 6 *
Chris@14 7 * For the full copyright and license information, please view the LICENSE
Chris@14 8 * file that was distributed with this source code.
Chris@14 9 */
Chris@14 10
Chris@14 11 namespace PharIo\Version;
Chris@14 12
Chris@14 13 class VersionConstraintParser {
Chris@14 14 /**
Chris@14 15 * @param string $value
Chris@14 16 *
Chris@14 17 * @return VersionConstraint
Chris@14 18 *
Chris@14 19 * @throws UnsupportedVersionConstraintException
Chris@14 20 */
Chris@14 21 public function parse($value) {
Chris@14 22
Chris@14 23 if (strpos($value, '||') !== false) {
Chris@14 24 return $this->handleOrGroup($value);
Chris@14 25 }
Chris@14 26
Chris@14 27 if (!preg_match('/^[\^~\*]?[\d.\*]+$/', $value)) {
Chris@14 28 throw new UnsupportedVersionConstraintException(
Chris@14 29 sprintf('Version constraint %s is not supported.', $value)
Chris@14 30 );
Chris@14 31 }
Chris@14 32
Chris@14 33 switch ($value[0]) {
Chris@14 34 case '~':
Chris@14 35 return $this->handleTildeOperator($value);
Chris@14 36 case '^':
Chris@14 37 return $this->handleCaretOperator($value);
Chris@14 38 }
Chris@14 39
Chris@14 40 $version = new VersionConstraintValue($value);
Chris@14 41
Chris@14 42 if ($version->getMajor()->isAny()) {
Chris@14 43 return new AnyVersionConstraint();
Chris@14 44 }
Chris@14 45
Chris@14 46 if ($version->getMinor()->isAny()) {
Chris@14 47 return new SpecificMajorVersionConstraint(
Chris@14 48 $value,
Chris@14 49 $version->getMajor()->getValue()
Chris@14 50 );
Chris@14 51 }
Chris@14 52
Chris@14 53 if ($version->getPatch()->isAny()) {
Chris@14 54 return new SpecificMajorAndMinorVersionConstraint(
Chris@14 55 $value,
Chris@14 56 $version->getMajor()->getValue(),
Chris@14 57 $version->getMinor()->getValue()
Chris@14 58 );
Chris@14 59 }
Chris@14 60
Chris@14 61 return new ExactVersionConstraint($value);
Chris@14 62 }
Chris@14 63
Chris@14 64 /**
Chris@14 65 * @param $value
Chris@14 66 *
Chris@14 67 * @return OrVersionConstraintGroup
Chris@14 68 */
Chris@14 69 private function handleOrGroup($value) {
Chris@14 70 $constraints = [];
Chris@14 71
Chris@14 72 foreach (explode('||', $value) as $groupSegment) {
Chris@14 73 $constraints[] = $this->parse(trim($groupSegment));
Chris@14 74 }
Chris@14 75
Chris@14 76 return new OrVersionConstraintGroup($value, $constraints);
Chris@14 77 }
Chris@14 78
Chris@14 79 /**
Chris@14 80 * @param string $value
Chris@14 81 *
Chris@14 82 * @return AndVersionConstraintGroup
Chris@14 83 */
Chris@14 84 private function handleTildeOperator($value) {
Chris@14 85 $version = new Version(substr($value, 1));
Chris@14 86 $constraints = [
Chris@14 87 new GreaterThanOrEqualToVersionConstraint($value, $version)
Chris@14 88 ];
Chris@14 89
Chris@14 90 if ($version->getPatch()->isAny()) {
Chris@14 91 $constraints[] = new SpecificMajorVersionConstraint(
Chris@14 92 $value,
Chris@14 93 $version->getMajor()->getValue()
Chris@14 94 );
Chris@14 95 } else {
Chris@14 96 $constraints[] = new SpecificMajorAndMinorVersionConstraint(
Chris@14 97 $value,
Chris@14 98 $version->getMajor()->getValue(),
Chris@14 99 $version->getMinor()->getValue()
Chris@14 100 );
Chris@14 101 }
Chris@14 102
Chris@14 103 return new AndVersionConstraintGroup($value, $constraints);
Chris@14 104 }
Chris@14 105
Chris@14 106 /**
Chris@14 107 * @param string $value
Chris@14 108 *
Chris@14 109 * @return AndVersionConstraintGroup
Chris@14 110 */
Chris@14 111 private function handleCaretOperator($value) {
Chris@14 112 $version = new Version(substr($value, 1));
Chris@14 113
Chris@14 114 return new AndVersionConstraintGroup(
Chris@14 115 $value,
Chris@14 116 [
Chris@14 117 new GreaterThanOrEqualToVersionConstraint($value, $version),
Chris@14 118 new SpecificMajorVersionConstraint($value, $version->getMajor()->getValue())
Chris@14 119 ]
Chris@14 120 );
Chris@14 121 }
Chris@14 122 }