Completed
Pull Request — master (#30)
by Matthew
23:29 queued 08:10
created

MessageableJob::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 4
crap 2
1
<?php
2
3
namespace Dtc\QueueBundle\Model;
4
5
use Dtc\QueueBundle\Util\Util;
6
7
abstract class MessageableJob extends RetryableJob
8
{
9 38
    public function __construct(Worker $worker = null, $batch = false, $priority = 10, \DateTime $whenAt = null)
10
    {
11 38
        parent::__construct($worker, $batch, $priority, $whenAt);
12 38
        if (!$this->getWhenAt()) {
13 38
            $this->setWhenAt(Util::getMicrotimeDateTime());
14
        }
15 38
    }
16
17 35
    protected function toMessageArray()
18
    {
19
        return array(
20 35
            'worker' => $this->getWorkerName(),
21 35
            'args' => $this->getArgs(),
22 35
            'method' => $this->getMethod(),
23 35
            'priority' => $this->getPriority(),
24 35
            'whenAt' => $this->getWhenAt()->format('U.u'),
25 35
            'createdAt' => $this->getCreatedAt()->format('U.u'),
26 35
            'updatedAt' => $this->getUpdatedAt()->format('U.u'),
27 35
            'expiresAt' => ($expiresAt = $this->getExpiresAt()) ? $expiresAt->format('U.u') : null,
28 35
            'retries' => $this->getRetries(),
29 35
            'maxRetries' => $this->getMaxRetries(),
30 35
            'failures' => $this->getFailures(),
31 35
            'maxFailures' => $this->getMaxFailures(),
32 35
            'exceptions' => $this->getExceptions(),
33 35
            'maxExceptions' => $this->getMaxExceptions(),
34
        );
35
    }
36
37
    /**
38
     * @return string A json_encoded version of a queueable version of the object
39
     */
40 8
    public function toMessage()
41
    {
42 8
        return json_encode($this->toMessageArray());
43
    }
44
45
    /**
46
     * @param string $message a json_encoded version of the object
47
     */
48 5
    public function fromMessage($message)
49
    {
50 5
        $arr = json_decode($message, true);
51 5
        if (is_array($arr)) {
52 5
            $this->fromMessageArray($arr);
53
        }
54 5
    }
55
56 24
    protected function fromMessageArray(array $arr)
57
    {
58 24
        if (isset($arr['worker'])) {
59 24
            $this->setWorkerName($arr['worker']);
60
        }
61 24
        if (isset($arr['args'])) {
62 24
            $this->setArgs($arr['args']);
63
        }
64 24
        if (isset($arr['method'])) {
65 24
            $this->setMethod($arr['method']);
66
        }
67 24
        if (isset($arr['priority'])) {
68 21
            $this->setPriority($arr['priority']);
69
        }
70
71 24
        $this->fromMessageArrayRetries($arr);
72 24
        foreach (['expiresAt', 'createdAt', 'updatedAt', 'whenAt'] as $dateField) {
73 24
            if (isset($arr[$dateField])) {
74 24
                $timeStr = $arr[$dateField];
75 24
                if ($timeStr) {
76 24
                    $dateTime = \DateTime::createFromFormat('U.u', $timeStr);
77 24
                    if ($dateTime) {
78 24
                        $method = 'set'.ucfirst($dateField);
79 24
                        $this->$method($dateTime);
80
                    }
81
                }
82
            }
83
        }
84 24
    }
85
86 24
    protected function fromMessagearrayRetries(array $arr)
87
    {
88 24
        if (isset($arr['retries'])) {
89 24
            $this->setRetries($arr['retries']);
90
        }
91 24
        if (isset($arr['maxRetries'])) {
92 24
            $this->setMaxRetries($arr['maxRetries']);
93
        }
94 24
        if (isset($arr['failures'])) {
95 24
            $this->setFailures($arr['failures']);
96
        }
97 24
        if (isset($arr['maxFailures'])) {
98 24
            $this->setMaxFailures($arr['maxFailures']);
99
        }
100 24
        if (isset($arr['exceptions'])) {
101 24
            $this->setExceptions($arr['exceptions']);
102
        }
103 24
        if (isset($arr['maxExceptions'])) {
104 24
            $this->setMaxExceptions($arr['maxExceptions']);
105
        }
106 24
    }
107
}
108