Passed
Pull Request — master (#322)
by Arman
03:16
created

AppFactory   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
dl 0
loc 58
rs 10
c 1
b 0
f 0
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 8 2
A createInstance() 0 11 2
A destroy() 0 3 1
1
<?php
2
3
/**
4
 * Quantum PHP Framework
5
 *
6
 * An open source software development framework for PHP
7
 *
8
 * @package Quantum
9
 * @author Arman Ag. <[email protected]>
10
 * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11
 * @link http://quantum.softberg.org/
12
 * @since 2.9.7
13
 */
14
15
namespace Quantum\App\Factories;
16
17
use Quantum\App\Adapters\ConsoleAppAdapter;
18
use Quantum\App\Exceptions\BaseException;
19
use Quantum\App\Exceptions\AppException;
20
use Quantum\App\Adapters\WebAppAdapter;
21
use Quantum\App\App;
22
23
/**
24
 * Class AppFactory
25
 * @package Quantum\App
26
 */
27
class AppFactory
28
{
29
30
    /**
31
     * Supported adapters
32
     */
33
    const ADAPTERS = [
34
        App::WEB => WebAppAdapter::class,
35
        App::CONSOLE => ConsoleAppAdapter::class,
36
    ];
37
38
    /**
39
     * @var array
40
     */
41
    private static $instances = [];
42
43
    /**
44
     * @param string $type
45
     * @param string $baseDir
46
     * @return App
47
     * @throws BaseException
48
     */
49
    public static function create(string $type, string $baseDir): App
50
    {
51
52
        if (!isset(self::$instances[$type])) {
53
            self::$instances[$type] = self::createInstance($type, $baseDir);
54
        }
55
56
        return self::$instances[$type];
57
    }
58
59
    /**
60
     * @param string $type
61
     * @return void
62
     */
63
    public static function destroy(string $type)
64
    {
65
        unset(self::$instances[$type]);
66
    }
67
68
    /**
69
     * @param string $type
70
     * @param string $baseDir
71
     * @return App
72
     * @throws BaseException
73
     */
74
    private static function createInstance(string $type, string $baseDir): App
75
    {
76
        if (!isset(self::ADAPTERS[$type])) {
77
            throw AppException::adapterNotSupported($type);
78
        }
79
80
        $adapterClass = self::ADAPTERS[$type];
81
82
        App::setBaseDir($baseDir);
83
84
        return new App(new $adapterClass());
85
    }
86
}