Skip to content
This repository has been archived by the owner on Sep 7, 2020. It is now read-only.

Commit

Permalink
add suport for query bus
Browse files Browse the repository at this point in the history
  • Loading branch information
kpicaza committed Oct 27, 2019
1 parent 808db7a commit 82d3e76
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 14 deletions.
12 changes: 10 additions & 2 deletions spec/InFw/TacticianAdapter/ConfigProviderSpec.php
Expand Up @@ -30,9 +30,17 @@ function it_should_have_dependencies()

function it_should_have_command_bus()
{
$commandBus = $this->config['command-bus'];
$commandBus = $this->config['command_bus'];
$commandBus->shouldBeArray();
$commandBus['handler-map']->shouldBeArray();
$commandBus['handler_map']->shouldBeArray();
$commandBus['locator']->shouldBe(HandlerLocator::class);
}

function it_should_have_query_bus()
{
$commandBus = $this->config['query_bus'];
$commandBus->shouldBeArray();
$commandBus['handler_map']->shouldBeArray();
$commandBus['locator']->shouldBe('query_bus.handler_locator');
}
}
Expand Up @@ -2,20 +2,18 @@

namespace spec\InFw\TacticianAdapter\Factory;

use InFw\TacticianAdapter\Factory\HandlerLocatorFactory;
use Interop\Container\ContainerInterface;
use League\Tactician\Container\ContainerLocator;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
use Psr\Container\ContainerInterface;

class HandlerLocatorFactorySpec extends ObjectBehavior
{
function it_should_create_tactician_container_locator_instance(
ContainerInterface $container
) {
$container->get('config')->willReturn([
'command-bus' => [
'handler-map' => []
'command_bus' => [
'handler_map' => []
]
])->shouldBeCalled();

Expand Down
22 changes: 19 additions & 3 deletions src/InFw/TacticianAdapter/ConfigProvider.php
Expand Up @@ -5,6 +5,7 @@
use InFw\TacticianAdapter\Factory\CommandBusFactory;
use InFw\TacticianAdapter\Factory\HandlerLocatorFactory;
use InFw\TacticianAdapter\Factory\LoggerMiddlewareFactory;
use InFw\TacticianAdapter\Factory\QueryBusFactory;
use League\Tactician\CommandBus;
use League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor;
use League\Tactician\Handler\CommandNameExtractor\CommandNameExtractor;
Expand All @@ -21,7 +22,8 @@ class ConfigProvider
public function __invoke()
{
return [
'command-bus' => $this->getBusConfig(),
'command_bus' => $this->getBusConfig(),
'query_bus' => $this->getQueryBusConfig(),
'dependencies' => $this->getDependencies(),
];
}
Expand All @@ -37,7 +39,19 @@ protected function getBusConfig(): array
LockingMiddleware::class => LockingMiddleware::class,
LoggerMiddleware::class => LoggerMiddleware::class,
],
'handler-map' => [],
'handler_map' => [],
];
}

protected function getQueryBusConfig(): array
{
return [
'locator' => 'query_bus.handler_locator',
'inflector' => MethodNameInflector::class,
'extractor' => CommandNameExtractor::class,
'formatter' => Formatter::class,
'middleware' => [],
'handler_map' => [],
];
}

Expand All @@ -52,7 +66,9 @@ protected function getDependencies(): array
],
'factories' => [
CommandBus::class => CommandBusFactory::class,
HandlerLocator::class => HandlerLocatorFactory::class,
QueryBus::class => QueryBusFactory::class,
HandlerLocator::class => [HandlerLocatorFactory::class, 'command_bus'],
'query_bus.handler_locator' => [HandlerLocatorFactory::class, 'query_bus'],
LoggerMiddleware::class => LoggerMiddlewareFactory::class,
],
];
Expand Down
4 changes: 2 additions & 2 deletions src/InFw/TacticianAdapter/Factory/CommandBusFactory.php
Expand Up @@ -15,9 +15,9 @@ class CommandBusFactory
*
* @return CommandBus
*/
public function __invoke(ContainerInterface $container)
public function __invoke(ContainerInterface $container): CommandBus
{
$config = $container->get('config')['command-bus'];
$config = $container->get('config')['command_bus'];

$inflector = $container->get($config['inflector']);
$locator = $container->get($config['locator']);
Expand Down
4 changes: 2 additions & 2 deletions src/InFw/TacticianAdapter/Factory/HandlerLocatorFactory.php
Expand Up @@ -7,9 +7,9 @@

class HandlerLocatorFactory
{
public function __invoke(ContainerInterface $container)
public function __invoke(ContainerInterface $container, string $bus = 'command_bus')
{
$commandsMapping = $container->get('config')['command-bus']['handler-map'];
$commandsMapping = $container->get('config')[$bus]['handler_map'];

return new ContainerLocator($container, $commandsMapping);
}
Expand Down
39 changes: 39 additions & 0 deletions src/InFw/TacticianAdapter/Factory/QueryBusFactory.php
@@ -0,0 +1,39 @@
<?php

declare(strict_types=1);

namespace InFw\TacticianAdapter\Factory;

use InFw\TacticianAdapter\QueryBus;
use League\Tactician\Handler\CommandHandlerMiddleware;
use Psr\Container\ContainerInterface;

class QueryBusFactory
{
/**
* @param ContainerInterface $container
*
* @return CommandBus
*/
public function __invoke(ContainerInterface $container): QueryBus
{
$config = $container->get('config')['query_bus'];

$inflector = $container->get($config['inflector']);
$locator = $container->get($config['locator']);
$nameExtractor = $container->get($config['extractor']);

$commandHandlerMiddleware = new CommandHandlerMiddleware(
$nameExtractor,
$locator,
$inflector
);

return new QueryBus(array_merge(
array_map(function (string $middleware) use ($container) {
return $container->get($middleware);
}, $config['middleware']),
[$commandHandlerMiddleware]
));
}
}
11 changes: 11 additions & 0 deletions src/InFw/TacticianAdapter/QueryBus.php
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace InFw\TacticianAdapter;

use League\Tactician\CommandBus;

class QueryBus extends CommandBus
{
}

0 comments on commit 82d3e76

Please sign in to comment.