Skip to content

Commit ba3adb1

Browse files
Rework
1 parent d95cef4 commit ba3adb1

File tree

11 files changed

+105
-18
lines changed

11 files changed

+105
-18
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2353,6 +2353,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
23532353

23542354
$defaultMiddleware = [
23552355
'before' => [
2356+
['id' => 'add_self_stampable_stamps_middleware'],
23562357
['id' => 'add_bus_name_stamp_middleware'],
23572358
['id' => 'reject_redelivered_message_middleware'],
23582359
['id' => 'dispatch_after_current_bus'],

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
2727
use Symfony\Component\Messenger\Handler\RedispatchMessageHandler;
2828
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
29+
use Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware;
2930
use Symfony\Component\Messenger\Middleware\DeduplicateMiddleware;
3031
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
3132
use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware;
@@ -93,6 +94,8 @@
9394
service('lock.factory'),
9495
])
9596

97+
->set('messenger.middleware.add_self_stampable_stamps_middleware', AddSelfStampableStampsMiddleware::class)
98+
9699
->set('messenger.middleware.add_bus_name_stamp_middleware', AddBusNameStampMiddleware::class)
97100
->abstract()
98101

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,7 @@ public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware()
10701070
$this->assertTrue($container->has('messenger.bus.commands'));
10711071
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
10721072
$this->assertEquals([
1073+
['id' => 'add_self_stampable_stamps_middleware'],
10731074
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
10741075
['id' => 'reject_redelivered_message_middleware'],
10751076
['id' => 'dispatch_after_current_bus'],
@@ -1080,6 +1081,7 @@ public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware()
10801081
$this->assertTrue($container->has('messenger.bus.events'));
10811082
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
10821083
$this->assertEquals([
1084+
['id' => 'add_self_stampable_stamps_middleware'],
10831085
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
10841086
['id' => 'reject_redelivered_message_middleware'],
10851087
['id' => 'dispatch_after_current_bus'],
@@ -1112,6 +1114,7 @@ public function testMessengerWithAddBusNameStampMiddleware()
11121114
$this->assertTrue($container->has('messenger.bus.events'));
11131115
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
11141116
$this->assertEquals([
1117+
['id' => 'add_self_stampable_stamps_middleware'],
11151118
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
11161119
['id' => 'reject_redelivered_message_middleware'],
11171120
['id' => 'dispatch_after_current_bus'],
@@ -1132,6 +1135,7 @@ public function testMessengerWithMultipleBusesWithDeduplicateMiddleware()
11321135
$this->assertTrue($container->has('messenger.bus.commands'));
11331136
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
11341137
$this->assertEquals([
1138+
['id' => 'add_self_stampable_stamps_middleware'],
11351139
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
11361140
['id' => 'reject_redelivered_message_middleware'],
11371141
['id' => 'dispatch_after_current_bus'],
@@ -1143,6 +1147,7 @@ public function testMessengerWithMultipleBusesWithDeduplicateMiddleware()
11431147
$this->assertTrue($container->has('messenger.bus.events'));
11441148
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
11451149
$this->assertEquals([
1150+
['id' => 'add_self_stampable_stamps_middleware'],
11461151
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
11471152
['id' => 'reject_redelivered_message_middleware'],
11481153
['id' => 'dispatch_after_current_bus'],

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"symfony/http-client": "^6.4|^7.0|^8.0",
5252
"symfony/lock": "^6.4|^7.0|^8.0",
5353
"symfony/mailer": "^6.4|^7.0|^8.0",
54-
"symfony/messenger": "^6.4|^7.0|^8.0",
54+
"symfony/messenger": "^7.4|^8.0",
5555
"symfony/mime": "^6.4|^7.0|^8.0",
5656
"symfony/notifier": "^6.4|^7.0|^8.0",
5757
"symfony/object-mapper": "^7.3|^8.0",
@@ -91,7 +91,7 @@
9191
"symfony/form": "<6.4",
9292
"symfony/lock": "<6.4",
9393
"symfony/mailer": "<6.4",
94-
"symfony/messenger": "<6.4",
94+
"symfony/messenger": "<7.4",
9595
"symfony/mime": "<6.4",
9696
"symfony/property-info": "<6.4",
9797
"symfony/property-access": "<6.4",

src/Symfony/Component/Messenger/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
7.4
5+
---
6+
7+
* Add `Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware` and `Symfony\Component\Messenger\Message\SelfStampableInterface`
8+
49
7.3
510
---
611

src/Symfony/Component/Messenger/Message/SelfStampableInterface.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
interface SelfStampableInterface
1717
{
1818
/**
19+
* List of stamps which will be automatically added to the envelope,
20+
* if there is no other stamp of the same class already set.
21+
*
1922
* @return array<StampInterface>
2023
*/
21-
public function getStamps(): array;
24+
public function getDefaultStamps(): array;
2225
}

src/Symfony/Component/Messenger/MessageBus.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
namespace Symfony\Component\Messenger;
1313

14-
use Symfony\Component\Messenger\Message\SelfStampableInterface;
1514
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
1615
use Symfony\Component\Messenger\Middleware\StackMiddleware;
1716

@@ -54,10 +53,6 @@ public function getIterator(): \Traversable
5453

5554
public function dispatch(object $message, array $stamps = []): Envelope
5655
{
57-
if ($message instanceof SelfStampableInterface) {
58-
$stamps = array_merge($message->getStamps(), $stamps);
59-
}
60-
6156
$envelope = Envelope::wrap($message, $stamps);
6257
$middlewareIterator = $this->middlewareAggregate->getIterator();
6358

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Messenger\Middleware;
13+
14+
use Symfony\Component\Messenger\Envelope;
15+
use Symfony\Component\Messenger\Message\SelfStampableInterface;
16+
17+
/**
18+
* Automatically add stamps from the SelfStampableInterface.
19+
*/
20+
class AddSelfStampableStampsMiddleware implements MiddlewareInterface
21+
{
22+
public function handle(Envelope $envelope, StackInterface $stack): Envelope
23+
{
24+
$message = $envelope->getMessage();
25+
if ($message instanceof SelfStampableInterface) {
26+
foreach ($message->getDefaultStamps() as $stamp) {
27+
if (null === $envelope->last($stamp::class)) {
28+
$envelope = $envelope->with($stamp);
29+
}
30+
}
31+
}
32+
33+
return $stack->next()->handle($envelope, $stack);
34+
}
35+
}

src/Symfony/Component/Messenger/Tests/Fixtures/SelfStampableDummyMessage.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public function getMessage(): string
1616
return $this->message;
1717
}
1818

19-
public function getStamps(): array
19+
public function getDefaultStamps(): array
2020
{
2121
return [new DelayStamp(1)];
2222
}

src/Symfony/Component/Messenger/Tests/MessageBusTest.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2323
use Symfony\Component\Messenger\Tests\Fixtures\AnEnvelopeStamp;
2424
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
25-
use Symfony\Component\Messenger\Tests\Fixtures\SelfStampableDummyMessage;
2625

2726
class MessageBusTest extends TestCase
2827
{
@@ -134,14 +133,6 @@ public function testItAddsTheStampsToEnvelope()
134133
$this->assertCount(2, $finalEnvelope->all());
135134
}
136135

137-
public function testSelfStampableMessage()
138-
{
139-
$finalEnvelope = (new MessageBus())->dispatch(new SelfStampableDummyMessage(''), [new DelayStamp(5), new BusNameStamp('bar')]);
140-
$this->assertCount(2, $finalEnvelope->all());
141-
$this->assertCount(2, $finalEnvelope->all()[DelayStamp::class]);
142-
$this->assertSame(5, $finalEnvelope->last(DelayStamp::class)->getDelay());
143-
}
144-
145136
public static function provideConstructorDataStucture(): iterable
146137
{
147138
yield 'iterator' => [new \ArrayObject([
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Messenger\Tests\Middleware;
13+
14+
use Symfony\Component\Messenger\Envelope;
15+
use Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware;
16+
use Symfony\Component\Messenger\Stamp\DelayStamp;
17+
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
18+
use Symfony\Component\Messenger\Tests\Fixtures\SelfStampableDummyMessage;
19+
20+
final class AddSelfStampableStampsMiddlewareTest extends MiddlewareTestCase
21+
{
22+
public function testSelfStampableStampsMiddleware()
23+
{
24+
$message = new SelfStampableDummyMessage('');
25+
$envelope = new Envelope($message);
26+
27+
$decorator = new AddSelfStampableStampsMiddleware();
28+
29+
$envelope = $decorator->handle($envelope, $this->getStackMock(true));
30+
31+
$delayStamp = $envelope->last(DelayStamp::class);
32+
$this->assertNotNull($delayStamp);
33+
$this->assertSame(1, $delayStamp->getDelay());
34+
}
35+
36+
public function testSelfStampableStampsMiddlewareIfStampExists()
37+
{
38+
$message = new SelfStampableDummyMessage('');
39+
$envelope = new Envelope($message, [new DelayStamp(5)]);
40+
41+
$decorator = new AddSelfStampableStampsMiddleware();
42+
43+
$envelope = $decorator->handle($envelope, $this->getStackMock(true));
44+
45+
$delayStamp = $envelope->last(DelayStamp::class);
46+
$this->assertNotNull($delayStamp);
47+
$this->assertSame(5, $delayStamp->getDelay());
48+
}
49+
}

0 commit comments

Comments
 (0)