forked from roadrunner-php/version-checker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVersionChecker.php
More file actions
122 lines (105 loc) · 4.11 KB
/
VersionChecker.php
File metadata and controls
122 lines (105 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
declare(strict_types=1);
namespace RoadRunner\VersionChecker;
use RoadRunner\VersionChecker\Exception\RequiredVersionException;
use RoadRunner\VersionChecker\Exception\RoadrunnerNotInstalledException;
use RoadRunner\VersionChecker\Exception\UnsupportedVersionException;
use RoadRunner\VersionChecker\Version\Comparator;
use RoadRunner\VersionChecker\Version\ComparatorInterface;
use RoadRunner\VersionChecker\Version\Installed;
use RoadRunner\VersionChecker\Version\InstalledInterface;
use RoadRunner\VersionChecker\Version\Required;
use RoadRunner\VersionChecker\Version\RequiredInterface;
final class VersionChecker
{
private InstalledInterface $installedVersion;
private RequiredInterface $requiredVersion;
private ComparatorInterface $comparator;
public function __construct(
?InstalledInterface $installedVersion = null,
?RequiredInterface $requiredVersion = null,
?ComparatorInterface $comparator = null,
) {
$this->installedVersion = $installedVersion ?? new Installed();
$this->requiredVersion = $requiredVersion ?? new Required();
$this->comparator = $comparator ?? new Comparator();
}
/**
* @param non-empty-string|null $version
*
* @throws UnsupportedVersionException
* @throws RoadrunnerNotInstalledException
* @throws RequiredVersionException
*/
public function greaterThan(?string $version = null): void
{
if (empty($version)) {
$version = $this->requiredVersion->getRequiredVersion();
}
if (empty($version)) {
throw new RequiredVersionException(
'Unable to determine required RoadRunner version.' .
' Please specify the required version in the `$version` parameter.',
);
}
$installedVersion = $this->installedVersion->getInstalledVersion();
if (!$this->comparator->greaterThan($version, $installedVersion)) {
throw new UnsupportedVersionException($this->getFormattedMessage(
'Installed RoadRunner version `%s` not supported. Requires version `%s` or higher.',
$installedVersion,
$version,
), $installedVersion, $version);
}
}
/**
* @param non-empty-string $version
*
* @throws UnsupportedVersionException
* @throws RoadrunnerNotInstalledException
*/
public function lessThan(string $version): void
{
$installedVersion = $this->installedVersion->getInstalledVersion();
if (!$this->comparator->lessThan($version, $installedVersion)) {
throw new UnsupportedVersionException($this->getFormattedMessage(
'Installed RoadRunner version `%s` not supported. Requires version `%s` or lower.',
$installedVersion,
$version,
), $installedVersion, $version);
}
}
/**
* @param non-empty-string $version
*
* @throws UnsupportedVersionException
* @throws RoadrunnerNotInstalledException
*/
public function equal(string $version): void
{
$installedVersion = $this->installedVersion->getInstalledVersion();
if (!$this->comparator->equal($version, $installedVersion)) {
throw new UnsupportedVersionException($this->getFormattedMessage(
'Installed RoadRunner version `%s` not supported. Requires version `%s`.',
$installedVersion,
$version,
), $installedVersion, $version);
}
}
/**
* @param non-empty-string $message
* @param non-empty-string $installedVersion
* @param non-empty-string $version
*
* @return non-empty-string
*/
private function getFormattedMessage(string $message, string $installedVersion, string $version): string
{
\preg_match('/\bv?(\d+)\.(\d+)\.(\d+)\b/', $version, $matches);
if (!empty($matches[0])) {
$version = $matches[1] . '.' . $matches[2] . '.' . $matches[3];
}
/** @var non-empty-string $msg */
$msg = \sprintf($message, $installedVersion, $version);
return $msg;
}
}