Passed
Push — master ( 781e53...d845af )
by Bruno
09:45
created

BaseGenerator::getDirectiveClass()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
eloc 7
c 0
b 0
f 0
dl 0
loc 13
rs 10
ccs 0
cts 0
cp 0
cc 4
nc 4
nop 2
crap 20
1
<?php declare(strict_types=1);
2
3
namespace Modelarium;
4
5
use GraphQL\Type\Definition\Type;
6
use Modelarium\Exception\Exception;
7
use Modelarium\Parser;
8
9
use function Safe\class_implements;
10
use function Safe\date;
11
12
abstract class BaseGenerator implements GeneratorInterface
13
{
14
    use GeneratorNameTrait;
15
16
    /**
17
     * @var string
18
     */
19
    protected $stubDir = null;
20
21
    /**
22
     * @var Parser
23
     */
24
    protected $parser = null;
25
26
    /**
27
     * @var Type
28
     */
29
    protected $type = null;
30
31
    /**
32
     * @param Parser $parser
33 27
     * @param string $name The target type name.
34
     * @param Type|string $type
35 27
     */
36 27
    public function __construct(Parser $parser, string $name, $type = null)
37
    {
38 27
        $this->parser = $parser;
39 10
        $this->setBaseName($name);
40 17
41 17
        if ($type instanceof Type) {
42
            $this->type = $type;
43
        } elseif (!$type) {
44
            $this->type = $parser->getSchema()->getType($name);
45 27
        } else {
46
            throw new Exception('Invalid model');
47 10
        }
48
    }
49 10
50
    protected function phpHeader(): string
51
    {
52
        $date = date('c');
53 10
        return <<<EOF
54
<?php declare(strict_types=1);
55
/** 
56
 * This file was automatically generated by Modelarium on $date
57
 */
58
59
EOF;
60
    }
61
62
    /**
63
     * Gets the classname for a directive implementation interface class.
64
     *
65
     * @param string $directive The directive name.
66
     * @param string $type
67
     * @return string|null
68
     */
69
    protected function getDirectiveClass(
70
        string $directive,
71
        string $type = ''
72
    ): ?string {
73
        $ns = 'Modelarium\\Laravel\\Directives';
74
        $className = $ns . '\\' . ucfirst($directive);
75
        if (!$type) {
76
            $type = str_replace('Generator', '', get_called_class());
77
        }
78
        if (class_exists($className) && in_array($type . 'DirectiveInterface', class_implements($className))) {
79
            return $className;
80
        }
81
        return null;
82
    }
83
}
84