Completed
Pull Request — 2.x (#216)
by Akihito
07:38
created

DependencySaver::saveQualifier()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
c 0
b 0
f 0
rs 9.7
cc 4
nc 6
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ray\Compiler;
6
7
final class DependencySaver
8
{
9
    /**
10
     * @var string
11
     */
12
    private $scriptDir;
13
14
    /**
15
     * @var FilePutContents
16
     */
17
    private $filePutContents;
18
19
    public function __construct(string $scriptDir)
20
    {
21
        $this->scriptDir = $scriptDir;
22
        $this->filePutContents = new FilePutContents;
23
    }
24
25
    public function __invoke(string $dependencyIndex, Code $code) : void
26
    {
27
        $pearStyleName = \str_replace('\\', '_', $dependencyIndex);
28
        $instanceScript = \sprintf(ScriptInjector::INSTANCE, $this->scriptDir, $pearStyleName);
29
        ($this->filePutContents)($instanceScript, (string) $code . PHP_EOL);
30
        if ($code->qualifiers) {
31
            $this->saveQualifier($code->qualifiers);
32
        }
33
    }
34
35
    private function saveQualifier(IpQualifier $qualifer) : void
36
    {
37
        $qualifier = $this->scriptDir . '/qualifer';
38
        ! \file_exists($qualifier) && ! @mkdir($qualifier) && ! is_dir($qualifier);
39
        $class = $qualifer->param->getDeclaringClass();
40
        if (! $class instanceof \ReflectionClass) {
41
            throw new \LogicException; // @codeCoverageIgnore
42
        }
43
        $fileName = \sprintf(
44
            ScriptInjector::QUALIFIER,
45
            $this->scriptDir,
46
            \str_replace('\\', '_', $class->name),
47
            $qualifer->param->getDeclaringFunction()->name,
48
            $qualifer->param->name
49
        );
50
        ($this->filePutContents)($fileName, \serialize($qualifer->qualifier) . PHP_EOL);
51
    }
52
}
53