Tweak Filters API
This commit is contained in:
parent
3264e376cb
commit
1e625f75bf
|
|
@ -132,7 +132,7 @@ class PlayerController extends Controller
|
||||||
|
|
||||||
$dispatcher->dispatch('player.renaming', [$player, $newName]);
|
$dispatcher->dispatch('player.renaming', [$player, $newName]);
|
||||||
|
|
||||||
$can = $filter->apply('can_rename_player', [$player, $newName]);
|
$can = $filter->apply('user_can_rename_player', true, [$player, $newName]);
|
||||||
if ($can instanceof Rejection) {
|
if ($can instanceof Rejection) {
|
||||||
return json($can->getReason(), 1);
|
return json($can->getReason(), 1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,21 +22,17 @@ class Filter
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply(string $hook, array $payload)
|
public function apply(string $hook, $init, $args = [])
|
||||||
{
|
{
|
||||||
$listeners = $this->getListeners($hook);
|
$listeners = $this->getListeners($hook);
|
||||||
if ($listeners->isNotEmpty()) {
|
if ($listeners->isNotEmpty()) {
|
||||||
$value = $payload[0];
|
|
||||||
unset($payload[0]);
|
|
||||||
$args = array_values($payload);
|
|
||||||
|
|
||||||
return $this->listeners[$hook]
|
return $this->listeners[$hook]
|
||||||
->sortByDesc('priority')
|
->sortByDesc('priority')
|
||||||
->reduce(function ($carry, $item) use ($args) {
|
->reduce(function ($carry, $item) use ($args) {
|
||||||
return call_user_func($item['callback'], $carry, ...$args);
|
return call_user_func($item['callback'], $carry, ...$args);
|
||||||
}, $value);
|
}, $init);
|
||||||
} else {
|
} else {
|
||||||
return $payload[0];
|
return $init;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ class PlayerControllerTest extends TestCase
|
||||||
// Rejected by filter
|
// Rejected by filter
|
||||||
$filter = resolve(Filter::class);
|
$filter = resolve(Filter::class);
|
||||||
$pid = $player->pid;
|
$pid = $player->pid;
|
||||||
$filter->add('can_rename_player', function ($player, $newName) {
|
$filter->add('user_can_rename_player', function ($can, $player, $newName) {
|
||||||
$this->assertEquals('new', $newName);
|
$this->assertEquals('new', $newName);
|
||||||
return new Rejection('rejected');
|
return new Rejection('rejected');
|
||||||
});
|
});
|
||||||
|
|
@ -202,7 +202,7 @@ class PlayerControllerTest extends TestCase
|
||||||
'code' => 1,
|
'code' => 1,
|
||||||
'message' => 'rejected',
|
'message' => 'rejected',
|
||||||
]);
|
]);
|
||||||
$filter->remove('can_rename_player');
|
$filter->remove('user_can_rename_player');
|
||||||
|
|
||||||
// Success
|
// Success
|
||||||
Event::fake();
|
Event::fake();
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ class FilterTest extends TestCase
|
||||||
public function testApply()
|
public function testApply()
|
||||||
{
|
{
|
||||||
$filter = new Filter();
|
$filter = new Filter();
|
||||||
$this->assertEquals('value', $filter->apply('hook', ['value', 'add']));
|
$this->assertEquals('value', $filter->apply('hook', 'value', ['add']));
|
||||||
|
|
||||||
$filter->add('hook', function ($value, $addition) {
|
$filter->add('hook', function ($value, $addition) {
|
||||||
$this->assertEquals('add', $addition);
|
$this->assertEquals('add', $addition);
|
||||||
|
|
@ -29,7 +29,7 @@ class FilterTest extends TestCase
|
||||||
$filter->add('hook', function ($value) {
|
$filter->add('hook', function ($value) {
|
||||||
return $value.'_high';
|
return $value.'_high';
|
||||||
}, 30);
|
}, 30);
|
||||||
$this->assertEquals('value_high_medium_low', $filter->apply('hook', ['value', 'add']));
|
$this->assertEquals('value_high_medium_low', $filter->apply('hook', 'value', ['add']));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRemove()
|
public function testRemove()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user