Skip to content

Commit 07af0c5

Browse files
committed
[client] migrate passes.
1 parent b6387e9 commit 07af0c5

File tree

3 files changed

+109
-89
lines changed

3 files changed

+109
-89
lines changed

pkg/enqueue-bundle/EnqueueBundle.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function build(ContainerBuilder $container): void
2929
//client passes
3030
$container->addCompilerPass(new BuildClientConsumptionExtensionsPass());
3131
$container->addCompilerPass(new BuildClientExtensionsPass());
32-
$container->addCompilerPass(new BuildClientTopicSubscriberRoutesPass('default'), PassConfig::TYPE_BEFORE_OPTIMIZATION, 100);
32+
$container->addCompilerPass(new BuildClientTopicSubscriberRoutesPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 100);
3333
$container->addCompilerPass(new BuildClientCommandSubscriberRoutesPass('default'), PassConfig::TYPE_BEFORE_OPTIMIZATION, 100);
3434
$container->addCompilerPass(new BuildClientProcessorRoutesPass('default'), PassConfig::TYPE_BEFORE_OPTIMIZATION, 100);
3535
$container->addCompilerPass(new AnalyzeRouteCollectionPass('default'), PassConfig::TYPE_BEFORE_OPTIMIZATION, 30);

pkg/enqueue/Symfony/Client/DependencyInjection/BuildTopicSubscriberRoutesPass.php

Lines changed: 71 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -10,94 +10,98 @@
1010

1111
final class BuildTopicSubscriberRoutesPass implements CompilerPassInterface
1212
{
13-
/**
14-
* @var string
15-
*/
16-
private $name;
13+
use FormatClientNameTrait;
1714

18-
public function __construct(string $clientName)
19-
{
20-
if (empty($clientName)) {
21-
throw new \InvalidArgumentException('The name could not be empty.');
22-
}
23-
24-
$this->name = $clientName;
25-
}
15+
protected $name;
2616

2717
public function process(ContainerBuilder $container): void
2818
{
29-
$routeCollectionId = sprintf('enqueue.client.%s.route_collection', $this->name);
30-
if (false == $container->hasDefinition($routeCollectionId)) {
31-
return;
19+
if (false == $container->hasParameter('enqueue.clients')) {
20+
throw new \LogicException('The "enqueue.clients" parameter must be set.');
3221
}
3322

34-
$tag = 'enqueue.topic_subscriber';
35-
$routeCollection = new RouteCollection([]);
36-
foreach ($container->findTaggedServiceIds($tag) as $serviceId => $tagAttributes) {
37-
$processorDefinition = $container->getDefinition($serviceId);
38-
if ($processorDefinition->getFactory()) {
39-
throw new \LogicException('The topic subscriber tag could not be applied to a service created by factory.');
40-
}
23+
$names = $container->getParameter('enqueue.clients');
4124

42-
$processorClass = $processorDefinition->getClass();
43-
if (false == class_exists($processorClass)) {
44-
throw new \LogicException(sprintf('The processor class "%s" could not be found.', $processorClass));
25+
foreach ($names as $name) {
26+
$this->name = $name;
27+
$routeCollectionId = $this->format('route_collection');
28+
if (false == $container->hasDefinition($routeCollectionId)) {
29+
throw new \LogicException(sprintf('Service "%s" not found', $routeCollectionId));
4530
}
4631

47-
if (false == is_subclass_of($processorClass, TopicSubscriberInterface::class)) {
48-
throw new \LogicException(sprintf('The processor must implement "%s" interface to be used with the tag "%s"', TopicSubscriberInterface::class, $tag));
49-
}
32+
$tag = 'enqueue.topic_subscriber';
33+
$routeCollection = new RouteCollection([]);
34+
foreach ($container->findTaggedServiceIds($tag) as $serviceId => $tagAttributes) {
35+
$processorDefinition = $container->getDefinition($serviceId);
36+
if ($processorDefinition->getFactory()) {
37+
throw new \LogicException('The topic subscriber tag could not be applied to a service created by factory.');
38+
}
5039

51-
foreach ($tagAttributes as $tagAttribute) {
52-
$client = $tagAttribute['client'] ?? 'default';
40+
$processorClass = $processorDefinition->getClass();
41+
if (false == class_exists($processorClass)) {
42+
throw new \LogicException(sprintf('The processor class "%s" could not be found.', $processorClass));
43+
}
5344

54-
if ($client !== $this->name && 'all' !== $client) {
55-
continue;
45+
if (false == is_subclass_of($processorClass, TopicSubscriberInterface::class)) {
46+
throw new \LogicException(sprintf('The processor must implement "%s" interface to be used with the tag "%s"', TopicSubscriberInterface::class, $tag));
5647
}
5748

58-
/** @var TopicSubscriberInterface $processorClass */
59-
$topics = $processorClass::getSubscribedTopics();
49+
foreach ($tagAttributes as $tagAttribute) {
50+
$client = $tagAttribute['client'] ?? 'default';
6051

61-
if (empty($topics)) {
62-
throw new \LogicException('Topic subscriber must return something.');
63-
}
52+
if ($client !== $this->name && 'all' !== $client) {
53+
continue;
54+
}
6455

65-
if (is_string($topics)) {
66-
$topics = [$topics];
67-
}
56+
/** @var TopicSubscriberInterface $processorClass */
57+
$topics = $processorClass::getSubscribedTopics();
6858

69-
if (!is_array($topics)) {
70-
throw new \LogicException('Topic subscriber configuration is invalid. Should be an array or string.');
71-
}
59+
if (empty($topics)) {
60+
throw new \LogicException('Topic subscriber must return something.');
61+
}
62+
63+
if (is_string($topics)) {
64+
$topics = [$topics];
65+
}
66+
67+
if (!is_array($topics)) {
68+
throw new \LogicException('Topic subscriber configuration is invalid. Should be an array or string.');
69+
}
7270

73-
foreach ($topics as $key => $params) {
74-
if (is_string($params)) {
75-
$routeCollection->add(new Route($params, Route::TOPIC, $serviceId, ['processor_service_id' => $serviceId]));
76-
} elseif (is_array($params)) {
77-
$source = $params['topic'] ?? null;
78-
$processor = $params['processor'] ?? $serviceId;
79-
unset($params['topic'], $params['source'], $params['source_type'], $params['processor'], $params['options']);
80-
$options = $params;
81-
$options['processor_service_id'] = $serviceId;
82-
83-
$routeCollection->add(new Route($source, Route::TOPIC, $processor, $options));
84-
} else {
85-
throw new \LogicException(sprintf(
86-
'Topic subscriber configuration is invalid for "%s::getSubscribedTopics()". Got "%s"',
87-
$processorClass,
88-
json_encode($processorClass::getSubscribedTopics())
89-
));
71+
foreach ($topics as $key => $params) {
72+
if (is_string($params)) {
73+
$routeCollection->add(new Route($params, Route::TOPIC, $serviceId, ['processor_service_id' => $serviceId]));
74+
} elseif (is_array($params)) {
75+
$source = $params['topic'] ?? null;
76+
$processor = $params['processor'] ?? $serviceId;
77+
unset($params['topic'], $params['source'], $params['source_type'], $params['processor'], $params['options']);
78+
$options = $params;
79+
$options['processor_service_id'] = $serviceId;
80+
81+
$routeCollection->add(new Route($source, Route::TOPIC, $processor, $options));
82+
} else {
83+
throw new \LogicException(sprintf(
84+
'Topic subscriber configuration is invalid for "%s::getSubscribedTopics()". Got "%s"',
85+
$processorClass,
86+
json_encode($processorClass::getSubscribedTopics())
87+
));
88+
}
9089
}
9190
}
9291
}
93-
}
9492

95-
$rawRoutes = $routeCollection->toArray();
93+
$rawRoutes = $routeCollection->toArray();
9694

97-
$routeCollectionService = $container->getDefinition($routeCollectionId);
98-
$routeCollectionService->replaceArgument(0, array_merge(
99-
$routeCollectionService->getArgument(0),
100-
$rawRoutes
101-
));
95+
$routeCollectionService = $container->getDefinition($routeCollectionId);
96+
$routeCollectionService->replaceArgument(0, array_merge(
97+
$routeCollectionService->getArgument(0),
98+
$rawRoutes
99+
));
100+
}
101+
}
102+
103+
protected function getName(): string
104+
{
105+
return $this->name;
102106
}
103107
}

pkg/enqueue/Tests/Symfony/Client/DependencyInjection/BuildTopicSubscriberRoutesPassTest.php

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,36 @@ public function testShouldBeFinal()
2929
$this->assertClassFinal(BuildTopicSubscriberRoutesPass::class);
3030
}
3131

32-
public function testCouldBeConstructedWithName()
32+
public function testCouldBeConstructedWithoutArguments()
3333
{
34-
$pass = new BuildTopicSubscriberRoutesPass('aName');
35-
36-
$this->assertAttributeSame('aName', 'name', $pass);
34+
new BuildTopicSubscriberRoutesPass();
3735
}
3836

39-
public function testThrowIfNameEmptyOnConstruct()
37+
public function testThrowIfEnqueueClientsParameterNotSet()
4038
{
41-
$this->expectException(\InvalidArgumentException::class);
42-
$this->expectExceptionMessage('The name could not be empty.');
43-
new BuildTopicSubscriberRoutesPass('');
39+
$pass = new BuildTopicSubscriberRoutesPass();
40+
41+
$this->expectException(\LogicException::class);
42+
$this->expectExceptionMessage('The "enqueue.clients" parameter must be set.');
43+
$pass->process(new ContainerBuilder());
4444
}
4545

46-
public function testShouldDoNothingIfRouteCollectionServiceIsNotRegistered()
46+
public function testThrowsIfNoRouteCollectionServiceFoundForConfiguredTransport()
4747
{
48-
$pass = new BuildTopicSubscriberRoutesPass('aName');
49-
$pass->process(new ContainerBuilder());
48+
$container = new ContainerBuilder();
49+
$container->setParameter('enqueue.clients', ['foo', 'bar']);
50+
51+
$pass = new BuildTopicSubscriberRoutesPass();
52+
53+
$this->expectException(\LogicException::class);
54+
$this->expectExceptionMessage('Service "enqueue.client.foo.route_collection" not found');
55+
$pass->process($container);
5056
}
5157

5258
public function testThrowIfTaggedProcessorIsBuiltByFactory()
5359
{
5460
$container = new ContainerBuilder();
61+
$container->setParameter('enqueue.clients', ['aName']);
5562
$container->register('enqueue.client.aName.route_collection', RouteCollection::class)
5663
->addArgument([])
5764
;
@@ -60,7 +67,7 @@ public function testThrowIfTaggedProcessorIsBuiltByFactory()
6067
->addTag('enqueue.topic_subscriber')
6168
;
6269

63-
$pass = new BuildTopicSubscriberRoutesPass('aName');
70+
$pass = new BuildTopicSubscriberRoutesPass();
6471

6572
$this->expectException(\LogicException::class);
6673
$this->expectExceptionMessage('The topic subscriber tag could not be applied to a service created by factory.');
@@ -73,6 +80,7 @@ public function testShouldRegisterProcessorWithMatchedName()
7380
$routeCollection->addArgument([]);
7481

7582
$container = new ContainerBuilder();
83+
$container->setParameter('enqueue.clients', ['foo']);
7684
$container->setDefinition('enqueue.client.foo.route_collection', $routeCollection);
7785
$container->register('aFooProcessor', get_class($this->createTopicSubscriberProcessor()))
7886
->addTag('enqueue.topic_subscriber', ['client' => 'foo'])
@@ -81,7 +89,7 @@ public function testShouldRegisterProcessorWithMatchedName()
8189
->addTag('enqueue.topic_subscriber', ['client' => 'bar'])
8290
;
8391

84-
$pass = new BuildTopicSubscriberRoutesPass('foo');
92+
$pass = new BuildTopicSubscriberRoutesPass();
8593

8694
$pass->process($container);
8795

@@ -95,6 +103,7 @@ public function testShouldRegisterProcessorWithoutNameToDefaultClient()
95103
$routeCollection->addArgument([]);
96104

97105
$container = new ContainerBuilder();
106+
$container->setParameter('enqueue.clients', ['default']);
98107
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
99108
$container->register('aFooProcessor', get_class($this->createTopicSubscriberProcessor()))
100109
->addTag('enqueue.topic_subscriber')
@@ -103,7 +112,7 @@ public function testShouldRegisterProcessorWithoutNameToDefaultClient()
103112
->addTag('enqueue.topic_subscriber', ['client' => 'bar'])
104113
;
105114

106-
$pass = new BuildTopicSubscriberRoutesPass('default');
115+
$pass = new BuildTopicSubscriberRoutesPass();
107116

108117
$pass->process($container);
109118

@@ -117,6 +126,7 @@ public function testShouldRegisterProcessorIfClientNameEqualsAll()
117126
$routeCollection->addArgument([]);
118127

119128
$container = new ContainerBuilder();
129+
$container->setParameter('enqueue.clients', ['default']);
120130
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
121131
$container->register('aFooProcessor', get_class($this->createTopicSubscriberProcessor()))
122132
->addTag('enqueue.topic_subscriber', ['client' => 'all'])
@@ -125,7 +135,7 @@ public function testShouldRegisterProcessorIfClientNameEqualsAll()
125135
->addTag('enqueue.topic_subscriber', ['client' => 'bar'])
126136
;
127137

128-
$pass = new BuildTopicSubscriberRoutesPass('default');
138+
$pass = new BuildTopicSubscriberRoutesPass();
129139

130140
$pass->process($container);
131141

@@ -141,12 +151,13 @@ public function testShouldRegisterProcessorIfTopicsIsString()
141151
$processor = $this->createTopicSubscriberProcessor('fooTopic');
142152

143153
$container = new ContainerBuilder();
154+
$container->setParameter('enqueue.clients', ['default']);
144155
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
145156
$container->register('aFooProcessor', get_class($processor))
146157
->addTag('enqueue.topic_subscriber')
147158
;
148159

149-
$pass = new BuildTopicSubscriberRoutesPass('default');
160+
$pass = new BuildTopicSubscriberRoutesPass();
150161
$pass->process($container);
151162

152163
$this->assertInternalType('array', $routeCollection->getArgument(0));
@@ -173,12 +184,13 @@ public function testThrowIfTopicSubscriberReturnsNothing()
173184
$processor = $this->createTopicSubscriberProcessor(null);
174185

175186
$container = new ContainerBuilder();
187+
$container->setParameter('enqueue.clients', ['default']);
176188
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
177189
$container->register('aFooProcessor', get_class($processor))
178190
->addTag('enqueue.topic_subscriber')
179191
;
180192

181-
$pass = new BuildTopicSubscriberRoutesPass('default');
193+
$pass = new BuildTopicSubscriberRoutesPass();
182194

183195
$this->expectException(\LogicException::class);
184196
$this->expectExceptionMessage('Topic subscriber must return something.');
@@ -193,12 +205,13 @@ public function testShouldRegisterProcessorIfTopicsAreStrings()
193205
$processor = $this->createTopicSubscriberProcessor(['fooTopic', 'barTopic']);
194206

195207
$container = new ContainerBuilder();
208+
$container->setParameter('enqueue.clients', ['default']);
196209
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
197210
$container->register('aFooProcessor', get_class($processor))
198211
->addTag('enqueue.topic_subscriber')
199212
;
200213

201-
$pass = new BuildTopicSubscriberRoutesPass('default');
214+
$pass = new BuildTopicSubscriberRoutesPass();
202215
$pass->process($container);
203216

204217
$this->assertInternalType('array', $routeCollection->getArgument(0));
@@ -234,12 +247,13 @@ public function testShouldRegisterProcessorIfTopicsAreParamArrays()
234247
]);
235248

236249
$container = new ContainerBuilder();
250+
$container->setParameter('enqueue.clients', ['default']);
237251
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
238252
$container->register('aFooProcessor', get_class($processor))
239253
->addTag('enqueue.topic_subscriber')
240254
;
241255

242-
$pass = new BuildTopicSubscriberRoutesPass('default');
256+
$pass = new BuildTopicSubscriberRoutesPass();
243257
$pass->process($container);
244258

245259
$this->assertInternalType('array', $routeCollection->getArgument(0));
@@ -274,12 +288,13 @@ public function testThrowIfTopicSubscriberParamsInvalid()
274288
$processor = $this->createTopicSubscriberProcessor(['fooBar', true]);
275289

276290
$container = new ContainerBuilder();
291+
$container->setParameter('enqueue.clients', ['default']);
277292
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
278293
$container->register('aFooProcessor', get_class($processor))
279294
->addTag('enqueue.topic_subscriber')
280295
;
281296

282-
$pass = new BuildTopicSubscriberRoutesPass('default');
297+
$pass = new BuildTopicSubscriberRoutesPass();
283298

284299
$this->expectException(\LogicException::class);
285300
$this->expectExceptionMessage('Topic subscriber configuration is invalid');
@@ -297,12 +312,13 @@ public function testShouldMergeExtractedRoutesWithAlreadySetInCollection()
297312
$processor = $this->createTopicSubscriberProcessor(['fooTopic']);
298313

299314
$container = new ContainerBuilder();
315+
$container->setParameter('enqueue.clients', ['default']);
300316
$container->setDefinition('enqueue.client.default.route_collection', $routeCollection);
301317
$container->register('aFooProcessor', get_class($processor))
302318
->addTag('enqueue.topic_subscriber')
303319
;
304320

305-
$pass = new BuildTopicSubscriberRoutesPass('default');
321+
$pass = new BuildTopicSubscriberRoutesPass();
306322
$pass->process($container);
307323

308324
$this->assertInternalType('array', $routeCollection->getArgument(0));

0 commit comments

Comments
 (0)