Passed
Branch master (7c6870)
by Atanas
02:11
created

LoadsServiceProvidersTrait::loadServiceProviders()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 19
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
dl 0
loc 19
ccs 0
cts 0
cp 0
rs 9.8666
c 1
b 0
f 0
cc 2
nc 1
nop 1
crap 6
1
<?php
2
/**
3
 * @package   WPEmerge
4
 * @author    Atanas Angelov <[email protected]>
5
 * @copyright 2017-2019 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\Application;
11
12
use Pimple\Container;
13
use WPEmerge\Controllers\ControllersServiceProvider;
14
use WPEmerge\Csrf\CsrfServiceProvider;
15
use WPEmerge\Exceptions\ConfigurationException;
16
use WPEmerge\Exceptions\ExceptionsServiceProvider;
17
use WPEmerge\Flash\FlashServiceProvider;
18
use WPEmerge\Input\OldInputServiceProvider;
19
use WPEmerge\Kernels\KernelsServiceProvider;
20
use WPEmerge\Middleware\MiddlewareServiceProvider;
21
use WPEmerge\Requests\RequestsServiceProvider;
22
use WPEmerge\Responses\ResponsesServiceProvider;
23
use WPEmerge\Routing\RoutingServiceProvider;
24
use WPEmerge\ServiceProviders\ServiceProviderInterface;
25
use WPEmerge\Support\Arr;
26
use WPEmerge\View\ViewServiceProvider;
27
28
/**
29
 * Load service providers.
30
 */
31
trait LoadsServiceProvidersTrait {
32
	/**
33
	 * Array of default service providers.
34
	 *
35
	 * @var string[]
36
	 */
37
	protected $service_providers = [
38
		ApplicationServiceProvider::class,
39
		KernelsServiceProvider::class,
40
		ExceptionsServiceProvider::class,
41
		RequestsServiceProvider::class,
42
		ResponsesServiceProvider::class,
43
		RoutingServiceProvider::class,
44
		ViewServiceProvider::class,
45
		ControllersServiceProvider::class,
46
		MiddlewareServiceProvider::class,
47
		CsrfServiceProvider::class,
48
		FlashServiceProvider::class,
49
		OldInputServiceProvider::class,
50
	];
51
52
	/**
53
	 * Register and bootstrap all service providers.
54
	 *
55
	 * @codeCoverageIgnore
56
	 * @param  Container $container
57
	 * @return void
58
	 */
59
	protected function loadServiceProviders( Container $container ) {
60
		$container[ WPEMERGE_SERVICE_PROVIDERS_KEY ] = array_merge(
61
			$this->service_providers,
62
			Arr::get( $container[ WPEMERGE_CONFIG_KEY ], 'providers', [] )
63
		);
64
65
		$service_providers = array_map( function ( $service_provider ) {
66
			if ( ! is_subclass_of( $service_provider, ServiceProviderInterface::class ) ) {
67
				throw new ConfigurationException(
68
					'The following class does not implement ' .
69
					'ServiceProviderInterface: ' . $service_provider
70
				);
71
			}
72
73
			return new $service_provider();
74
		}, $container[ WPEMERGE_SERVICE_PROVIDERS_KEY ] );
75
76
		$this->registerServiceProviders( $service_providers, $container );
77
		$this->bootstrapServiceProviders( $service_providers, $container );
78
	}
79
80
	/**
81
	 * Register all service providers.
82
	 *
83
	 * @param  ServiceProviderInterface[] $service_providers
84
	 * @param  Container                  $container
85
	 * @return void
86
	 */
87 1
	protected function registerServiceProviders( $service_providers, Container $container ) {
88 1
		foreach ( $service_providers as $provider ) {
89 1
			$provider->register( $container );
90
		}
91 1
	}
92
93
	/**
94
	 * Bootstrap all service providers.
95
	 *
96
	 * @param  ServiceProviderInterface[] $service_providers
97
	 * @param  Container                  $container
98
	 * @return void
99
	 */
100 1
	protected function bootstrapServiceProviders( $service_providers, Container $container ) {
101 1
		foreach ( $service_providers as $provider ) {
102 1
			$provider->bootstrap( $container );
103
		}
104 1
	}
105
}
106