Test Failed
Push — feat/cache-warming ( 037623...493f4d )
by Chema
04:16
created

CacheWarmService::discoverModules()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 4
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gacela\Console\Application\CacheWarm;
6
7
use Gacela\Console\ConsoleFacade;
8
use Gacela\Console\Domain\AllAppModules\AppModule;
9
use Throwable;
10
11
use function array_filter;
12
use function class_exists;
13
use function str_contains;
14
15
final class CacheWarmService
16
{
17
    public function __construct(
18
        private readonly ConsoleFacade $facade,
19
    ) {
20
    }
21
22
    /**
23
     * @return list<AppModule>
24
     */
25
    public function discoverModules(): array
26
    {
27
        try {
28
            return $this->facade->findAllAppModules();
29
        } catch (Throwable) {
30
            return [];
31
        }
32
    }
33
34
    /**
35
     * @param list<AppModule> $modules
36
     *
37
     * @return list<AppModule>
38
     */
39
    public function filterProductionModules(array $modules): array
40
    {
41
        return array_filter($modules, static function ($module): bool {
42
            $className = $module->facadeClass();
43
            return !str_contains($className, 'Test')
44
                && !str_contains($className, '\\Fixtures\\')
45
                && !str_contains($className, '\\Benchmark\\');
46
        });
47
    }
48
49
    /**
50
     * @return array{type: string, className: string}[]
51
     */
52
    public function getModuleClasses(AppModule $module): array
53
    {
54
        $classes = [
55
            ['type' => 'Facade', 'className' => $module->facadeClass()],
56
        ];
57
58
        if ($module->factoryClass() !== null) {
59
            $classes[] = ['type' => 'Factory', 'className' => $module->factoryClass()];
60
        }
61
62
        if ($module->configClass() !== null) {
63
            $classes[] = ['type' => 'Config', 'className' => $module->configClass()];
64
        }
65
66
        if ($module->providerClass() !== null) {
67
            $classes[] = ['type' => 'Provider', 'className' => $module->providerClass()];
68
        }
69
70
        return $classes;
71
    }
72
73
    public function resolveClass(string $className): void
74
    {
75
        if (!class_exists($className)) {
76
            throw new ClassNotFoundException($className);
77
        }
78
79
        class_exists($className, true);
80
    }
81
}
82