Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d36a59e

Browse filesBrowse files
Rework
1 parent 1227309 commit d36a59e
Copy full SHA for d36a59e

File tree

10 files changed

+99
-17
lines changed
Filter options

10 files changed

+99
-17
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2267,6 +2267,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
22672267

22682268
$defaultMiddleware = [
22692269
'before' => [
2270+
['id' => 'add_self_stampable_stamps_middleware'],
22702271
['id' => 'add_bus_name_stamp_middleware'],
22712272
['id' => 'reject_redelivered_message_middleware'],
22722273
['id' => 'dispatch_after_current_bus'],
@@ -2292,7 +2293,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
22922293
$defaultMiddleware['after'][1]['arguments'] = [$bus['default_middleware']['allow_no_handlers']];
22932294

22942295
// argument to add_bus_name_stamp_middleware
2295-
$defaultMiddleware['before'][0]['arguments'] = [$busId];
2296+
$defaultMiddleware['before'][1]['arguments'] = [$busId];
22962297

22972298
$middleware = array_merge($defaultMiddleware['before'], $middleware, $defaultMiddleware['after']);
22982299
}

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
2626
use Symfony\Component\Messenger\Handler\RedispatchMessageHandler;
2727
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
28+
use Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware;
2829
use Symfony\Component\Messenger\Middleware\DeduplicateMiddleware;
2930
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
3031
use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware;
@@ -92,6 +93,8 @@
9293
service('lock.factory'),
9394
])
9495

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

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,7 @@ public function testMessengerWithMultipleBuses()
10651065

10661066
if (class_exists(DeduplicateMiddleware::class)) {
10671067
$this->assertEquals([
1068+
['id' => 'add_self_stampable_stamps_middleware'],
10681069
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
10691070
['id' => 'reject_redelivered_message_middleware'],
10701071
['id' => 'dispatch_after_current_bus'],
@@ -1075,6 +1076,7 @@ public function testMessengerWithMultipleBuses()
10751076
], $container->getParameter('messenger.bus.commands.middleware'));
10761077
} else {
10771078
$this->assertEquals([
1079+
['id' => 'add_self_stampable_stamps_middleware'],
10781080
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
10791081
['id' => 'reject_redelivered_message_middleware'],
10801082
['id' => 'dispatch_after_current_bus'],
@@ -1089,6 +1091,7 @@ public function testMessengerWithMultipleBuses()
10891091

10901092
if (class_exists(DeduplicateMiddleware::class)) {
10911093
$this->assertEquals([
1094+
['id' => 'add_self_stampable_stamps_middleware'],
10921095
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
10931096
['id' => 'reject_redelivered_message_middleware'],
10941097
['id' => 'dispatch_after_current_bus'],
@@ -1100,6 +1103,7 @@ public function testMessengerWithMultipleBuses()
11001103
], $container->getParameter('messenger.bus.events.middleware'));
11011104
} else {
11021105
$this->assertEquals([
1106+
['id' => 'add_self_stampable_stamps_middleware'],
11031107
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
11041108
['id' => 'reject_redelivered_message_middleware'],
11051109
['id' => 'dispatch_after_current_bus'],

‎src/Symfony/Component/Messenger/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ CHANGELOG
66

77
* Add `SentForRetryStamp` that identifies whether a failed message was sent for retry
88
* Add `Symfony\Component\Messenger\Middleware\DeduplicateMiddleware` and `Symfony\Component\Messenger\Stamp\DeduplicateStamp`
9+
* Add `Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware` and `Symfony\Component\Messenger\Message\SelfStampableInterface`
910

1011
7.2
1112
---

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Message/SelfStampableInterface.php
+4-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/MessageBus.php
-5Lines 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

+35Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/Fixtures/SelfStampableDummyMessage.php
+1-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/MessageBusTest.php
-9Lines 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([
+49Lines 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+
$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+
$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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.