Completed
Push — 5.0 ( d49403...9430f0 )
by Marc André
01:47
created

Context   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 5
dl 0
loc 60
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A register() 0 10 2
A getConfig() 0 4 1
A getModulesManager() 0 4 1
A getAutoloader() 0 4 1
A getSingletons() 0 4 1
1
<?php
2
3
4
/**
5
 *
6
 * Copyright (c) 2010-2018 Nevraxe inc. & Marc André Audet <[email protected]>. All rights reserved.
7
 *
8
 * Redistribution and use in source and binary forms, with or without modification, are
9
 * permitted provided that the following conditions are met:
10
 *
11
 *   1. Redistributions of source code must retain the above copyright notice, this list of
12
 *       conditions and the following disclaimer.
13
 *
14
 *   2. Redistributions in binary form must reproduce the above copyright notice, this list
15
 *       of conditions and the following disclaimer in the documentation and/or other materials
16
 *       provided with the distribution.
17
 *
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
 * DISCLAIMED. IN NO EVENT SHALL NEVRAXE INC. & MARC ANDRÉ AUDET BE LIABLE FOR ANY
22
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 */
30
31
32
namespace Cervo;
33
34
35
use Cervo\Config\BaseConfig;
36
use Cervo\Exceptions\Router\InvalidProviderException;
37
use Cervo\Interfaces\ProviderInterface;
38
39
40
/**
41
 * Context class for Cervo.
42
 *
43
 * @author Marc André Audet <[email protected]>
44
 */
45
final class Context
46
{
47
    private $config;
48
    private $autoloader;
49
    private $modulesManager;
50
    private $singletons;
51
52
    /**
53
     * Context constructor.
54
     *
55
     * @param BaseConfig|null $config
56
     */
57
    public function __construct(
58
        ?BaseConfig $config = null
59
    ) {
60
        $this->config = $config ?? new BaseConfig();
61
62
        $this->modulesManager = new ModulesManager();
63
        $this->autoloader = new Autoloader($this);
64
        $this->singletons = new Singletons($this);
65
    }
66
67
    /**
68
     * Register and run a Provider class
69
     *
70
     * @param string $provider_class The Provider class
71
     *
72
     * @return Context
73
     */
74
    public function register(string $provider_class) : self
75
    {
76
        if (!is_subclass_of($provider_class, ProviderInterface::class)) {
0 ignored issues
show
Bug introduced by
Due to PHP Bug #53727, is_subclass_of might return inconsistent results on some PHP versions if \Cervo\Interfaces\ProviderInterface::class can be an interface. If so, you could instead use ReflectionClass::implementsInterface.
Loading history...
77
            throw new InvalidProviderException;
78
        }
79
80
        (new $provider_class)($this)();
81
82
        return $this;
83
    }
84
85
    public function getConfig() : BaseConfig
86
    {
87
        return $this->config;
88
    }
89
90
    public function getModulesManager() : ModulesManager
91
    {
92
        return $this->modulesManager;
93
    }
94
95
    public function getAutoloader() : Autoloader
96
    {
97
        return $this->autoloader;
98
    }
99
100
    public function getSingletons() : Singletons
101
    {
102
        return $this->singletons;
103
    }
104
}
105