Completed
Push — 1.x ( c86fd3...4b8bd5 )
by Akihito
14s queued 12s
created

CompilePreload::__invoke()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 25
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 14
c 2
b 0
f 0
dl 0
loc 25
rs 9.7998
cc 2
nc 2
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Package\Compiler;
6
7
use ArrayObject;
8
use BEAR\AppMeta\AbstractAppMeta;
9
use BEAR\AppMeta\Meta;
10
11
use function realpath;
12
use function sprintf;
13
14
final class CompilePreload
15
{
16
    /** @var NewInstance */
17
    private $newInstance;
18
19
    /** @var CompileAutoload */
20
    private $dumpAutoload;
21
22
    /** @var ArrayObject<int, string> */
23
    private $classes;
24
25
    /** @var FilePutContents */
26
    private $filePutContents;
27
28
    /** @var string */
29
    private $context;
30
31
    /** @var FakeRun */
32
    private $fakeRun;
33
34
    /**
35
     * @param ArrayObject<int, string> $classes
36
     */
37
    public function __construct(FakeRun $fakeRun, NewInstance $newInstance, CompileAutoload $dumpAutoload, FilePutContents $filePutContents, ArrayObject $classes, string $context)
38
    {
39
        $this->fakeRun = $fakeRun;
40
        $this->newInstance = $newInstance;
41
        $this->dumpAutoload = $dumpAutoload;
42
        $this->classes = $classes;
43
        $this->filePutContents = $filePutContents;
44
        $this->context = $context;
45
        $this->fakeRun = $fakeRun;
46
    }
47
48
    public function __invoke(AbstractAppMeta $appMeta, string $context): string
49
    {
50
        ($this->fakeRun)();
51
        $this->loadResources($appMeta->name, $context, $appMeta->appDir);
52
        /** @var list<string> $classes */
53
        $classes = (array) $this->classes;
54
        $paths = $this->dumpAutoload->getPaths($classes);
0 ignored issues
show
Bug introduced by
$classes of type BEAR\Package\Compiler\list is incompatible with the type array expected by parameter $classes of BEAR\Package\Compiler\CompileAutoload::getPaths(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

54
        $paths = $this->dumpAutoload->getPaths(/** @scrutinizer ignore-type */ $classes);
Loading history...
55
        $requiredOnceFile = '';
56
        foreach ($paths as $path) {
57
            $requiredOnceFile .= sprintf(
58
                "require %s;\n",
59
                $path
60
            );
61
        }
62
63
        $preloadFile = sprintf("<?php
64
65
// %s preload
66
require __DIR__ . '/vendor/autoload.php';
67
68
%s", $this->context, $requiredOnceFile);
69
        $fileName = realpath($appMeta->appDir) . '/preload.php';
70
        ($this->filePutContents)($fileName, $preloadFile);
71
72
        return $fileName;
73
    }
74
75
    public function loadResources(string $appName, string $context, string $appDir): void
76
    {
77
        $meta = new Meta($appName, $context, $appDir);
78
79
        $resMetas = $meta->getGenerator('*');
80
        foreach ($resMetas as $resMeta) {
81
            ($this->newInstance)($resMeta->class);
82
        }
83
    }
84
}
85