Completed
Push — master ( 280d59...d4e593 )
by Iman
10:04
created

RouterEventManager::wrapCallbacksForIgnore()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 1
nop 1
dl 0
loc 10
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Imanghafoori\HeyMan\WatchingStrategies;
4
5
use Illuminate\Support\Str;
6
7
class RouterEventManager
8
{
9
    private $target;
10
11
    private $value;
12
13
    private $routeNames = [];
14
15
    private $actions = [];
16
17
    private $urls = [];
18
19
    /**
20
     * RouterEventManager constructor.
21
     *
22
     * @param $target
23
     * @param $value
24
     *
25
     * @return \Imanghafoori\HeyMan\WatchingStrategies\RouterEventManager
26
     */
27 48
    public function init($target, $value)
28
    {
29 48
        $this->target = $target;
30 48
        $this->value = $value;
31
32 48
        return $this;
33
    }
34
35 40
    public function getUrls($url)
36
    {
37 40
        return $this->resolveCallbacks($url, 'urls');
38
    }
39
40 28
    public function getRouteNames($routeName)
41
    {
42 28
        return $this->resolveCallbacks($routeName, 'routeNames');
43
    }
44
45 26
    public function getActions($action)
46
    {
47 26
        return $this->resolveCallbacks($action, 'actions');
48
    }
49
50
    /**
51
     * @param $callback
52
     */
53 40
    public function startGuarding(callable $callback)
54
    {
55 40
        foreach ($this->value as $value) {
56 40
            $this->{$this->target}[$value][] = $callback;
57
        }
58 40
    }
59
60
    /**
61
     * @param $action
62
     * @param $type
63
     *
64
     * @return array
65
     */
66 40
    private function resolveCallbacks($action, $type): array
67
    {
68 40
        if (array_key_exists($action, $this->{$type})) {
69 31
            $callbacks = $this->{$type}[$action];
70
71 31
            return $this->wrapCallbacksForIgnore($callbacks);
72
        }
73
74 29
        foreach ($this->{$type} as $pattern => $callbacks) {
75 11
            if (Str::is($pattern, $action)) {
76 11
                return $this->wrapCallbacksForIgnore($callbacks);
77
            }
78
        }
79
80
        return [function () {
81 28
        }];
82
    }
83
84
    /**
85
     * @param $callbacks
86
     *
87
     * @return array
88
     */
89 36
    private function wrapCallbacksForIgnore($callbacks): array
90
    {
91
        return array_map(function ($callback) {
92 36
            return function () use ($callback)
93 27
            {
94
                if (! config('heyman_ignore_route', false)) {
95 36
                    $callback();
96
                }
97
            };
98
        }, $callbacks);
99
    }
100
}
101