annotate vendor/phar-io/version/src/Version.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 Version {
Chris@14 14 /**
Chris@14 15 * @var VersionNumber
Chris@14 16 */
Chris@14 17 private $major;
Chris@14 18
Chris@14 19 /**
Chris@14 20 * @var VersionNumber
Chris@14 21 */
Chris@14 22 private $minor;
Chris@14 23
Chris@14 24 /**
Chris@14 25 * @var VersionNumber
Chris@14 26 */
Chris@14 27 private $patch;
Chris@14 28
Chris@14 29 /**
Chris@14 30 * @var PreReleaseSuffix
Chris@14 31 */
Chris@14 32 private $preReleaseSuffix;
Chris@14 33
Chris@14 34 /**
Chris@14 35 * @var string
Chris@14 36 */
Chris@14 37 private $versionString = '';
Chris@14 38
Chris@14 39 /**
Chris@14 40 * @param string $versionString
Chris@14 41 */
Chris@14 42 public function __construct($versionString) {
Chris@14 43 $this->ensureVersionStringIsValid($versionString);
Chris@14 44
Chris@14 45 $this->versionString = $versionString;
Chris@14 46 }
Chris@14 47
Chris@14 48 /**
Chris@14 49 * @param array $matches
Chris@14 50 */
Chris@14 51 private function parseVersion(array $matches) {
Chris@14 52 $this->major = new VersionNumber($matches['Major']);
Chris@14 53 $this->minor = new VersionNumber($matches['Minor']);
Chris@14 54 $this->patch = isset($matches['Patch']) ? new VersionNumber($matches['Patch']) : new VersionNumber(null);
Chris@14 55
Chris@14 56 if (isset($matches['ReleaseType'])) {
Chris@14 57 $preReleaseNumber = isset($matches['ReleaseTypeCount']) ? (int) $matches['ReleaseTypeCount'] : null;
Chris@14 58
Chris@14 59 $this->preReleaseSuffix = new PreReleaseSuffix($matches['ReleaseType'], $preReleaseNumber);
Chris@14 60 }
Chris@14 61 }
Chris@14 62
Chris@14 63 /**
Chris@14 64 * @return PreReleaseSuffix
Chris@14 65 */
Chris@14 66 public function getPreReleaseSuffix()
Chris@14 67 {
Chris@14 68 return $this->preReleaseSuffix;
Chris@14 69 }
Chris@14 70
Chris@14 71 /**
Chris@14 72 * @return string
Chris@14 73 */
Chris@14 74 public function getVersionString() {
Chris@14 75 return $this->versionString;
Chris@14 76 }
Chris@14 77
Chris@14 78 /**
Chris@14 79 * @param Version $version
Chris@14 80 *
Chris@14 81 * @return bool
Chris@14 82 */
Chris@14 83 public function isGreaterThan(Version $version) {
Chris@14 84 if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) {
Chris@14 85 return false;
Chris@14 86 }
Chris@14 87
Chris@14 88 if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) {
Chris@14 89 return true;
Chris@14 90 }
Chris@14 91
Chris@14 92 if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) {
Chris@14 93 return false;
Chris@14 94 }
Chris@14 95
Chris@14 96 if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) {
Chris@14 97 return true;
Chris@14 98 }
Chris@14 99
Chris@14 100 if ($version->getPatch()->getValue() >= $this->getPatch()->getValue()) {
Chris@14 101 return false;
Chris@14 102 }
Chris@14 103
Chris@14 104 if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) {
Chris@14 105 return true;
Chris@14 106 }
Chris@14 107
Chris@14 108 return false;
Chris@14 109 }
Chris@14 110
Chris@14 111 /**
Chris@14 112 * @return VersionNumber
Chris@14 113 */
Chris@14 114 public function getMajor() {
Chris@14 115 return $this->major;
Chris@14 116 }
Chris@14 117
Chris@14 118 /**
Chris@14 119 * @return VersionNumber
Chris@14 120 */
Chris@14 121 public function getMinor() {
Chris@14 122 return $this->minor;
Chris@14 123 }
Chris@14 124
Chris@14 125 /**
Chris@14 126 * @return VersionNumber
Chris@14 127 */
Chris@14 128 public function getPatch() {
Chris@14 129 return $this->patch;
Chris@14 130 }
Chris@14 131
Chris@14 132 /**
Chris@14 133 * @param string $version
Chris@14 134 *
Chris@14 135 * @throws InvalidVersionException
Chris@14 136 */
Chris@14 137 private function ensureVersionStringIsValid($version) {
Chris@14 138 $regex = '/^v?
Chris@14 139 (?<Major>(0|(?:[1-9][0-9]*)))
Chris@14 140 \\.
Chris@14 141 (?<Minor>(0|(?:[1-9][0-9]*)))
Chris@14 142 (\\.
Chris@14 143 (?<Patch>(0|(?:[1-9][0-9]*)))
Chris@14 144 )?
Chris@14 145 (?:
Chris@14 146 -
Chris@14 147 (?<ReleaseType>(?:(dev|beta|b|RC|alpha|a|patch|p)))
Chris@14 148 (?:
Chris@14 149 (?<ReleaseTypeCount>[0-9])
Chris@14 150 )?
Chris@14 151 )?
Chris@14 152 $/x';
Chris@14 153
Chris@14 154 if (preg_match($regex, $version, $matches) !== 1) {
Chris@14 155 throw new InvalidVersionException(
Chris@14 156 sprintf("Version string '%s' does not follow SemVer semantics", $version)
Chris@14 157 );
Chris@14 158 }
Chris@14 159
Chris@14 160 $this->parseVersion($matches);
Chris@14 161 }
Chris@14 162 }