YamlVariable::parseRecursive()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
cc 4
nc 3
nop 1
dl 0
loc 18
ccs 0
cts 9
cp 0
crap 20
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
namespace Stitcher\Variable;
4
5
use Stitcher\File;
6
use Symfony\Component\Yaml\Yaml;
7
8
class YamlVariable extends AbstractVariable
9
{
10
    private $parser;
11
12
    /** @var \Stitcher\Variable\VariableParser */
13
    private $variableParser;
14
15
    public function __construct(
16
        string $unparsed,
17
        Yaml $parser,
18
        VariableParser $variableParser
19
    ) {
20
        parent::__construct($unparsed);
21
22
        $this->parser = $parser;
23
        $this->variableParser = $variableParser;
24
    }
25
26
    public static function make(
27
        string $value,
28
        Yaml $parser,
29
        VariableParser $variableParser
30
    ): YamlVariable {
31
        return new self($value, $parser, $variableParser);
32
    }
33
34
    public function parse(): AbstractVariable
35
    {
36
        $this->parsed = $this->parser->parse(File::read($this->unparsed));
37
38
        foreach ($this->parsed as $id => $parsedItem) {
39
            if (! \is_array($parsedItem) || isset($parsedItem['id'])) {
40
                continue;
41
            }
42
43
            $parsedItem['id'] = $id;
44
45
            $this->parsed[$id] = $parsedItem;
46
        }
47
48
        $this->parsed = $this->parseRecursive($this->parsed);
49
50
        return $this;
51
    }
52
53
    private function parseRecursive($unparsedValue)
54
    {
55
        $unparsedValue = $this->variableParser->getVariable($unparsedValue);
56
57
        if ($unparsedValue instanceof DefaultVariable) {
58
            $parsedValue = $unparsedValue->getParsed();
59
60
            if (\is_array($parsedValue)) {
61
                foreach ($parsedValue as $key => &$property) {
62
                    $property = $this->parseRecursive($property);
63
                }
64
            }
65
        } else {
66
            $parsedValue = $unparsedValue->getParsed();
67
        }
68
69
        return $parsedValue;
70
    }
71
}
72