mirror of
https://github.com/deployphp/deployer.git
synced 2025-02-24 01:02:24 +01:00
Make selector accept array values (#2444)
This commit is contained in:
parent
27c7b6182c
commit
1669ffb11d
@ -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;
|
||||
}
|
||||
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user