Skip to content

Commit 0f9b5e1

Browse files
authored
Merge pull request #702 from patchlevel/subscribe-metadata-no-method-list-subscribe
SubscribeMetadata dont hold a list of methods for events
2 parents f607637 + 9cc2259 commit 0f9b5e1

5 files changed

Lines changed: 27 additions & 24 deletions

File tree

phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ parameters:
439439
path: tests/Unit/Message/Translator/ReplaceEventTranslatorTest.php
440440

441441
-
442-
message: '#^Method class@anonymous/tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest\.php\:212\:\:profileVisited\(\) has parameter \$message with no type specified\.$#'
442+
message: '#^Method class@anonymous/tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest\.php\:211\:\:profileVisited\(\) has parameter \$message with no type specified\.$#'
443443
identifier: missingType.parameter
444444
count: 1
445445
path: tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest.php

src/Metadata/Subscriber/AttributeSubscriberMetadataFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ public function metadata(string $subscriber): SubscriberMetadata
5858
throw DuplicateSubscribeMethod::duplicateEvent(
5959
$subscriber,
6060
$eventClass,
61-
$subscribeMethods[$eventClass][0]->name,
61+
$subscribeMethods[$eventClass]->name,
6262
$method->getName(),
6363
);
6464
}
6565

66-
$subscribeMethods[$eventClass][] = $this->subscribeMethod($method);
66+
$subscribeMethods[$eventClass] = $this->subscribeMethod($method);
6767
}
6868

6969
if ($method->getAttributes(OnFailed::class)) {

src/Metadata/Subscriber/SubscriberMetadata.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public function __construct(
1313
public readonly string $id,
1414
public readonly string $group = Subscription::DEFAULT_GROUP,
1515
public readonly RunMode $runMode = RunMode::FromBeginning,
16-
/** @var array<class-string|"*", list<SubscribeMethodMetadata>> */
16+
/** @var array<class-string|"*", SubscribeMethodMetadata> */
1717
public readonly array $subscribeMethods = [],
1818
public readonly string|null $setupMethod = null,
1919
public readonly string|null $teardownMethod = null,

src/Subscription/Subscriber/MetadataSubscriberAccessor.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use function array_key_exists;
1717
use function array_keys;
1818
use function array_map;
19-
use function array_merge;
2019

2120
/** @template T of object */
2221
final class MetadataSubscriberAccessor implements SubscriberAccessor, RealSubscriberAccessor
@@ -115,10 +114,15 @@ public function subscribeMethods(string $eventClass): array
115114
return $this->subscribeCache[$eventClass];
116115
}
117116

118-
$methods = array_merge(
119-
$this->metadata->subscribeMethods[$eventClass] ?? [],
120-
$this->metadata->subscribeMethods[Subscribe::ALL] ?? [],
121-
);
117+
$methods = [];
118+
119+
if (array_key_exists($eventClass, $this->metadata->subscribeMethods)) {
120+
$methods[] = $this->metadata->subscribeMethods[$eventClass];
121+
}
122+
123+
if (array_key_exists(Subscribe::ALL, $this->metadata->subscribeMethods)) {
124+
$methods[] = $this->metadata->subscribeMethods[Subscribe::ALL];
125+
}
122126

123127
$this->subscribeCache[$eventClass] = array_map(
124128
fn (SubscribeMethodMetadata $method): Closure => $this->createClosure($eventClass, $method),

tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest.php

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,7 @@ public function drop(): void
114114

115115
self::assertEquals(
116116
[
117-
ProfileVisited::class => [
118-
new SubscribeMethodMetadata('handle', []),
119-
],
117+
ProfileVisited::class => new SubscribeMethodMetadata('handle', []),
120118
],
121119
$metadata->subscribeMethods,
122120
);
@@ -141,8 +139,8 @@ public function handle(): void
141139

142140
self::assertEquals(
143141
[
144-
ProfileVisited::class => [new SubscribeMethodMetadata('handle', [])],
145-
ProfileCreated::class => [new SubscribeMethodMetadata('handle', [])],
142+
ProfileVisited::class => new SubscribeMethodMetadata('handle', []),
143+
ProfileCreated::class => new SubscribeMethodMetadata('handle', []),
146144
],
147145
$metadata->subscribeMethods,
148146
);
@@ -163,7 +161,7 @@ public function handle(): void
163161

164162
self::assertEquals(
165163
[
166-
'*' => [new SubscribeMethodMetadata('handle', [])],
164+
'*' => new SubscribeMethodMetadata('handle', []),
167165
],
168166
$metadata->subscribeMethods,
169167
);
@@ -189,17 +187,18 @@ public function profileCreated(ProfileCreated $profileCreated, string $aggregate
189187

190188
self::assertEquals(
191189
[
192-
ProfileVisited::class => [
193-
new SubscribeMethodMetadata('profileVisited', [
194-
new ArgumentMetadata('message', Message::class),
195-
]),
196-
],
197-
ProfileCreated::class => [
198-
new SubscribeMethodMetadata('profileCreated', [
190+
ProfileVisited::class => new SubscribeMethodMetadata(
191+
'profileVisited',
192+
[new ArgumentMetadata('message', Message::class)],
193+
),
194+
195+
ProfileCreated::class => new SubscribeMethodMetadata(
196+
'profileCreated',
197+
[
199198
new ArgumentMetadata('profileCreated', ProfileCreated::class),
200199
new ArgumentMetadata('aggregateId', 'string'),
201-
]),
202-
],
200+
],
201+
),
203202
],
204203
$metadata->subscribeMethods,
205204
);

0 commit comments

Comments
 (0)