CachedRouteListFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 15
dl 0
loc 43
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 7 3
A __construct() 0 7 1
A createCached() 0 11 2
1
<?php
2
3
namespace kalanis\Restful\Application;
4
5
6
use kalanis\Restful\Application\Routes\ResourceRouteList;
7
use Nette\Caching\Cache;
8
use Nette\Caching\Storage;
9
use Nette\Utils\Finder;
10
11
12
/**
13
 * CachedRouteListFactory
14
 * @package kalanis\Restful\Application
15
 */
16
final class CachedRouteListFactory implements IRouteListFactory
17
{
18
19
    /** Cache name */
20
    public const CACHE_NAME = 'resourceRouteList';
21
22
    private Cache $cache;
23
24
    public function __construct(
25
        private readonly string            $presentersRoot,
26
        private readonly IRouteListFactory $routeListFactory,
27
        Storage                            $storage,
28
    )
29
    {
30
        $this->cache = new Cache($storage, self::class);
31
    }
32
33
    /**
34
     * Create cached route list
35
     */
36
    private function createCached(?string $module = null): ResourceRouteList
37
    {
38
        $files = [];
39
        $presenterFiles = Finder::findFiles('*Presenter.php')->from($this->presentersRoot);
40
        foreach ($presenterFiles as $path => $splFile) {
41
            $files[] = $path;
42
        }
43
44
        $routeList = $this->routeListFactory->create($module);
45
        $this->cache->save(self::CACHE_NAME, $routeList, [Cache::Files => $files]);
46
        return $routeList;
47
    }
48
49
    /**
50
     * Create resources route list
51
     */
52
    public function create(?string $module = null): ResourceRouteList
53
    {
54
        $routeList = $this->cache->load(self::CACHE_NAME);
55
        if (is_object($routeList) && is_a($routeList, ResourceRouteList::class)) {
56
            return $routeList;
57
        }
58
        return $this->createCached($module);
59
    }
60
}
61