ValueGenerator::generate()   B
last analyzed

Complexity

Conditions 6
Paths 3

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 23
ccs 12
cts 12
cp 1
rs 8.9297
c 0
b 0
f 0
cc 6
nc 3
nop 1
crap 6
1
<?php
2
3
namespace Leaditin\Code\Generator;
4
5
use Leaditin\Code\Value;
6
7
/**
8
 * @package Leaditin\Code
9
 * @author Igor Vuckovic <[email protected]>
10
 * @license MIT
11
 */
12
class ValueGenerator extends Generator
13
{
14
    /**
15
     * @param Value $value
16
     *
17
     * @return string
18
     */
19 11
    public function generate(Value $value): string
20
    {
21 11
        if (is_iterable($value->value())) {
22 2
            $val = $value->value();
23
            array_walk($val, function (&$val) {
24 1
                if (is_string($val) || is_bool($val)) {
25 1
                    $val = $this->generateScalar($val);
26
27 1
                    return $val;
28
                }
29
30 1
                return $val;
31 2
            });
32
33 2
            return '[' . implode(', ', $val) . ']';
34
        }
35
36 9
        if ($value->value() !== null && is_object($value->value())) {
37 1
            return get_class($value->value());
38
        }
39
40 8
        return $this->generateScalar($value->value());
41
    }
42
43
    /**
44
     * @param $value
45
     *
46
     * @return string
47
     */
48 9
    protected function generateScalar($value): string
49
    {
50 9
        if ($value === null) {
51 1
            return 'null';
52
        }
53
54 8
        if (is_bool($value)) {
55 2
            return $value ? 'true' : 'false';
56
        }
57
58 6
        if (is_numeric($value) || preg_match('/[^:]+::[^:]+/', $value)) {
59 3
            return (string)$value;
60
        }
61
62 3
        return "'" . preg_quote($value, '\'') . "'";
63
    }
64
}
65