Skip to content
9 changes: 2 additions & 7 deletions src/Classes/MmlcVersionInfoLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
10 changes: 6 additions & 4 deletions src/Classes/ModuleFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

class ModuleFilter
{
public static $comparator;

/**
* @param Module[] $modules
* @return Module[]
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand Down
3 changes: 2 additions & 1 deletion src/Classes/ModuleStatus.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
17 changes: 3 additions & 14 deletions src/Classes/SelfUpdater.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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.
Expand All @@ -55,9 +46,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->parser = new Parser();
$this->filter = new Filter($this->parser, $this->comparator, new Sorter($this->comparator));
$this->comparator = Comparator::create(Comparator::CARET_MODE_STRICT);
}

/**
Expand Down
28 changes: 24 additions & 4 deletions src/Classes/Semver/Comparator.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
6 changes: 6 additions & 0 deletions src/Classes/Semver/ConstraintParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
9 changes: 9 additions & 0 deletions src/Classes/Semver/Filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions src/Classes/Semver/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@

class Parser
{
public static function create(): Parser
{
return new Parser();
}

public function parse(string $string): Version
{
$string = $this->deletePrefix($string);
Expand Down
7 changes: 7 additions & 0 deletions src/Classes/Semver/Sorter.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions src/Classes/Semver/TagComparator.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
3 changes: 1 addition & 2 deletions src/Classes/SemverComparatorFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ class SemverComparatorFactory
*/
public static function createComparator()
{
$comparator = new Comparator(new Parser(), Config::getDependenyMode());
return $comparator;
return Comparator::create(Config::getDependenyMode());
}
}
6 changes: 6 additions & 0 deletions tests/unit/DependencyManager/DependencyBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -72,6 +76,8 @@ public function testSatisfies1()

public function testSatisfies2()
{
ModuleFilter::$comparator = Comparator::create(Comparator::CARET_MODE_STRICT);

$dependencyBuilder = new DependencyBuilder();
$systemSet = new SystemSet();

Expand Down
10 changes: 2 additions & 8 deletions tests/unit/MmlcVersionInfoLoaderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions tests/unit/ModuleLoaderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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));

Expand Down
2 changes: 1 addition & 1 deletion tests/unit/SemverTests/SemverComparatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
4 changes: 1 addition & 3 deletions tests/unit/SemverTests/SemverFilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
3 changes: 1 addition & 2 deletions tests/unit/SemverTests/SemverSorterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down