Make selector accept array values (#2444)

This commit is contained in:
Gabriel Ostrolucký 2021-03-05 20:47:40 +01:00 committed by GitHub
parent 27c7b6182c
commit 1669ffb11d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 7 deletions

View File

@ -62,13 +62,26 @@ class Selector
return false;
}
private static function compare(string $op, ?string $a, ?string $b): bool
/**
* @param string|array $a
*/
private static function compare(string $op, $a, ?string $b): bool
{
$matchFunction = function($a, ?string $b) {
foreach ((array)$a as $item) {
if ($item === $b) {
return true;
}
}
return false;
};
if ($op === '=') {
return $a === $b;
return $matchFunction($a, $b);
}
if ($op === '!=') {
return $a !== $b;
return !$matchFunction($a, $b);
}
return false;
}

View File

@ -14,7 +14,8 @@ class SelectorTest extends TestCase
$front = (new Host('prod.domain.com/front'))->set('labels', ['stage' => 'prod', 'tier' => 'frontend']);
$beta = (new Host('beta.domain.com'))->set('labels', ['stage' => 'beta']);
$dev = (new Host('dev'))->set('labels', ['stage' => 'dev']);
$allHosts = [$prod, $front, $beta, $dev];
$multi = (new Host('multi'))->set('labels', ['stage' => ['prod', 'beta']]);
$allHosts = [$prod, $front, $beta, $dev, $multi];
$hosts = new HostCollection();
foreach ($allHosts as $host) {
@ -22,9 +23,10 @@ class SelectorTest extends TestCase
}
$selector = new Selector($hosts);
self::assertEquals($allHosts, $selector->select('all'));
self::assertEquals([$prod, $front], $selector->select('stage=prod'));
self::assertEquals([$prod, $front, $multi], $selector->select('stage=prod'));
self::assertEquals([$front], $selector->select('stage=prod & tier=frontend'));
self::assertEquals([$front, $beta], $selector->select('prod.domain.com/front, stage=beta'));
self::assertEquals([$prod, $beta, $dev], $selector->select('all & tier != frontend'));
self::assertEquals([$front, $beta, $multi], $selector->select('prod.domain.com/front, stage=beta'));
self::assertEquals([$prod, $beta, $dev, $multi], $selector->select('all & tier != frontend'));
self::assertEquals([$prod, $front, $dev], $selector->select('stage != beta'));
}
}