Passed
Push — develop ( 89dc6a...390c15 )
by Nikita
09:45
created

LaravelModulesRepository   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 11
eloc 29
c 1
b 0
f 1
dl 0
loc 67
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A getModulesVersions() 0 10 2
A denormalizeLaravelModule() 0 11 1
A getCachedEnabled() 0 8 2
A getCached() 0 8 2
A delete() 0 3 1
A getNvidardRepository() 0 7 2
1
<?php
2
3
namespace Gameap\Repositories\Modules;
4
5
use Gameap\Exceptions\GameapException;
6
use Gameap\Models\Modules\LaravelModule;
7
use Illuminate\Contracts\Foundation\Application;
8
use Nwidart\Modules\Contracts\RepositoryInterface;
9
use Nwidart\Modules\Module;
10
11
class LaravelModulesRepository
12
{
13
    /** @var Application */
14
    private $laravel;
15
16
    public function __construct(Application $laravel)
17
    {
18
        $this->laravel = $laravel;
19
    }
20
21
    public function getModulesVersions(): array
22
    {
23
        $modules = [];
24
        /** @var Module $module */
25
        foreach ($this->getNvidardRepository()->all() as $module) {
26
            $attributes                       = $module->json()->getAttributes();
27
            $modules[$module->getLowerName()] = $attributes['version'] ?? '';
28
        }
29
30
        return $modules;
31
    }
32
33
    public function getCached(): array
34
    {
35
        $modules    = [];
36
        $repository = $this->getNvidardRepository();
37
        foreach ($repository->getCached() as $module) {
38
            $modules[] = $this->denormalizeLaravelModule($module, $repository->isEnabled($module['name']));
39
        }
40
        return $modules;
41
    }
42
43
    public function getCachedEnabled(): array
44
    {
45
        $modules    = [];
46
        $repository = $this->getNvidardRepository();
47
        foreach ($repository->allEnabled() as $module) {
48
            $modules[] = $this->denormalizeLaravelModule($module, true);
49
        }
50
        return $modules;
51
    }
52
53
    public function delete(string $module): bool
54
    {
55
        return $this->getNvidardRepository()->delete($module);
56
    }
57
58
    private function getNvidardRepository(): RepositoryInterface
59
    {
60
        if (!$this->laravel->has('modules')) {
61
            throw new GameapException('Unable to find modules container');
62
        }
63
64
        return $this->laravel->get('modules');
65
    }
66
67
    private function denormalizeLaravelModule(array $module, bool $isEnabled): LaravelModule
68
    {
69
        $laravelModule = new LaravelModule();
70
71
        $laravelModule->id          = $module['alias'];
72
        $laravelModule->name        = $module['name'];
73
        $laravelModule->description = $module['description'];
74
        $laravelModule->tags        = $module['keywords'];
75
        $laravelModule->isEnabled   = $isEnabled;
76
77
        return $laravelModule;
78
    }
79
}
80