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

Queueable   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 8
c 2
b 0
f 1
lcom 1
cbo 0
dl 0
loc 66
ccs 23
cts 23
cp 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A queue() 0 4 1
A callbackAndQueue() 0 6 1
A build() 0 13 3
A getQueued() 0 4 1
A callIfCallable() 0 6 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