diff --git a/src/CommandBus.php b/src/CommandBus.php index 9627230..d2cd331 100644 --- a/src/CommandBus.php +++ b/src/CommandBus.php @@ -51,6 +51,11 @@ class CommandBus implements CommandBusInterface $this->resolvers[] = $resolver; } + public function removeResolver(CommandResolverInterface $resolver): void + { + // FIXME implement + } + /** * Get the names of defined commands * @@ -60,7 +65,7 @@ class CommandBus implements CommandBusInterface { $commands = []; foreach ($this->resolvers as $resolver) { - $commands = array_merge($commands, $resolver->getNames()); + $commands = array_merge($commands, $resolver->getCommandNames()); } sort($commands); return array_unique($commands); @@ -75,7 +80,7 @@ class CommandBus implements CommandBusInterface public function findCommand(string $command): ?Command { foreach ($this->resolvers as $resolver) { - if ($found = $resolver->find($command)) + if ($found = $resolver->findCommand($command)) return $found; } return null; diff --git a/src/CommandRegistry.php b/src/CommandRegistry.php index 9651e1f..c05b22f 100644 --- a/src/CommandRegistry.php +++ b/src/CommandRegistry.php @@ -40,12 +40,12 @@ class CommandRegistry implements CommandResolverInterface, EventEmitterInterface $this->emit(self::EVENT_UNREGISTERED, [ $command ]); } - public function find(string $command): ?Command + public function findCommand(string $command): ?Command { return $this->commands[$command] ?? null; } - public function getNames(): array + public function getCommandNames(): array { return array_keys($this->commands); } diff --git a/src/CommandResolverInterface.php b/src/CommandResolverInterface.php index 4d69415..fbaeabb 100644 --- a/src/CommandResolverInterface.php +++ b/src/CommandResolverInterface.php @@ -11,9 +11,9 @@ use Evenement\EventEmitterTrait; interface CommandResolverInterface { - public function find(string $command): ?Command; + public function findCommand(string $command): ?Command; - public function getNames(): array; + public function getCommandNames(): array; } diff --git a/src/CommandResolverTrait.php b/src/CommandResolverTrait.php new file mode 100644 index 0000000..f588a49 --- /dev/null +++ b/src/CommandResolverTrait.php @@ -0,0 +1,53 @@ + */ + private array $commands = []; + + public function registerCommand(string $command, callable $handler): void + { + $isNew = !array_key_exists($command, $this->commands); + + $this->commands[$command] = new Command($command, $handler); + + if ($isNew) { + $this->emit(self::EVENT_REGISTERED, [ $command ]); + } + } + + public function unregisterCommand(string $command): void + { + if (!array_key_exists($command, $this->commands)) { + return; + } + + unset($this->commands[$command]); + + $this->emit(self::EVENT_UNREGISTERED, [ $command ]); + } + + public function findCommand(string $command): ?Command + { + return $this->commands[$command] ?? null; + } + + public function getCommandNames(): array + { + return array_keys($this->commands); + } +} + diff --git a/tests/CommandRegistryTest.php b/tests/CommandRegistryTest.php index 38eabfc..117e4df 100644 --- a/tests/CommandRegistryTest.php +++ b/tests/CommandRegistryTest.php @@ -48,8 +48,8 @@ class CommandRegistryTest extends \PHPUnit\Framework\TestCase $reg->register('a', $cmda); $reg->register('b', $cmdb); - $this->assertEquals('a', $reg->find('a')?->getName()); - $this->assertEquals('b', $reg->find('b')?->getName()); + $this->assertEquals('a', $reg->findCommand('a')?->getName()); + $this->assertEquals('b', $reg->findCommand('b')?->getName()); } public function testGettingCommandNames() @@ -61,7 +61,7 @@ class CommandRegistryTest extends \PHPUnit\Framework\TestCase $reg->register('a', $cmda); $reg->register('b', $cmdb); - $this->assertEquals(['a','b'], $reg->getNames()); + $this->assertEquals(['a','b'], $reg->getCommandNames()); } -} \ No newline at end of file +}