Passed
Push — feature/improve-file-cache ( 6742d2 )
by Chema
04:18
created

ClassResolverCache::getCache()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3.072

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 10
c 1
b 0
f 0
nc 3
nop 0
dl 0
loc 17
ccs 8
cts 10
cp 0.8
crap 3.072
rs 9.9332
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gacela\Framework\ClassResolver;
6
7
use Gacela\Framework\ClassResolver\Cache\CacheInterface;
8
use Gacela\Framework\ClassResolver\Cache\ClassNamePhpCache;
9
use Gacela\Framework\ClassResolver\Cache\GacelaFileCache;
10
use Gacela\Framework\ClassResolver\Cache\InMemoryCache;
11
use Gacela\Framework\Config\Config;
12
use Gacela\Framework\Event\ClassResolver\Cache\ClassNameCacheCachedEvent;
13
use Gacela\Framework\Event\ClassResolver\Cache\ClassNameInMemoryCacheCreatedEvent;
14
use Gacela\Framework\Event\ClassResolver\Cache\ClassNamePhpCacheCreatedEvent;
15
use Gacela\Framework\Event\Dispatcher\EventDispatchingCapabilities;
16
17
final class ClassResolverCache
18
{
19
    use EventDispatchingCapabilities;
20
21
    private static ?CacheInterface $cache = null;
22
23
    /**
24
     * @internal
25
     */
26 22
    public static function resetCache(): void
27
    {
28 22
        self::$cache = null;
29
    }
30
31 18
    public static function getCache(): CacheInterface
32
    {
33 18
        if (self::$cache !== null) {
34
            self::dispatchEvent(new ClassNameCacheCachedEvent());
35
            return self::$cache;
36
        }
37
38 18
        if (self::isEnabled()) {
39 3
            self::dispatchEvent(new ClassNamePhpCacheCreatedEvent());
40
41 3
            self::$cache = new ClassNamePhpCache(Config::getInstance()->getCacheDir());
42
        } else {
43 15
            self::dispatchEvent(new ClassNameInMemoryCacheCreatedEvent());
44 15
            self::$cache = new InMemoryCache(ClassNamePhpCache::class);
45
        }
46
47 18
        return self::$cache;
0 ignored issues
show
Bug Best Practice introduced by
The expression return self::cache returns the type null which is incompatible with the type-hinted return Gacela\Framework\ClassRe...er\Cache\CacheInterface.
Loading history...
48
    }
49
50 18
    private static function isEnabled(): bool
51
    {
52 18
        return (new GacelaFileCache(Config::getInstance()))->isEnabled();
53
    }
54
}
55