Skip to content

Commit 2ca8f17

Browse files
committed
Move logic with Composer to a standalone class with interface
1 parent 1126d57 commit 2ca8f17

3 files changed

Lines changed: 57 additions & 18 deletions

File tree

src/Composer/Package.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RoadRunner\VersionChecker\Composer;
6+
7+
use Composer\InstalledVersions;
8+
9+
final class Package implements PackageInterface
10+
{
11+
/**
12+
* @param non-empty-string $packageName
13+
* @return non-empty-string[]
14+
*/
15+
public function getRequiredVersions(string $packageName): array
16+
{
17+
$versions = [];
18+
foreach (InstalledVersions::getInstalledPackages() as $package) {
19+
$path = InstalledVersions::getInstallPath($package);
20+
if ($path !== null && \file_exists($path . '/composer.json')) {
21+
/** @var array{require?: array<non-empty-string, non-empty-string>} $composerJson */
22+
$composerJson = \json_decode(\file_get_contents($path . '/composer.json'), true);
23+
24+
if (isset($composerJson['require'][$packageName])) {
25+
$versions[] = $composerJson['require'][$packageName];
26+
}
27+
}
28+
}
29+
30+
return $versions;
31+
}
32+
}

src/Composer/PackageInterface.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RoadRunner\VersionChecker\Composer;
6+
7+
interface PackageInterface
8+
{
9+
/**
10+
* @param non-empty-string $packageName
11+
* @return non-empty-string[]
12+
*/
13+
public function getRequiredVersions(string $packageName): array;
14+
}

src/Version/Required.php

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@
44

55
namespace RoadRunner\VersionChecker\Version;
66

7-
use Composer\InstalledVersions;
87
use Composer\Semver\Comparator as SemverComparator;
98
use Composer\Semver\VersionParser;
9+
use RoadRunner\VersionChecker\Composer\Package;
10+
use RoadRunner\VersionChecker\Composer\PackageInterface;
1011

1112
final class Required implements RequiredInterface
1213
{
1314
private const ROADRUNNER_PACKAGE = 'spiral/roadrunner';
1415

16+
public function __construct(
17+
private readonly PackageInterface $package = new Package()
18+
) {
19+
}
20+
1521
/**
1622
* @return non-empty-string|null
1723
*/
@@ -20,23 +26,10 @@ public function getRequiredVersion(): ?string
2026
$parser = new VersionParser();
2127

2228
$version = null;
23-
foreach (InstalledVersions::getInstalledPackages() as $package) {
24-
$path = InstalledVersions::getInstallPath($package);
25-
if ($path !== null && \file_exists($path . '/composer.json')) {
26-
/** @var array $composerJson */
27-
$composerJson = \json_decode(\file_get_contents($path . '/composer.json'), true);
28-
29-
if (isset($composerJson['require']) && \is_array($composerJson['require'])) {
30-
/** @var non-empty-string $packageVersion */
31-
foreach ($composerJson['require'] as $package => $packageVersion) {
32-
if ($package === self::ROADRUNNER_PACKAGE) {
33-
/** @var non-empty-string $packageVersion */
34-
$packageVersion = $parser->normalize($packageVersion);
35-
$version = $this->getMinimumVersion($packageVersion, $version);
36-
}
37-
}
38-
}
39-
}
29+
foreach ($this->package->getRequiredVersions(self::ROADRUNNER_PACKAGE) as $packageVersion) {
30+
/** @var non-empty-string $packageVersion */
31+
$packageVersion = $parser->normalize($packageVersion);
32+
$version = $this->getMinimumVersion($packageVersion, $version);
4033
}
4134

4235
return $version;

0 commit comments

Comments
 (0)