Passed
Push — master ( 1dbc05...713241 )
by Bruno
03:36
created

SeedGenerator   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Test Coverage

Coverage 96%

Importance

Changes 7
Bugs 1 Features 0
Metric Value
eloc 25
c 7
b 1
f 0
dl 0
loc 66
ccs 24
cts 25
cp 0.96
rs 10
wmc 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A generate() 0 28 4
A generateString() 0 6 1
A getGenerateFilename() 0 9 3
1
<?php declare(strict_types=1);
2
3
namespace Modelarium\Laravel\Targets;
4
5
use GraphQL\Type\Definition\ObjectType;
6
use Modelarium\BaseGenerator;
7
use Modelarium\Exception\Exception;
8
use Modelarium\FormulariumUtils;
9
use Modelarium\GeneratedCollection;
10
use Modelarium\GeneratedItem;
11
use Illuminate\Support\Str;
12
use Modelarium\Laravel\Util as LaravelUtil;
13
14
class SeedGenerator extends BaseGenerator
15
{
16
    /**
17
     * @var string
18
     */
19
    protected $stubDir = __DIR__ . "/stubs/";
20
21
    /**
22
     * Extra seed code generated by parser
23
     *
24
     * @var string[]
25
     */
26
    public $extraCode = [];
27
28 8
    public function generate(): GeneratedCollection
29
    {
30 8
        if (!($this->type instanceof ObjectType)) {
31
            throw new Exception('Invalid type on seed generator:' . get_class($this->type));
32
        }
33
34
        /**
35
         * @var \GraphQL\Language\AST\NodeList<\GraphQL\Language\AST\DirectiveNode>|null
36
         */
37 8
        $directives = $this->type->astNode->directives;
38 8
        if ($directives) {
0 ignored issues
show
introduced by
$directives is of type GraphQL\Language\AST\NodeList, thus it always evaluated to true.
Loading history...
39 8
            $this->processTypeDirectives($directives, 'Seed');
40
        }
41
42
        /**
43
         * @var ObjectType $t
44
         */
45 8
        $t = $this->type;
46 8
        foreach ($t->getFields() as $field) {
47 8
            $directives = $field->astNode->directives;
48 8
            $this->processFieldDirectives($field, $directives, 'Seed');
49
        }
50
51 8
        return new GeneratedCollection(
52 8
            [ new GeneratedItem(
53 8
                GeneratedItem::TYPE_SEED,
54 8
                $this->generateString(),
55 8
                $this->getGenerateFilename()
56
            )]
57
        );
58
    }
59
60
61 9
    public function generateString(): string
62
    {
63 9
        return $this->templateStub(
64 9
            'seed',
65
            [
66 9
                'extraCode' => join("\n", $this->extraCode)
67
            ]
68
        );
69
    }
70
71 8
    public function getGenerateFilename(): string
72
    {
73 8
        $seedDirectoryName = 'seeders';
74 8
        $laravelVersion = LaravelUtil::getLaravelVersion();
75 8
        if (Str::startsWith($laravelVersion, '6.') || Str::startsWith($laravelVersion, '7.')) {
76 8
            $seedDirectoryName = 'seeders';
77
        }
78
79 8
        return $this->getBasePath('database/' . $seedDirectoryName . '/'. $this->studlyName . 'Seeder.php');
80
    }
81
}
82