Failed Conditions
Branch refactor/kernels (2fb3f9)
by Atanas
01:46
created

HasMiddlewareDefinitionsTrait::expandMiddleware()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 1
dl 0
loc 11
ccs 2
cts 2
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @package   WPEmerge
4
 * @author    Atanas Angelov <[email protected]>
5
 * @copyright 2018 Atanas Angelov
6
 * @license   https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0
7
 * @link      https://wpemerge.com/
8
 */
9
10
namespace WPEmerge\Routing;
11
12
use WPEmerge\Exceptions\ConfigurationException;
13
use WPEmerge\Middleware\MiddlewareInterface;
14
15
/**
16
 * Provide middleware sorting.
17
 */
18
trait HasMiddlewareDefinitionsTrait {
19
	/**
20
	 * Middleware available to the application.
21
	 *
22
	 * @var array<string, string>
23
	 */
24
	protected $middleware = [];
25
26
	/**
27
	 * Middleware groups.
28
	 *
29
	 * @var array<string, array<string>>
30
	 */
31
	protected $middleware_groups = [];
32
33
	/**
34
	 * Register middleware.
35
	 *
36
	 * @codeCoverageIgnore
37
	 * @param  array<string, string> $middleware
38
	 * @return void
39
	 */
40
	public function setMiddleware( $middleware ) {
41
		$this->middleware = $middleware;
42
	}
43
44
	/**
45
	 * Register middleware groups.
46
	 *
47
	 * @codeCoverageIgnore
48
	 * @param  array<string, array<string>> $middleware_groups
49
	 * @return void
50
	 */
51
	public function setMiddlewareGroups( $middleware_groups ) {
52
		$this->middleware_groups = $middleware_groups;
53
	}
54
55
	/**
56
	 * Filter array of middleware into a unique set.
57
	 *
58
	 * @param  array<string> $middleware
59
	 * @return array<string>
60
	 */
61
	public function uniqueMiddleware( $middleware ) {
62
		return array_values( array_unique( $middleware, SORT_REGULAR ) );
63
	}
64
65
	/**
66
	 * Expand array of middleware into an array of fully qualified class names.
67
	 *
68
	 * @param  array<string> $middleware
69
	 * @return array<string>
70
	 */
71
	public function expandMiddleware( $middleware ) {
72
		$classes = [];
73
74
		foreach ( $middleware as $item ) {
75
			$classes = array_merge(
76
				$classes,
77
				$this->expandMiddlewareItem( $item )
78
			);
79 1
		}
80 1
81
		return $classes;
82 1
	}
83 1
84 1
	/**
85 1
	 * Expand a middleware group into an array of fully qualified class names.
86 1
	 *
87
	 * @param  string        $group
88 1
	 * @return array<string>
89
	 */
90
	public function expandMiddlewareGroup( $group ) {
91 1
		if ( ! isset( $this->middleware_groups[ $group ] ) ) {
92
			throw new ConfigurationException( 'Unknown middleware group "' . $group . '" used.' );
93
		}
94 1
95
		return $this->expandMiddleware( $this->middleware_groups[ $group ] );
96
	}
97
98
	/**
99
	 * Expand a middleware into a fully qualified class name.
100
	 *
101
	 * @param  string        $middleware
102
	 * @return array<string>
103 2
	 */
104 2
	public function expandMiddlewareItem( $middleware ) {
105 1
		if ( is_subclass_of( $middleware, MiddlewareInterface::class ) ) {
106
			return [$middleware];
107
		}
108 1
109
		if ( isset( $this->middleware_groups[ $middleware ] ) ) {
110
			return $this->expandMiddlewareGroup( $middleware );
111
		}
112
113
		if ( ! isset( $this->middleware[ $middleware ] ) ) {
114
			throw new ConfigurationException( 'Unknown middleware "' . $middleware . '" used.' );
115
		}
116
117 3
		return [$this->middleware[ $middleware ]];
118 3
	}
119
}
120