8000 Rework · symfony/symfony@7ae6408 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7ae6408

Browse files
Rework
1 parent 1227309 commit 7ae6408

File tree

10 files changed

+99
-17
lines changed

10 files changed

+99
-17
lines changed

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

Lines 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

Lines 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

Lines 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

Lines 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

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)
0