Skip to content

Commit 1227309

Browse files
Introduce SelfStampableInterface
1 parent e9aa2ad commit 1227309

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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\Message;
13+
14+
use Symfony\Component\Messenger\Stamp\StampInterface;
15+
16+
interface SelfStampableInterface
17+
{
18+
/**
19+
* @return array<StampInterface>
20+
*/
21+
public function getStamps(): array;
22+
}

src/Symfony/Component/Messenger/MessageBus.php

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

1212
namespace Symfony\Component\Messenger;
1313

14+
use Symfony\Component\Messenger\Message\SelfStampableInterface;
1415
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
1516
use Symfony\Component\Messenger\Middleware\StackMiddleware;
1617

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

5455
public function dispatch(object $message, array $stamps = []): Envelope
5556
{
57+
if ($message instanceof SelfStampableInterface) {
58+
$stamps = array_merge($message->getStamps(), $stamps);
59+
}
60+
5661
$envelope = Envelope::wrap($message, $stamps);
5762
$middlewareIterator = $this->middlewareAggregate->getIterator();
5863

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Symfony\Component\Messenger\Tests\Fixtures;
4+
5+
use Symfony\Component\Messenger\Message\SelfStampableInterface;
6+
use Symfony\Component\Messenger\Stamp\DelayStamp;
7+
8+
class SelfStampableDummyMessage implements DummyMessageInterface, SelfStampableInterface
9+
{
10+
public function __construct(private string $message)
11+
{
12+
}
13+
14+
public function getMessage(): string
15+
{
16+
return $this->message;
17+
}
18+
19+
public function getStamps(): array
20+
{
21+
return [new DelayStamp(1)];
22+
}
23+
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
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;
2526

2627
class MessageBusTest extends TestCase
2728
{
@@ -133,6 +134,14 @@ public function testItAddsTheStampsToEnvelope()
133134
$this->assertCount(2, $finalEnvelope->all());
134135
}
135136

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+
136145
public static function provideConstructorDataStucture(): iterable
137146
{
138147
yield 'iterator' => [new \ArrayObject([

0 commit comments

Comments
 (0)