AbstractJob::run()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 15
ccs 0
cts 9
cp 0
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 0
crap 6
1
<?php
2
3
/**
4
 * @author    Flipbox Factory
5
 * @copyright Copyright (c) 2017, Flipbox Digital
6
 * @link      https://github.com/flipbox/queue/releases/latest
7
 * @license   https://github.com/flipbox/queue/blob/master/LICENSE
8
 */
9
10
namespace flipbox\queue\jobs;
11
12
use flipbox\queue\events\AfterJobRun;
13
use flipbox\queue\events\BeforeJobRun;
14
use flipbox\queue\jobs\traits\JobTrait;
15
use flipbox\queue\jobs\traits\OptionsTrait;
16
use flipbox\queue\Queue;
17
use flipbox\queue\queues\MultipleQueueInterface;
18
use yii\base\Component;
19
20
/**
21
 * @author Flipbox Factory <[email protected]>
22
 * @since 1.0.0
23
 */
24
abstract class AbstractJob extends Component implements JobInterface
25
{
26
27
    use JobTrait, OptionsTrait;
28
29
    /**
30
     * Event executed before a job is being executed.
31
     */
32
    const EVENT_BEFORE_RUN = 'beforeRun';
33
34
    /**
35
     * Event executed after a job is being executed.
36
     */
37
    const EVENT_AFTER_RUN = 'afterRun';
38
39
    /**
40
     * @return mixed
41
     */
42
    abstract protected function runInternal();
43
44
    /**
45
     * @param null $index
46
     * @return bool
47
     */
48
    public function toQueue($index = null): bool
49
    {
50
        $queue = Queue::getInstance()->getQueue();
51
52
        if ($queue instanceof MultipleQueueInterface) {
53
            return $queue->postToQueue($this, $index);
54
        }
55
56
        return Queue::getInstance()->getQueue()->post($this);
57
    }
58
59
    /**
60
     * @inheritdoc
61
     */
62
    public function run()
63
    {
64
        // Before event
65
        if (!$this->beforeRun()) {
66
            return false;
67
        }
68
69
        // Run the actual job
70
        $value = $this->runInternal();
71
72
        // After event
73
        $this->afterRun($value);
74
75
        return $value;
76
    }
77
78
    /**
79
     * @return bool
80
     */
81
    protected function beforeRun()
82
    {
83
        $this->trigger(
84
            self::EVENT_BEFORE_RUN,
85
            $beforeEvent = new BeforeJobRun()
86
        );
87
88
        return $beforeEvent->isValid;
89
    }
90
91
    /**
92
     * @param $value
93
     */
94
    protected function afterRun($value)
95
    {
96
        $this->trigger(
97
            self::EVENT_BEFORE_RUN,
98
            $beforeEvent = new AfterJobRun([
99
                'value' => $value
100
            ])
101
        );
102
    }
103
104
    /**
105
     * @return array
106
     */
107
    public function toConfig(): array
108
    {
109
        return [
110
            'class' => get_class($this),
111
            'options' => $this->getOptions()->toConfig()
112
        ];
113
    }
114
}
115