Viewing file: PreReleaseSuffix.php (1.84 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?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]); } }
|