Completed
Pull Request — 2.x (#216)
by Akihito
09:22
created

DependencySaver   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 3
dl 0
loc 46
c 0
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A __invoke() 0 9 2
A saveQualifier() 0 17 4
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