CodeGenerator::getName()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
1
<?php declare(strict_types=1);
2
3
namespace Formularium\CodeGenerator;
4
5
use Formularium\Datatype;
6
use Formularium\Factory\DatatypeGeneratorFactory;
7
use Formularium\Field;
8
use Formularium\Model;
9
10
abstract class CodeGenerator
11
{
12
    /**
13
     * @var string
14
     */
15
    public $name;
16
17 10
    public function __construct(string $name)
18
    {
19 10
        $this->name = $name;
20 10
    }
21
22 10
    public function getName(): string
23
    {
24 10
        return $this->name;
25
    }
26
27
    public function datatypeDeclarations(): string
28
    {
29
        $classes = DatatypeGeneratorFactory::specializedFactoryAll($this);
30
        $declarations = array_map(
31
            function (DatatypeGenerator $c) {
32
                return $c->datatypeDeclaration($this);
33
            },
34
            $classes
35
        );
36
        $cleanDeclarations = array_filter($declarations, function ($d) {
37
            return $d;
38
        });
39
        return join("\n\n", $cleanDeclarations);
40
    }
41
42
    /**
43
     * Returns a single declaration for a specific datatype.
44
     *
45
     * @param Datatype $datatype
46
     * @return string
47
     */
48
    public function datatypeDeclaration(Datatype $datatype): string
49
    {
50
        $generator = DatatypeGeneratorFactory::specializedFactory($datatype, $this);
51
        return $generator->datatypeDeclaration($this);
52
    }
53
54
    /**
55
     * Generates fields code for this model.
56
     *
57
     * @return string[]
58
     */
59 10
    public function fields(Model $model): array
60
    {
61 10
        $defs = [];
62 10
        foreach ($model->getFields() as $field) {
63 10
            $d = $this->field($field);
64 10
            if (is_array($d)) {
65
                $defs += $d;
66 10
            } elseif (is_string($d)) {
67 10
                $defs[$field->getName()] = $d;
68
            }
69
        }
70 10
        return $defs;
71
    }
72
73
    /**
74
     * Generates fields code for this model.
75
     *
76
     * @return string|string[]
77
     */
78 10
    public function field(Field $field)
79
    {
80 10
        $dg = DatatypeGeneratorFactory::specializedFactory($field->getDatatype(), $this);
81 10
        return $dg->field($this, $field);
82
    }
83
84
    abstract public function type(Model $model): string;
85
86
    public function variable(Field $field): string
87
    {
88
        $dg = DatatypeGeneratorFactory::specializedFactory($field->getDatatype(), $this);
89
        return $dg->variable($this, $field);
90
    }
91
92
    abstract public function getFilename(string $base): string;
93
}
94