Passed
Push — master ( 80946a...bc3116 )
by Pol
02:44
created

ClassGenerator   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Test Coverage

Coverage 94.44%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
c 1
b 0
f 0
dl 0
loc 48
ccs 17
cts 18
cp 0.9444
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A regenerateClasses() 0 33 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace drupol\ComposerPackages;
6
7
use Composer\Script\Event;
8
use drupol\ComposerPackages\Exporter\Dependencies;
9
use drupol\ComposerPackages\Exporter\Directories;
10
use drupol\ComposerPackages\Exporter\ExporterInterface;
11
use drupol\ComposerPackages\Exporter\Packages;
12
use drupol\ComposerPackages\Exporter\Types;
13
use drupol\ComposerPackages\Exporter\Versions;
14
15
final class ClassGenerator
16
{
17
    /**
18
     * @var Event
19
     */
20
    private $event;
21
22 3
    public function __construct(Event $event)
23
    {
24 3
        $this->event = $event;
25 3
    }
26
27
    /**
28
     * @throws \ReflectionException
29
     */
30 2
    public function regenerateClasses(): void
31
    {
32
        $data = [
33 2
            Packages::class,
34
            Types::class,
35
            Directories::class,
36
            Versions::class,
37
            Dependencies::class,
38
        ];
39
40 2
        foreach ($data as $class) {
41 2
            if (false === \class_exists($class)) {
42
                continue;
43
            }
44
45 2
            $reflection = new \ReflectionClass($class);
46
47 2
            $template = \sprintf(
48 2
                '%s.twig',
49 2
                \mb_strtolower($reflection->getShortName())
50
            );
51
52 2
            $installPath = \sprintf(
53 2
                '%s/../build/%s.php',
54 2
                __DIR__,
55 2
                $reflection->getShortName()
56
            );
57
58
            /** @var ExporterInterface $exporter */
59 2
            $exporter = $reflection->newInstance($this->event);
60
61
            $exporter
62 2
                ->exportToFile($template, $installPath);
63
        }
64 2
    }
65
}
66