Skip to content

Commit

Permalink
MessengerExtensionDecorator now setups tag `messenger.messageHandle…
Browse files Browse the repository at this point in the history
…r` independently by `DecoratorExtension` existence
  • Loading branch information
tg666 committed May 4, 2023
1 parent 65195b9 commit f3b35cd
Showing 1 changed file with 49 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
use Fmasa\Messenger\Exceptions\MultipleHandlersFound;
use Nette\DI\Compiler;
use Nette\DI\CompilerExtension;
use Nette\DI\Extensions\DecoratorExtension;
use Nette\DI\Definitions\Definition;
use Nette\DI\Definitions\FactoryDefinition;
use Nette\DI\Extensions\ParametersExtension;
use Nette\DI\Helpers;
use Nette\DI\InvalidConfigurationException;
Expand All @@ -20,7 +21,11 @@
use Nette\Schema\Schema;
use Nette\Schema\ValidationException;
use SixtyEightPublishers\ArchitectureBundle\Bridge\Nette\DI\CompilerExtensionUtilsTrait;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use function array_filter;
use function assert;
use function is_a;
use function is_array;
use function is_string;
use function trigger_error;

Expand Down Expand Up @@ -77,16 +82,9 @@ public function loadConfiguration(): void
*/
public function beforeCompile(): void
{
$decoratorExtension = $this->requireCompilerExtension(DecoratorExtension::class);
assert($decoratorExtension instanceof DecoratorExtension);

foreach ($this->getMessageBusConfigurations() as $messageBusConfiguration) {
foreach ($messageBusConfiguration->messageHandlerTypes as $messageHandlerType) {
$decoratorExtension->addTags($messageHandlerType, [
'messenger.messageHandler' => [
'bus' => $messageBusConfiguration->busName,
],
]);
$this->setupMessageHandlerTag($messageHandlerType, $messageBusConfiguration->busName);
}
}

Expand Down Expand Up @@ -141,4 +139,46 @@ private function processSchema(Schema $schema, array $configs, ?string $name = n

return $res;
}

/**
* @param class-string<MessageHandlerInterface> $messageHandlerType
*/
private function setupMessageHandlerTag(string $messageHandlerType, string $busName): void
{
foreach ($this->findByType($messageHandlerType) as $definition) {
$tag = $definition->getTag('messenger.messageHandler') ?? [];

if (!is_array($tag)) {
$tag = [];
}

if (!isset($tag['bus'])) {
$tag['bus'] = $busName;
}

$definition->addTag('messenger.messageHandler', $tag);
}
}

/**
* @return array<Definition>
*/
private function findByType(string $type): array
{
return array_filter($this->getContainerBuilder()->getDefinitions(), static function (Definition $definition) use ($type): bool {
return null !== $definition->getType()
&& (
is_a($definition->getType(), $type, true)
|| (
$definition instanceof FactoryDefinition
&& null !== $definition->getResultType()
&& is_a(
$definition->getResultType(),
$type,
true,
)
)
);
});
}
}

0 comments on commit f3b35cd

Please sign in to comment.