Completed
Push — extensions-support ( f010b3...0f14db )
by Guido
04:02
created

Queueable::callIfCallable()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 5
cts 5
cp 1
rs 9.4285
cc 2
eloc 3
nc 2
nop 2
crap 2
1
<?php
2
3
namespace LaravelDoctrine\Fluent\Builders\Traits;
4
5
use LaravelDoctrine\Fluent\Buildable;
6
use LaravelDoctrine\Fluent\Builders\Delay;
7
8
trait Queueable
9
{
10
    /**
11
     * @var Buildable[]
12
     */
13
    protected $queued = [];
14
15
    /**
16
     * @param Buildable $buildable
17
     */
18 180
    protected function queue(Buildable $buildable)
19
    {
20 180
        $this->queued[] = $buildable;
21 180
    }
22
23
    /**
24
     * @param Buildable     $buildable
25
     * @param callable|null $callback
26
     */
27 118
    public function callbackAndQueue(Buildable $buildable, callable $callback = null)
28
    {
29 118
        $this->callIfCallable($callback, $buildable);
30
31 118
        $this->queue($buildable);
32 118
    }
33
34
    /**
35
     * Execute the build process for all queued buildables
36
     */
37 256
    public function build()
38
    {
39
        /** @var Buildable[] $queued */
40 256
        $queued = $this->getQueued();
41
42 256
        usort($queued, function (Buildable $buildable) {
43 81
            return $buildable instanceof Delay ? 1 : 0;
44 256
        });
45
46 256
        foreach ($queued as $buildable) {
47 113
            $buildable->build();
48 256
        }
49 256
    }
50
51
    /**
52
     * @return \LaravelDoctrine\Fluent\Buildable[]
53
     */
54 290
    public function getQueued()
55
    {
56 290
        return $this->queued;
57
    }
58
59
    /**
60
     * Call the callable... only if it is really one.
61
     *
62
     * @param callable|null $callback
63
     * @param mixed         $builder
64
     *
65
     * @return void
66
     */
67 124
    protected function callIfCallable($callback, $builder)
68
    {
69 124
        if (is_callable($callback)) {
70 26
            $callback($builder);
71 26
        }
72 124
    }
73
}
74