Failed Conditions
Branch refactor/kernels (cc9370)
by Atanas
02:23
created

HasMiddlewareTrait::executeMiddleware()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 3
dl 0
loc 12
ccs 8
cts 8
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\Middleware;
11
12
use Closure;
13
use WPEmerge\Exceptions\ConfigurationException;
14
use WPEmerge\Helpers\MixedType;
15
16
/**
17
 * Allow objects to have middleware.
18
 */
19
trait HasMiddlewareTrait {
20
	/**
21
	 * Array of all registered middleware.
22
	 *
23
	 * @var array
24
	 */
25
	protected $middleware = [];
26
27
	/**
28
	 * Check if the passed entity is a valid middleware.
29
	 *
30
	 * @param  mixed   $middleware
31
	 * @return boolean
32
	 */
33 6
	protected function isMiddleware( $middleware ) {
34
		return (
35 6
			$middleware instanceof Closure
36
			||
37 6
			is_a( $middleware, MiddlewareInterface::class, true )
38
		);
39
	}
40
41
	/**
42
	 * Get registered middleware.
43
	 *
44
	 * @return array
45
	 */
46 1
	public function getMiddleware() {
47 1
		return $this->middleware;
48
	}
49
50
	/**
51
	 * Set registered middleware.
52
	 * Accepts: a class name, an instance of a class, a Closure or an array of any of the previous.
53
	 *
54
	 * @throws ConfigurationException
55
	 * @param  string|\Closure|\WPEmerge\Middleware\MiddlewareInterface|array $middleware
56
	 * @return void
57
	 */
58 3
	public function setMiddleware( $middleware ) {
59 3
		$middleware = MixedType::toArray( $middleware );
60
61 3
		foreach ( $middleware as $item ) {
62 2
			if ( ! $this->isMiddleware( $item ) ) {
63 1
				throw new ConfigurationException(
64
					'Passed middleware must be a closure or the name or instance of a class which ' .
65 2
					'implements the ' . MiddlewareInterface::class . ' interface.'
66
				);
67
			}
68
		}
69
70 2
		$this->middleware = $middleware;
71 2
	}
72
73
	/**
74
	 * Add middleware.
75
	 * Accepts: a class name, an instance of a class, a Closure or an array of any of the previous.
76
	 *
77
	 * @param  string|\Closure|\WPEmerge\Middleware\MiddlewareInterface|array $middleware
78
	 * @return void
79
	 */
80 1
	public function addMiddleware( $middleware ) {
81 1
		$middleware = MixedType::toArray( $middleware );
82
83 1
		$this->setMiddleware( array_merge( $this->getMiddleware(), $middleware ) );
84 1
	}
85
86
	/**
87
	 * Fluent alias for addMiddleware().
88
	 *
89
	 * @codeCoverageIgnore
90
	 * @param  string|\Closure|\WPEmerge\Middleware\MiddlewareInterface|array $middleware
91
	 * @return static                                                         $this
92
	 */
93
	public function middleware( $middleware ) {
94
		call_user_func_array( [$this, 'addMiddleware'], func_get_args() );
95
96
		return $this;
97
	}
98
}
99