Skip to content

Commit a65c5c4

Browse files
DanielBaduraDavidBadura
authored andcommitted
Update API of SubscriberMetadata to not hold a list of methods for given events.
Ref: #701
1 parent f607637 commit a65c5c4

4 files changed

Lines changed: 26 additions & 22 deletions

File tree

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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,15 @@ public function subscribeMethods(string $eventClass): array
115115
return $this->subscribeCache[$eventClass];
116116
}
117117

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

123128
$this->subscribeCache[$eventClass] = array_map(
124129
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)