Code Coverage |
||||||||||||||||
Lines |
Branches |
Paths |
Functions and Methods |
Classes and Traits |
||||||||||||
Total | |
100.00% |
26 / 26 |
|
100.00% |
18 / 18 |
|
87.50% |
14 / 16 |
|
100.00% |
13 / 13 |
CRAP | |
100.00% |
1 / 1 |
HookCollection | |
100.00% |
26 / 26 |
|
100.00% |
18 / 18 |
|
87.50% |
14 / 16 |
|
100.00% |
13 / 13 |
17.56 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
3 | |||
offsetExists | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
offsetGet | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
offsetSet | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
offsetUnset | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
exists | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
__call | |
100.00% |
7 / 7 |
|
100.00% |
6 / 6 |
|
50.00% |
2 / 4 |
|
100.00% |
1 / 1 |
4.12 | |||
count | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
rewind | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
next | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
current | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
valid | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
key | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 |
1 | <?php namespace GorillaClaw; |
2 | |
3 | class HookCollection implements \ArrayAccess, \Countable, \Iterator { |
4 | protected array $wp_filter; |
5 | protected array $callbacks; |
6 | |
7 | function __construct(array $wp_filter) { |
8 | $this->wp_filter = $wp_filter; |
9 | |
10 | $collect = []; |
11 | |
12 | array_walk($this->wp_filter, function($entry, $hook_name) use (&$collect) { |
13 | foreach($entry as $priority => $callbacks) { |
14 | foreach($callbacks as $function_key => $callback) { |
15 | $collect[] = new Hook($hook_name, $callback, $priority, $function_key); |
16 | } |
17 | } |
18 | }); |
19 | |
20 | $this->callbacks = $collect; |
21 | } |
22 | |
23 | public function offsetExists(mixed $offset): bool { |
24 | return isset($this->callbacks[$offset]); |
25 | } |
26 | |
27 | public function offsetGet(mixed $offset): mixed { |
28 | return $this->callbacks[$offset]; |
29 | } |
30 | |
31 | public function offsetSet(mixed $offset, mixed $value): void { |
32 | $this->callbacks[$offset] = $value; |
33 | } |
34 | |
35 | public function offsetUnset(mixed $offset): void { |
36 | unset($this->callbacks[$offset]); |
37 | } |
38 | |
39 | public function exists() { |
40 | return count($this->callbacks) > 0; |
41 | } |
42 | |
43 | function __call($prop, $args) { |
44 | $prohibit = ['rebind']; |
45 | $ret = []; |
46 | |
47 | if(in_array($prop, $prohibit)) { |
48 | throw new \ErrorException("Cannot rebind from a HookCollection"); |
49 | } |
50 | |
51 | foreach($this->callbacks as $hook) { |
52 | $ret[$hook->function_key] = $hook->$prop(...$args); |
53 | } |
54 | |
55 | return $ret; |
56 | } |
57 | |
58 | public function count(): int { |
59 | return count($this->callbacks); |
60 | } |
61 | |
62 | |
63 | public function rewind(): void { |
64 | reset($this->callbacks); |
65 | } |
66 | |
67 | |
68 | public function next(): void { |
69 | next($this->callbacks); |
70 | } |
71 | |
72 | #[\ReturnTypeWillChange] |
73 | public function current(): Hook { |
74 | return current($this->callbacks); |
75 | } |
76 | |
77 | |
78 | public function valid(): bool { |
79 | return key($this->callbacks) !== null; |
80 | } |
81 | |
82 | #[\ReturnTypeWillChange] |
83 | public function key(): int { |
84 | return key($this->callbacks); |
85 | } |
86 | } |