Passed
Push — master ( 4fa241...13320f )
by Chema
03:42 queued 11s
created

Gacela   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 7
Bugs 0 Features 0
Metric Value
eloc 16
dl 0
loc 39
ccs 17
cts 17
cp 1
rs 10
c 7
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A processConfigFnIntoSetup() 0 13 3
A bootstrap() 0 14 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gacela\Framework;
6
7
use Closure;
8
use Gacela\Framework\Bootstrap\GacelaConfig;
9
use Gacela\Framework\Bootstrap\SetupGacela;
10
use Gacela\Framework\Bootstrap\SetupGacelaInterface;
11
use Gacela\Framework\ClassResolver\AbstractClassResolver;
12
use Gacela\Framework\ClassResolver\ClassNameCache;
13
use Gacela\Framework\Config\Config;
14
15
final class Gacela
16
{
17
    /**
18
     * Define the entry point of Gacela.
19
     *
20
     * @param null|Closure(GacelaConfig):void $configFn
21
     */
22 51
    public static function bootstrap(string $appRootDir, Closure $configFn = null): void
23
    {
24 51
        $setup = self::processConfigFnIntoSetup($appRootDir, $configFn);
25
26 51
        if (!$setup->isCacheEnabled()) {
27 9
            ClassNameCache::resetCache();
28 9
            AbstractClassResolver::resetCache();
29 9
            Config::resetInstance();
30
        }
31
32 51
        Config::getInstance()
33 51
            ->setAppRootDir($appRootDir)
34 51
            ->setSetup($setup)
35 51
            ->init();
36
    }
37
38
    /**
39
     * @param null|Closure(GacelaConfig):void $configFn
40
     */
41 51
    private static function processConfigFnIntoSetup(string $appRootDir, Closure $configFn = null): SetupGacelaInterface
42
    {
43 51
        if ($configFn !== null) {
44 30
            return SetupGacela::fromCallable($configFn);
45
        }
46
47 21
        $gacelaFilePath = $appRootDir . '/gacela.php';
48
49 21
        if (is_file($gacelaFilePath)) {
50 10
            return SetupGacela::fromFile($gacelaFilePath);
51
        }
52
53 11
        return new SetupGacela();
54
    }
55
}
56