MessageTask::messageClass()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 1
c 1
b 0
f 1
dl 0
loc 3
ccs 0
cts 0
cp 0
rs 10
cc 2
nc 2
nop 0
crap 6
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Schedule\Task;
4
5
use Symfony\Component\Messenger\Envelope;
6
use Symfony\Component\Messenger\Stamp\StampInterface;
7
use Zenstruck\ScheduleBundle\Schedule\HasMissingDependencyMessage;
8
use Zenstruck\ScheduleBundle\Schedule\Task;
9
10
/**
11
 * @experimental This is experimental and may experience BC breaks
12
 *
13
 * @author Kevin Bond <[email protected]>
14
 */
15
final class MessageTask extends Task implements HasMissingDependencyMessage
16
{
17
    /** @var object|Envelope */
18
    private $message;
19
20
    /** @var StampInterface[] */
21
    private $stamps;
22
23
    /**
24 12
     * @param object|Envelope  $message
25
     * @param StampInterface[] $stamps
26 12
     */
27 12
    public function __construct(object $message, array $stamps = [])
28
    {
29 12
        $this->message = $message;
30 12
        $this->stamps = $stamps;
31
32
        parent::__construct($this->messageClass());
33
    }
34
35 6
    /**
36
     * @return object|Envelope
37 6
     */
38
    public function getMessage(): object
39
    {
40
        return $this->message;
41
    }
42
43 6
    /**
44
     * @return StampInterface[]
45 6
     */
46
    public function getStamps(): array
47
    {
48 2
        return $this->stamps;
49
    }
50 2
51 2
    public function getContext(): array
52
    {
53
        $stamps = \array_merge(
54 2
            $this->message instanceof Envelope ? \array_keys($this->message->all()) : [],
55
            \array_map(static function(StampInterface $stamp) { return \get_class($stamp); }, $this->stamps)
56 1
        );
57 2
        $stamps = \array_map(
58 2
            static function(string $stamp) {
59
                /** @var class-string $stamp */
60 2
                return (new \ReflectionClass($stamp))->getShortName();
61
            },
62
            $stamps
63 2
        );
64 2
        $stamps = \implode(', ', \array_unique($stamps));
65
66
        return [
67
            'Message' => $this->messageClass(),
68 1
            'Stamps' => $stamps ?: '(none)',
69
        ];
70 1
    }
71
72
    public static function getMissingDependencyMessage(): string
73 12
    {
74
        return 'To use the message task you must install symfony/messenger (composer require symfony/messenger) and enable (config path: "zenstruck_schedule.messenger").';
75 12
    }
76
77
    private function messageClass(): string
78
    {
79
        return $this->message instanceof Envelope ? \get_class($this->message->getMessage()) : \get_class($this->message);
80
    }
81
}
82