Skip to content

Commit 43b4df7

Browse files
committed
decouple open logic to OpenVersionsComposerProcessor
1 parent 65d6b2e commit 43b4df7

File tree

4 files changed

+92
-41
lines changed

4 files changed

+92
-41
lines changed

src/Command/OpenVersionsCommand.php

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
use Nette\Utils\Json;
99
use Rector\Jack\Composer\ComposerOutdatedResponseProvider;
1010
use Rector\Jack\Composer\NextVersionResolver;
11+
use Rector\Jack\ComposerProcessor\OpenVersionsComposerProcessor;
1112
use Rector\Jack\Enum\ComposerKey;
12-
use Rector\Jack\FileSystem\ComposerJsonPackageVersionUpdater;
1313
use Rector\Jack\OutdatedComposerFactory;
1414
use Symfony\Component\Console\Command\Command;
1515
use Symfony\Component\Console\Input\InputInterface;
@@ -20,9 +20,10 @@
2020
final class OpenVersionsCommand extends Command
2121
{
2222
public function __construct(
23-
private readonly NextVersionResolver $nextVersionResolver,
23+
// private readonly NextVersionResolver $nextVersionResolver,
2424
private readonly OutdatedComposerFactory $outdatedComposerFactory,
2525
private readonly ComposerOutdatedResponseProvider $composerOutdatedResponseProvider,
26+
private readonly OpenVersionsComposerProcessor $openVersionsComposerProcessor,
2627
) {
2728
parent::__construct();
2829
}
@@ -93,56 +94,40 @@ protected function execute(InputInterface $input, OutputInterface $output): int
9394

9495
$composerJsonContents = FileSystem::read($composerJsonFilePath);
9596

96-
$outdatedPackages = $outdatedComposer->getPackagesShuffled($onlyDev, $packagePrefix);
97-
98-
$openedPackageCount = 0;
99-
foreach ($outdatedPackages as $outdatedPackage) {
100-
$composerVersion = $outdatedPackage->getComposerVersion();
101-
102-
// already filled with open version
103-
if (str_contains($composerVersion, '|')) {
104-
continue;
105-
}
106-
107-
// convert composer version to next version
108-
$nextVersion = $this->nextVersionResolver->resolve($outdatedPackage->getName(), $composerVersion);
109-
$openedVersion = $composerVersion . '|' . $nextVersion;
110-
111-
// replace using regex, to keep original composer.json format
112-
$composerJsonContents = ComposerJsonPackageVersionUpdater::update(
113-
$composerJsonContents,
114-
$outdatedPackage->getName(),
115-
$openedVersion
116-
);
117-
118-
$symfonyStyle->writeln(sprintf(
119-
' * Opened "<fg=green>%s</>" package to "<fg=yellow>%s</>" version',
120-
$outdatedPackage->getName(),
121-
$openedVersion
122-
));
97+
$changedPackageVersionsResult = $this->openVersionsComposerProcessor->process(
98+
$composerJsonContents,
99+
$outdatedComposer,
100+
$limit,
101+
$onlyDev,
102+
$packagePrefix
103+
);
123104

124-
++$openedPackageCount;
125-
if ($openedPackageCount >= $limit) {
126-
// we've reached the limit, so we can stop
127-
break;
128-
}
129-
}
105+
$openedPackages = $changedPackageVersionsResult->getChangedPackageVersions();
106+
$changedComposerJson = $changedPackageVersionsResult->getComposerJsonContents();
130107

131108
if ($isDryRun === false) {
132109
// update composer.json file, only if no --dry-run
133-
FileSystem::write($composerJsonFilePath, $composerJsonContents . PHP_EOL, null);
110+
FileSystem::write($composerJsonFilePath, $changedComposerJson . PHP_EOL, null);
134111
}
135112

136113
$symfonyStyle->success(
137114
sprintf(
138115
'%d packages %s opened up to the next nearest version.%s%s "composer update" to push versions up',
139-
$openedPackageCount,
116+
count($openedPackages),
140117
$isDryRun ? 'would be (is "--dry-run")' : 'were',
141118
PHP_EOL,
142119
$isDryRun ? 'Then you would run' : 'Now run'
143120
)
144121
);
145122

123+
foreach ($openedPackages as $openedPackage) {
124+
$symfonyStyle->writeln(sprintf(
125+
' * Opened "<fg=green>%s</>" package to "<fg=yellow>%s</>" version',
126+
$openedPackage->getPackageName(),
127+
$openedPackage->getNewVersion()
128+
));
129+
}
130+
146131
return self::SUCCESS;
147132
}
148133
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Jack\ComposerProcessor;
6+
7+
use Rector\Jack\Composer\NextVersionResolver;
8+
use Rector\Jack\FileSystem\ComposerJsonPackageVersionUpdater;
9+
use Rector\Jack\ValueObject\ChangedPackageVersion;
10+
use Rector\Jack\ValueObject\ComposerProcessorResult\ChangedPackageVersionsResult;
11+
use Rector\Jack\ValueObject\OutdatedComposer;
12+
13+
final class OpenVersionsComposerProcessor
14+
{
15+
public function __construct(
16+
private NextVersionResolver $nextVersionResolver
17+
) {
18+
}
19+
20+
public function process(
21+
string $composerJsonContents,
22+
OutdatedComposer $outdatedComposer,
23+
int $limit,
24+
bool $onlyDev,
25+
?string $packagePrefix
26+
): ChangedPackageVersionsResult {
27+
$outdatedPackages = $outdatedComposer->getPackagesShuffled($onlyDev, $packagePrefix);
28+
29+
$openedPackages = [];
30+
31+
foreach ($outdatedPackages as $outdatedPackage) {
32+
$composerVersion = $outdatedPackage->getComposerVersion();
33+
34+
// already filled with open version
35+
if (str_contains($composerVersion, '|')) {
36+
continue;
37+
}
38+
39+
// convert composer version to next version
40+
$nextVersion = $this->nextVersionResolver->resolve($outdatedPackage->getName(), $composerVersion);
41+
$openedVersion = $composerVersion . '|' . $nextVersion;
42+
43+
// replace using regex, to keep original composer.json format
44+
$composerJsonContents = ComposerJsonPackageVersionUpdater::update(
45+
$composerJsonContents,
46+
$outdatedPackage->getName(),
47+
$openedVersion
48+
);
49+
50+
$openedPackages[] = new ChangedPackageVersion(
51+
$outdatedPackage->getName(),
52+
$composerVersion,
53+
$openedVersion,
54+
);
55+
56+
if (count($openedPackages) >= $limit) {
57+
// we've reached the limit, so we can stop
58+
break;
59+
}
60+
}
61+
62+
return new ChangedPackageVersionsResult($composerJsonContents, $openedPackages);
63+
}
64+
}

src/ComposerProcessor/RaiseToInstalledComposerProcessor.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Rector\Jack\ComposerProcessor;
46

57
use Composer\Semver\Comparator;
@@ -9,7 +11,7 @@
911
use Rector\Jack\Composer\VersionComparator;
1012
use Rector\Jack\FileSystem\ComposerJsonPackageVersionUpdater;
1113
use Rector\Jack\ValueObject\ChangedPackageVersion;
12-
use Rector\Jack\ValueObject\ComposerProcessorResult\RaiseToInstalledResult;
14+
use Rector\Jack\ValueObject\ComposerProcessorResult\ChangedPackageVersionsResult;
1315

1416
/**
1517
* @see \Rector\Jack\Tests\ComposerProcessor\RaiseToInstalledComposerProcessor\RaiseToInstalledComposerProcessorTest
@@ -22,7 +24,7 @@ public function __construct(
2224
) {
2325
}
2426

25-
public function process(string $composerJsonContents): RaiseToInstalledResult
27+
public function process(string $composerJsonContents): ChangedPackageVersionsResult
2628
{
2729
$installedPackagesToVersions = $this->installedVersionResolver->resolve();
2830

@@ -115,6 +117,6 @@ public function process(string $composerJsonContents): RaiseToInstalledResult
115117
$changedPackageVersions[] = new ChangedPackageVersion($packageName, $packageVersion, $newRequiredVersion);
116118
}
117119

118-
return new RaiseToInstalledResult($composerJsonContents, $changedPackageVersions);
120+
return new ChangedPackageVersionsResult($composerJsonContents, $changedPackageVersions);
119121
}
120122
}

src/ValueObject/ComposerProcessorResult/RaiseToInstalledResult.php renamed to src/ValueObject/ComposerProcessorResult/ChangedPackageVersionsResult.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Rector\Jack\ValueObject\ChangedPackageVersion;
88
use Webmozart\Assert\Assert;
99

10-
final class RaiseToInstalledResult
10+
final class ChangedPackageVersionsResult
1111
{
1212
/**
1313
* @param ChangedPackageVersion[] $changedPackageVersions

0 commit comments

Comments
 (0)