Skip to content

Commit 8ac2a0b

Browse files
authored
Merge pull request #26 from nepster-web/alpha-4
enh: close #22
2 parents 812ef64 + 91a2158 commit 8ac2a0b

12 files changed

+143
-567
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
/vendor/
55
/.phpunit.result.cache
66
/.php_cs.cache
7-
/docs/tmp/
7+
/docs/tmp/
8+
/.coverage.clover

CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ A changelog of all notable changes made to this library.
1919
----------------------
2020

2121

22-
1.0.0-Alpha-4 ???? ??, 2021
22+
1.0.0-Alpha-4 April 7, 2021
2323
---------------------------
24-
24+
- *ENH*: [#22](https://github.com/nepster-web/php-simple-queue/issues/22) - implementation [Context](./src/Context.php) for jobs and processors
25+
- *ENH*: Improved documentation
2526

2627

2728
1.0.0-Alpha-3 March 31, 2021

README.md

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,15 @@ $transport = new \Simple\Queue\Transport\DoctrineDbalTransport($connection);
5959
```
6060

6161

62-
Create configuration ([see more information](./docs/guide/configuration.md)):
62+
### Send a new message to queue (producing)
6363

6464
```php
6565
$config = \Simple\Queue\Config::getDefault()
66-
->changeRedeliveryTimeInSeconds(100)
67-
->changeNumberOfAttemptsBeforeFailure(3)
68-
->registerJob(MyJob::class, new MyJob())
69-
->registerProcessor('my_queue', static function(\Simple\Queue\Message $message, \Simple\Queue\Producer $producer): string {
70-
66+
->registerProcessor('my_queue', static function(\Simple\Queue\Context $context): string {
7167
// Your message handling logic
72-
7368
return \Simple\Queue\Consumer::STATUS_ACK;
7469
});
75-
```
76-
77-
### Send a new message to queue (producing)
78-
79-
```php
70+
8071
$producer = new \Simple\Queue\Producer($transport, $config);
8172

8273
$message = $producer->createMessage('my_queue', ['key' => 'value']);
@@ -88,6 +79,9 @@ $producer->send($message);
8879
### Job dispatching (producing)
8980

9081
```php
82+
$config = \Simple\Queue\Config::getDefault()
83+
->registerJob(MyJob::class, new MyJob());
84+
9185
$producer = new \Simple\Queue\Producer($transport, $config);
9286

9387
$producer->dispatch(MyJob::class, ['key' => 'value']);

coverage.clover

Lines changed: 0 additions & 530 deletions
This file was deleted.

docs/guide/consuming.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class SendInfoToTelegramJob extends \Simple\Queue\Job
8181
return 5;
8282
}
8383

84-
public function handle(\Simple\Queue\Message $message, \Simple\Queue\Producer $producer): string
84+
public function handle(\Simple\Queue\Context $context): string
8585
{
8686
// your logic
8787

src/Consumer.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,7 @@ protected function processing(Message $message): void
115115
if ($message->isJob()) {
116116
try {
117117
$job = $this->config->getJob($message->getEvent());
118-
119-
$result = $job->handle($message, $this->producer);
120-
118+
$result = $job->handle($this->getContext($message));
121119
$this->processSuccessResult($result, $message);
122120
} catch (Throwable $exception) {
123121
$this->processFailureResult($exception, $message);
@@ -128,8 +126,7 @@ protected function processing(Message $message): void
128126

129127
if ($this->config->hasProcessor($message->getQueue())) {
130128
try {
131-
$result = $this->config->getProcessor($message->getQueue())($message, $this->producer);
132-
129+
$result = $this->config->getProcessor($message->getQueue())($this->getContext($message));
133130
$this->processSuccessResult($result, $message);
134131
} catch (Throwable $exception) {
135132
$this->processFailureResult($exception, $message);
@@ -205,4 +202,19 @@ protected function processSuccessResult(string $status, Message $message): void
205202

206203
throw new InvalidArgumentException(sprintf('Unsupported result status: "%s".', $status));
207204
}
205+
206+
/**
207+
* @param Message $message
208+
* @return Context
209+
*/
210+
protected function getContext(Message $message): Context
211+
{
212+
$data = $this->config->getSerializer()->deserialize($message->getBody());
213+
214+
return new Context(
215+
$this->producer,
216+
$message,
217+
is_array($data) ? $data : [$data]
218+
);
219+
}
208220
}

src/Context.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Simple\Queue;
6+
7+
/**
8+
* Class Context
9+
* @package Simple\Queue
10+
*/
11+
class Context
12+
{
13+
/** @var Producer */
14+
private Producer $producer;
15+
16+
/** @var array */
17+
private array $data;
18+
19+
/** @var Message */
20+
private Message $message;
21+
22+
/**
23+
* Context constructor.
24+
* @param Producer $producer
25+
* @param Message $message
26+
* @param array $data
27+
*/
28+
public function __construct(Producer $producer, Message $message, array $data)
29+
{
30+
$this->producer = $producer;
31+
$this->data = $data;
32+
$this->message = $message;
33+
}
34+
35+
/**
36+
* @return Producer
37+
*/
38+
public function getProducer(): Producer
39+
{
40+
return $this->producer;
41+
}
42+
43+
/**
44+
* @return Message
45+
*/
46+
public function getMessage(): Message
47+
{
48+
return $this->message;
49+
}
50+
51+
/**
52+
* @return array
53+
*/
54+
public function getData(): array
55+
{
56+
return $this->data;
57+
}
58+
}

src/Job.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
abstract class Job
1212
{
1313
/**
14-
* @param Message $message
15-
* @param Producer $producer
16-
* @return mixed
14+
* @param Context $context
15+
* @return string
1716
*/
18-
abstract public function handle(Message $message, Producer $producer): string;
17+
abstract public function handle(Context $context): string;
1918

2019
/**
2120
* @return string

tests/ConfigTest.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66

77
use Simple\Queue\Job;
88
use Simple\Queue\Config;
9-
use Simple\Queue\Message;
9+
use Simple\Queue\Context;
1010
use Simple\Queue\Consumer;
11-
use Simple\Queue\Producer;
1211
use PHPUnit\Framework\TestCase;
1312
use Simple\Queue\QueueException;
1413
use Simple\Queue\ConfigException;
@@ -58,14 +57,14 @@ public function testDefaultGetJobs(): void
5857
public function testSeveralGetJobs(): void
5958
{
6059
$job1 = new class extends Job {
61-
public function handle(Message $message, Producer $producer): string
60+
public function handle(Context $context): string
6261
{
6362
return Consumer::STATUS_ACK;
6463
}
6564
};
6665

6766
$job2 = new class extends Job {
68-
public function handle(Message $message, Producer $producer): string
67+
public function handle(Context $context): string
6968
{
7069
return Consumer::STATUS_ACK;
7170
}
@@ -99,7 +98,7 @@ public function testHasNotRegistrationJob(): void
9998
public function testRegistrationJob(): void
10099
{
101100
$job = new class extends Job {
102-
public function handle(Message $message, Producer $producer): string
101+
public function handle(Context $context): string
103102
{
104103
return Consumer::STATUS_ACK;
105104
}
@@ -119,7 +118,7 @@ public function testRegistrationExistJob(): void
119118
$this->expectExceptionMessage(sprintf('Job "%s" is already registered.', 'myJob'));
120119

121120
$job = new class extends Job {
122-
public function handle(Message $message, Producer $producer): string
121+
public function handle(Context $context): string
123122
{
124123
return Consumer::STATUS_ACK;
125124
}
@@ -136,7 +135,7 @@ public function testRegistrationJobWithIncorrectAlias(): void
136135
$this->expectExceptionMessage(sprintf('Job alias "%s" contains invalid characters.', '!@#$%^&*()_+'));
137136

138137
$job = new class extends Job {
139-
public function handle(Message $message, Producer $producer): string
138+
public function handle(Context $context): string
140139
{
141140
return Consumer::STATUS_ACK;
142141
}
@@ -149,7 +148,7 @@ public function handle(Message $message, Producer $producer): string
149148
public function testGetAliasInRegistrationJob(): void
150149
{
151150
$job = new class extends Job {
152-
public function handle(Message $message, Producer $producer): string
151+
public function handle(Context $context): string
153152
{
154153
return Consumer::STATUS_ACK;
155154
}

tests/ContextTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Simple\QueueTest;
6+
7+
use Simple\Queue\Context;
8+
use Simple\Queue\Message;
9+
use Simple\Queue\Producer;
10+
use PHPUnit\Framework\TestCase;
11+
use Simple\QueueTest\Helper\MockConnection;
12+
use Simple\Queue\Transport\DoctrineDbalTransport;
13+
14+
/**
15+
* Class ContextTest
16+
* @package Simple\QueueTest
17+
*/
18+
class ContextTest extends TestCase
19+
{
20+
public function testDefault(): void
21+
{
22+
$connection = new MockConnection();
23+
24+
$transport = new class($connection) extends DoctrineDbalTransport {
25+
public static Message $message;
26+
27+
public function send(Message $message): void
28+
{
29+
self::$message = $message;
30+
}
31+
};
32+
33+
$producer = new Producer($transport);
34+
$message = $producer->createMessage('my_queue', '');
35+
36+
$context = new Context($producer, $message, []);
37+
38+
self::assertEquals($producer, $context->getProducer());
39+
self::assertEquals($message, $context->getMessage());
40+
self::assertEquals([], $context->getData());
41+
}
42+
}

tests/JobTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
namespace Simple\QueueTest;
66

77
use Simple\Queue\Job;
8-
use Simple\Queue\Message;
8+
use Simple\Queue\Context;
99
use Simple\Queue\Consumer;
10-
use Simple\Queue\Producer;
1110
use PHPUnit\Framework\TestCase;
1211

1312
/**
@@ -36,7 +35,7 @@ public function testDefaultAttempts(): void
3635
private function generateBaseJob(): Job
3736
{
3837
return new class extends Job {
39-
public function handle(Message $message, Producer $producer): string
38+
public function handle(Context $context): string
4039
{
4140
return Consumer::STATUS_ACK;
4241
}

tests/ProducerTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use DateTimeImmutable;
1010
use Simple\Queue\Config;
1111
use Simple\Queue\Status;
12+
use Simple\Queue\Context;
1213
use Simple\Queue\Message;
1314
use Simple\Queue\Consumer;
1415
use Simple\Queue\Producer;
@@ -118,7 +119,7 @@ public function testDispatch(): void
118119
$transport = new DoctrineDbalTransport($connection);
119120

120121
$job = new class() extends Job {
121-
public function handle(Message $message, Producer $producer): string
122+
public function handle(Context $context): string
122123
{
123124
return Consumer::STATUS_ACK;
124125
}

0 commit comments

Comments
 (0)