summaryrefslogtreecommitdiff
path: root/vendor/phar-io/version/src/PreReleaseSuffix.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phar-io/version/src/PreReleaseSuffix.php')
-rw-r--r--vendor/phar-io/version/src/PreReleaseSuffix.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/vendor/phar-io/version/src/PreReleaseSuffix.php b/vendor/phar-io/version/src/PreReleaseSuffix.php
new file mode 100644
index 000000000..00563008e
--- /dev/null
+++ b/vendor/phar-io/version/src/PreReleaseSuffix.php
@@ -0,0 +1,82 @@
+<?php declare(strict_types = 1);
+namespace PharIo\Version;
+
+class PreReleaseSuffix {
+ private const valueScoreMap = [
+ 'dev' => 0,
+ 'a' => 1,
+ 'alpha' => 1,
+ 'b' => 2,
+ 'beta' => 2,
+ 'rc' => 3,
+ 'p' => 4,
+ 'pl' => 4,
+ 'patch' => 4,
+ ];
+
+ /** @var string */
+ private $value;
+
+ /** @var int */
+ private $valueScore;
+
+ /** @var int */
+ private $number = 0;
+
+ /** @var string */
+ private $full;
+
+ /**
+ * @throws InvalidPreReleaseSuffixException
+ */
+ public function __construct(string $value) {
+ $this->parseValue($value);
+ }
+
+ public function asString(): string {
+ return $this->full;
+ }
+
+ public function getValue(): string {
+ return $this->value;
+ }
+
+ public function getNumber(): ?int {
+ return $this->number;
+ }
+
+ public function isGreaterThan(PreReleaseSuffix $suffix): bool {
+ if ($this->valueScore > $suffix->valueScore) {
+ return true;
+ }
+
+ if ($this->valueScore < $suffix->valueScore) {
+ return false;
+ }
+
+ return $this->getNumber() > $suffix->getNumber();
+ }
+
+ private function mapValueToScore(string $value): int {
+ $value = \strtolower($value);
+
+ return self::valueScoreMap[$value];
+ }
+
+ private function parseValue(string $value): void {
+ $regex = '/-?((dev|beta|b|rc|alpha|a|patch|p|pl)\.?(\d*)).*$/i';
+
+ if (\preg_match($regex, $value, $matches) !== 1) {
+ throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value));
+ }
+
+ $this->full = $matches[1];
+ $this->value = $matches[2];
+
+ if ($matches[3] !== '') {
+ $this->number = (int)$matches[3];
+ }
+
+ $this->valueScore = $this->mapValueToScore($matches[2]);
+ }
+}