Passed
Pull Request — master (#158)
by Glynn
07:30
created

Hookable_Middleware   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 5
c 0
b 0
f 0
dl 0
loc 31
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A tear_down() 0 1 1
A setup() 0 1 1
A process() 0 6 3
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Registration_Middleware for all classes that implement the Resiterable
7
 * interface.
8
 *
9
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
12
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
13
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
14
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
15
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
16
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
17
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
18
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20
 *
21
 * @author Glynn Quelch <[email protected]>
22
 * @license http://www.opensource.org/licenses/mit-license.html  MIT License
23
 * @package PinkCrab\Perique\Registration
24
 * @since 0.4.0
25
 */
26
27
namespace PinkCrab\Perique\Services\Registration\Modules;
28
29
use PinkCrab\Perique\Interfaces\Hookable;
30
use PinkCrab\Perique\Interfaces\Inject_Hook_Loader;
31
use PinkCrab\Perique\Interfaces\Registration_Middleware;
32
use PinkCrab\Perique\Services\Container_Aware_Traits\Inject_Hook_Loader_Aware;
33
34
class Hookable_Middleware implements Inject_Hook_Loader, Registration_Middleware {
35
36
	use Inject_Hook_Loader_Aware;
37
38
	/**
39
	 * Process the passed class
40
	 *
41
	 * @param object $class
42
	 * @return object
43
	 */
44
	public function process( object $class ): object {
45
		if ( in_array( Hookable::class, class_implements( $class ) ?: array(), true ) ) {
46
			/** @phpstan-ignore-next-line class must implement register for interface*/
47
			$class->register( $this->loader );
48
		}
49
		return $class;
50
	}
51
52
	/**
53
	 * Used to for any middleware setup before process is called
54
	 *
55
	 * @return void
56
	 */
57
	public function setup(): void {}
58
59
	/**
60
	 * Used after all classes have been passed through process.
61
	 *
62
	 * @return void
63
	 */
64
	public function tear_down(): void {}
65
}
66