From 754b6eb39b08acc39ef26e587ded1d9f4f4ce9d4 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:07:16 +0200 Subject: [PATCH 01/10] feat: add create method to Parser --- src/Classes/Semver/Parser.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Classes/Semver/Parser.php b/src/Classes/Semver/Parser.php index 0b421257..1a3e0d78 100644 --- a/src/Classes/Semver/Parser.php +++ b/src/Classes/Semver/Parser.php @@ -18,6 +18,11 @@ class Parser { + public static function create(): Parser + { + return new Parser(); + } + public function parse(string $string): Version { $string = $this->deletePrefix($string); From 1e705c2e2848a0f7cd98ec75e64e39f93a02ac07 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:08:12 +0200 Subject: [PATCH 02/10] feat: add create method to ConstraintParser --- src/Classes/Semver/ConstraintParser.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Classes/Semver/ConstraintParser.php b/src/Classes/Semver/ConstraintParser.php index f9956c14..00f5fdb0 100644 --- a/src/Classes/Semver/ConstraintParser.php +++ b/src/Classes/Semver/ConstraintParser.php @@ -20,6 +20,12 @@ class ConstraintParser /** @var Parser $parser */ private $parser; + public static function create(int $mode): ConstraintParser + { + $parser = Parser::create(); + return new ConstraintParser($parser); + } + public function __construct(Parser $parser) { $this->parser = $parser; From 0643b22761f8e9066933185196dd6bdc4c2c2c26 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:08:49 +0200 Subject: [PATCH 03/10] feat: add create method to ConstraintParser TagComparator --- src/Classes/Semver/TagComparator.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Classes/Semver/TagComparator.php b/src/Classes/Semver/TagComparator.php index 735ae82a..e349a5ba 100644 --- a/src/Classes/Semver/TagComparator.php +++ b/src/Classes/Semver/TagComparator.php @@ -55,6 +55,11 @@ class TagComparator '' => 100 ]; + public static function create(): TagComparator + { + return new TagComparator(); + } + public function equalTo(string $string1, string $string2): bool { if ($string1 === $string2) { From 423abde0debe29101c310ae5a658d1dfb4977aa3 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:10:16 +0200 Subject: [PATCH 04/10] feat: add create method to Comparator --- src/Classes/Semver/Comparator.php | 28 +++++++++++++++++++++---- src/Classes/SemverComparatorFactory.php | 3 +-- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Classes/Semver/Comparator.php b/src/Classes/Semver/Comparator.php index 8ca8edc6..1de2bcb3 100644 --- a/src/Classes/Semver/Comparator.php +++ b/src/Classes/Semver/Comparator.php @@ -23,12 +23,33 @@ class Comparator /** @var Parser */ protected $parser; + /** @var ConstraintParser */ + protected $constraintParser; + + /** @var TagComparator */ + protected $tagComparator; + /** @var int */ private $mode = self::CARET_MODE_STRICT; - public function __construct(Parser $parser, int $mode = self::CARET_MODE_STRICT) + public static function create(int $mode): Comparator { + $parser = Parser::create(); + $constraintParser = ConstraintParser::create($mode); + $tagComparator = TagComparator::create(); + return new Comparator($parser, $constraintParser, $tagComparator, $mode); + } + + public function __construct( + Parser $parser, + ConstraintParser $constraintParser, + TagComparator $tagComparator, + int $mode + ) { $this->parser = $parser; + $this->constraintParser = $constraintParser; + $this->tagComparator = $tagComparator; + $this->mode = $mode; } public function greaterThan(string $versionString1, string $versionString2): bool @@ -71,7 +92,7 @@ public function greaterThan(string $versionString1, string $versionString2): boo $version1->getMajor() == $version2->getMajor() && $version1->getMinor() == $version2->getMinor() && $version1->getPatch() == $version2->getPatch() && - (new TagComparator())->greaterThan($version1->getTag(), $version2->getTag()) + $this->tagComparator->greaterThan($version1->getTag(), $version2->getTag()) ) { return true; } @@ -188,9 +209,8 @@ public function isCompatible(string $versionString1, string $versionString2): bo public function satisfies(string $versionString1, string $constrainString): bool { - $constraintParser = new ConstraintParser($this->parser); try { - $constraint = $constraintParser->parse($constrainString); + $constraint = $this->constraintParser->parse($constrainString); } catch (ParseErrorException $e) { return false; } diff --git a/src/Classes/SemverComparatorFactory.php b/src/Classes/SemverComparatorFactory.php index 61f52577..e0e34c9a 100644 --- a/src/Classes/SemverComparatorFactory.php +++ b/src/Classes/SemverComparatorFactory.php @@ -23,7 +23,6 @@ class SemverComparatorFactory */ public static function createComparator() { - $comparator = new Comparator(new Parser(), Config::getDependenyMode()); - return $comparator; + return Comparator::create(Config::getDependenyMode()); } } From 0ae50199ec66e968ff3c24e6bd555fd62190595d Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:10:40 +0200 Subject: [PATCH 05/10] feat: add create method to Sorter --- src/Classes/Semver/Sorter.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Classes/Semver/Sorter.php b/src/Classes/Semver/Sorter.php index 66a0bb47..3a35d959 100644 --- a/src/Classes/Semver/Sorter.php +++ b/src/Classes/Semver/Sorter.php @@ -18,6 +18,13 @@ class Sorter /** @var Comparator */ private $comparator; + public static function create(int $mode): Sorter + { + $comparator = Comparator::create($mode); + $sorter = new Sorter($comparator); + return $sorter; + } + public function __construct(Comparator $comparator) { $this->comparator = $comparator; From 0877ec809a01719581610ab30f505b10e28d1679 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:11:00 +0200 Subject: [PATCH 06/10] feat: add create method to Filter --- src/Classes/Semver/Filter.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Classes/Semver/Filter.php b/src/Classes/Semver/Filter.php index 3ddbeea9..f2dc2577 100644 --- a/src/Classes/Semver/Filter.php +++ b/src/Classes/Semver/Filter.php @@ -23,6 +23,15 @@ class Filter private $parser; + public static function create(int $mode): Filter + { + $parser = Parser::create(); + $comparator = Comparator::create($mode); + $sorter = Sorter::create($mode); + $filter = new Filter($parser, $comparator, $sorter); + return $filter; + } + public function __construct(Parser $parser, Comparator $comparator, Sorter $sorter) { $this->parser = $parser; From 199ee89f16ba1d213ee575287d2875913de0e983 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:12:15 +0200 Subject: [PATCH 07/10] refactor: use new create methods --- src/Classes/MmlcVersionInfoLoader.php | 9 ++------- src/Classes/ModuleStatus.php | 3 ++- src/Classes/SelfUpdater.php | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/Classes/MmlcVersionInfoLoader.php b/src/Classes/MmlcVersionInfoLoader.php index e3bf4a51..65644212 100644 --- a/src/Classes/MmlcVersionInfoLoader.php +++ b/src/Classes/MmlcVersionInfoLoader.php @@ -33,15 +33,10 @@ class MmlcVersionInfoLoader public static function createLoader(): MmlcVersionInfoLoader { - $parser = new Parser(); - $comparator = new Comparator($parser, Comparator::CARET_MODE_STRICT); - $sorter = new Sorter($comparator); - $filter = new Filter($parser, $comparator, $sorter); - $mmlcVersionInfoLoader = new MmlcVersionInfoLoader( new ApiRequest(), - $parser, - $filter + Parser::create(), + Filter::create(Comparator::CARET_MODE_STRICT) ); return $mmlcVersionInfoLoader; diff --git a/src/Classes/ModuleStatus.php b/src/Classes/ModuleStatus.php index fed92874..6b3ea0a5 100644 --- a/src/Classes/ModuleStatus.php +++ b/src/Classes/ModuleStatus.php @@ -148,7 +148,8 @@ public static function isUpdatable(Module $module): bool public static function hasValidRequire(Module $module): string { - $constraintParser = new ConstraintParser(new Parser()); + $constraintParser = ConstraintParser::create(Config::getDependenyMode()); + foreach ($module->getRequire() as $archiveName => $constraintString) { try { $constraintParser->parse($constraintString); diff --git a/src/Classes/SelfUpdater.php b/src/Classes/SelfUpdater.php index c7be36e0..bff3db76 100644 --- a/src/Classes/SelfUpdater.php +++ b/src/Classes/SelfUpdater.php @@ -55,7 +55,7 @@ public function __construct(MmlcVersionInfoLoader $mmlcVersionInfoLoader) $this->appRoot = App::getRoot(); $this->mmlcVersionInfoLoader = $mmlcVersionInfoLoader; $this->remoteUpdateServer = $this->getRomteUpdateServer(); - $this->comparator = new Comparator(new Parser(), Comparator::CARET_MODE_STRICT); + $this->comparator = Comparator::create(Comparator::CARET_MODE_STRICT); $this->parser = new Parser(); $this->filter = new Filter($this->parser, $this->comparator, new Sorter($this->comparator)); } From 47197c2875e8c022edf2234fff408c724508cd6e Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:34:18 +0200 Subject: [PATCH 08/10] feat: di of static $comparator --- src/Classes/ModuleFilter.php | 10 ++++++---- tests/unit/DependencyManager/DependencyBuilderTest.php | 6 ++++++ tests/unit/ModuleLoaderTest.php | 4 ++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Classes/ModuleFilter.php b/src/Classes/ModuleFilter.php index 5359e910..7cf61d57 100644 --- a/src/Classes/ModuleFilter.php +++ b/src/Classes/ModuleFilter.php @@ -20,6 +20,8 @@ class ModuleFilter { + public static $comparator; + /** * @param Module[] $modules * @return Module[] @@ -124,7 +126,7 @@ public static function filterNewestVersion(array $modules): array continue; } - $comparator = SemverComparatorFactory::createComparator(); + $comparator = self::$comparator ?? SemverComparatorFactory::createComparator(); if ($comparator->lessThan($module->getVersion(), $filteredModule->getVersion())) { $insertOrReplace = false; break; @@ -162,7 +164,7 @@ public static function filterNewestOrInstalledVersion($modules): array break; } - $comparator = SemverComparatorFactory::createComparator(); + $comparator = self::$comparator ?? SemverComparatorFactory::createComparator(); if ($comparator->lessThan($module->getVersion(), $filteredModule->getVersion())) { $insertOrReplace = false; break; @@ -215,7 +217,7 @@ public static function filterByVersionConstrain(array $modules, string $constrai { $filteredModules = []; foreach ($modules as $module) { - $comparator = SemverComparatorFactory::createComparator(); + $comparator = self::$comparator ?? SemverComparatorFactory::createComparator(); if ($comparator->satisfies($module->getVersion(), $constrain)) { $filteredModules[] = $module; } @@ -230,7 +232,7 @@ public static function getLatestVersion(array $modules): ?Module { $selectedModule = null; foreach ($modules as $module) { - $comparator = SemverComparatorFactory::createComparator(); + $comparator = self::$comparator ?? SemverComparatorFactory::createComparator(); if (!$selectedModule || $comparator->greaterThan($module->getVersion(), $selectedModule->getVersion())) { $selectedModule = $module; } diff --git a/tests/unit/DependencyManager/DependencyBuilderTest.php b/tests/unit/DependencyManager/DependencyBuilderTest.php index 1bf7d1e2..3ebdaa9a 100644 --- a/tests/unit/DependencyManager/DependencyBuilderTest.php +++ b/tests/unit/DependencyManager/DependencyBuilderTest.php @@ -17,11 +17,15 @@ use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\CombinationSatisfyerResult; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\DependencyBuilder; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\SystemSet; +use RobinTheHood\ModifiedModuleLoaderClient\ModuleFilter; +use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; class DependencyBuilderTest extends TestCase { public function testSatisfies1() { + ModuleFilter::$comparator = Comparator::create(Comparator::CARET_MODE_STRICT); + $dependencyBuilder = new DependencyBuilder(); $systemSet = new SystemSet(); @@ -72,6 +76,8 @@ public function testSatisfies1() public function testSatisfies2() { + ModuleFilter::$comparator = Comparator::create(Comparator::CARET_MODE_STRICT); + $dependencyBuilder = new DependencyBuilder(); $systemSet = new SystemSet(); diff --git a/tests/unit/ModuleLoaderTest.php b/tests/unit/ModuleLoaderTest.php index ad81ffae..55cd4128 100644 --- a/tests/unit/ModuleLoaderTest.php +++ b/tests/unit/ModuleLoaderTest.php @@ -15,6 +15,8 @@ use PHPUnit\Framework\TestCase; use RobinTheHood\ModifiedModuleLoaderClient\Loader\ModuleLoader; +use RobinTheHood\ModifiedModuleLoaderClient\ModuleFilter; +use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; class ModuleLoaderTest extends TestCase { @@ -52,6 +54,8 @@ public function testCanLoadAllVersionsByContraintWithLocalAuto() public function testCanLoadAllVersionsByContraint() { + ModuleFilter::$comparator = Comparator::create(Comparator::CARET_MODE_STRICT); + $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '1.0.0'); $this->assertEquals(0, count($modules)); From 4df3255913ff38710074f7cdc781f0b76d2802ff Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:36:47 +0200 Subject: [PATCH 09/10] refactor: user create method in selfUpdater --- src/Classes/SelfUpdater.php | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/Classes/SelfUpdater.php b/src/Classes/SelfUpdater.php index bff3db76..aa604a95 100644 --- a/src/Classes/SelfUpdater.php +++ b/src/Classes/SelfUpdater.php @@ -15,12 +15,9 @@ use RobinTheHood\ModifiedModuleLoaderClient\App; use RobinTheHood\ModifiedModuleLoaderClient\Config; -use RobinTheHood\ModifiedModuleLoaderClient\Semver\Parser; use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; use RobinTheHood\ModifiedModuleLoaderClient\Helpers\FileHelper; use RobinTheHood\ModifiedModuleLoaderClient\Api\V1\HttpRequest; -use RobinTheHood\ModifiedModuleLoaderClient\Semver\Filter; -use RobinTheHood\ModifiedModuleLoaderClient\Semver\Sorter; use RuntimeException; use Throwable; @@ -33,16 +30,10 @@ class SelfUpdater private $remoteUpdateServer; /** @var Comparator */ - protected $comparator; - - /** @var Parser */ - protected $parser; - - /** @var Filter */ - protected $filter; + private $comparator; /** @var MmlcVersionInfoLoader */ - protected $mmlcVersionInfoLoader; + private $mmlcVersionInfoLoader; /** * Während der Installtion werden Dateien und damit auch die Pfade von Klassen verschoben. @@ -56,8 +47,6 @@ public function __construct(MmlcVersionInfoLoader $mmlcVersionInfoLoader) $this->mmlcVersionInfoLoader = $mmlcVersionInfoLoader; $this->remoteUpdateServer = $this->getRomteUpdateServer(); $this->comparator = Comparator::create(Comparator::CARET_MODE_STRICT); - $this->parser = new Parser(); - $this->filter = new Filter($this->parser, $this->comparator, new Sorter($this->comparator)); } /** From ae83a13517ff17506fb442a7bedc32c0382d4157 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Mon, 19 Jun 2023 23:37:16 +0200 Subject: [PATCH 10/10] test: update tests --- tests/unit/MmlcVersionInfoLoaderTest.php | 10 ++-------- tests/unit/SemverTests/SemverComparatorTest.php | 2 +- tests/unit/SemverTests/SemverFilterTest.php | 4 +--- tests/unit/SemverTests/SemverSorterTest.php | 3 +-- 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/tests/unit/MmlcVersionInfoLoaderTest.php b/tests/unit/MmlcVersionInfoLoaderTest.php index 0b6d3b52..7485d06f 100644 --- a/tests/unit/MmlcVersionInfoLoaderTest.php +++ b/tests/unit/MmlcVersionInfoLoaderTest.php @@ -20,7 +20,6 @@ use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; use RobinTheHood\ModifiedModuleLoaderClient\Semver\Filter; use RobinTheHood\ModifiedModuleLoaderClient\Semver\Parser; -use RobinTheHood\ModifiedModuleLoaderClient\Semver\Sorter; class MmlcVersionInfoLoaderTest extends TestCase { @@ -73,15 +72,10 @@ public function testCanGetNextNewestUnstable() private function getMmlcVersionInfoLoader(): MmlcVersionInfoLoader { - $parser = new Parser(); - $comparator = new Comparator($parser, Comparator::CARET_MODE_STRICT); - $sorter = new Sorter($comparator); - $filter = new Filter($parser, $comparator, $sorter); - $mmlcVersionInfoLoader = new MmlcVersionInfoLoader( $this->getMockedApiRequest(), - $parser, - $filter + Parser::create(), + Filter::create(Comparator::CARET_MODE_STRICT) ); return $mmlcVersionInfoLoader; diff --git a/tests/unit/SemverTests/SemverComparatorTest.php b/tests/unit/SemverTests/SemverComparatorTest.php index 3fb85506..21346734 100644 --- a/tests/unit/SemverTests/SemverComparatorTest.php +++ b/tests/unit/SemverTests/SemverComparatorTest.php @@ -24,7 +24,7 @@ class SemverComparatorTest extends TestCase protected function setUp(): void { - $this->comparator = new Comparator(new Parser(), Comparator::CARET_MODE_STRICT); + $this->comparator = Comparator::create(Comparator::CARET_MODE_STRICT); } public function testSemverCanHandleGreaterThan() diff --git a/tests/unit/SemverTests/SemverFilterTest.php b/tests/unit/SemverTests/SemverFilterTest.php index 0c60dcde..6cd558a2 100644 --- a/tests/unit/SemverTests/SemverFilterTest.php +++ b/tests/unit/SemverTests/SemverFilterTest.php @@ -26,9 +26,7 @@ class SemverFilterTest extends TestCase protected function setUp(): void { - $parser = new Parser(); - $comparator = new Comparator($parser, Comparator::CARET_MODE_STRICT); - $this->filter = new Filter($parser, $comparator, new Sorter($comparator)); + $this->filter = Filter::create(Comparator::CARET_MODE_STRICT); } public function testSemverGetsHighestVersionString() diff --git a/tests/unit/SemverTests/SemverSorterTest.php b/tests/unit/SemverTests/SemverSorterTest.php index a3b70eec..4a94cc12 100644 --- a/tests/unit/SemverTests/SemverSorterTest.php +++ b/tests/unit/SemverTests/SemverSorterTest.php @@ -25,8 +25,7 @@ class SemverSorterTest extends TestCase protected function setUp(): void { - $comparator = new Comparator(new Parser(), Comparator::CARET_MODE_STRICT); - $this->sorter = new Sorter($comparator); + $this->sorter = Sorter::create(Comparator::CARET_MODE_STRICT); } public function testSemverCanSortVersions()