Passed
Branch develop (2e1905)
by Prateek
04:15
created

Request   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 6
eloc 42
c 2
b 0
f 0
dl 0
loc 68
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getRules() 0 8 2
A generate() 0 27 1
A getValidationLine() 0 17 3
1
<?php
2
namespace Prateekkarki\Laragen\Generators\Backend;
3
4
use Prateekkarki\Laragen\Generators\BaseGenerator;
5
use Prateekkarki\Laragen\Generators\GeneratorInterface;
6
7
class Request extends BaseGenerator implements GeneratorInterface
8
{
9
    private static $destination = "laragen/app/Http/Requests/Backend";
10
    private static $namespace  = "Laragen\App\Http\Requests\Backend";
11
    private static $template  = "backend/Request";
12
13
    private static $childDestination = "app/Http/Requests/Backend";
14
    private static $childNamespace  = "App\Http\Requests\Backend";
15
    private static $childTemplate  = "backend/EmptyClass";
16
17
    public function generate()
18
    {
19
        $generatedFiles = [];
20
21
        $requestTemplate = $this->buildTemplate(self::$template, [
22
            '{{namespace}}'     => self::$namespace,
23
            '{{modelName}}'     => $this->module->getModelName(),
24
            '{{moduleName}}'    => $this->module->getModuleName(),
25
            '{{modelNameLowercase}}' => $this->module->getModelNameLowercase(),
26
            '{{rules}}' 		=> $this->getRules(),
27
        ]);
28
29
        $childTemplate = $this->buildTemplate(self::$childTemplate, [
30
            '{{namespace}}'          => self::$childNamespace,
31
            '{{className}}'          => $this->module->getModelName()."Request",
32
            '{{extendsClass}}'       => self::$namespace . '\\' . $this->module->getModelName()."Request"
33
        ]);
34
35
        $fullFilePath = $this->getPath(self::$destination."/").$this->module->getModelName()."Request".".php";
36
        file_put_contents($fullFilePath, $requestTemplate);
37
        $generatedFiles[] = $fullFilePath;
38
39
        $fullFilePath = $this->getPath(self::$childDestination."/").$this->module->getModelName()."Request".".php";
40
        file_put_contents($fullFilePath, $childTemplate);
41
        $generatedFiles[] = $fullFilePath;
42
43
        return $generatedFiles;
44
45
    }
46
47
    protected function getRules()
48
    {
49
        $validation = [];
50
        foreach ($this->module->getColumns(true) as $column) {
51
            $validation[] = "'{$column->getColumnKey()}'"." => ".$this->getValidationLine($column);
52
        }
53
        $delimiter = ",\n{$this->getTabs(3)}";
54
        return (implode($delimiter, $validation));
55
    }
56
57
58
    public function getValidationLine($type)
59
    {
60
        $validationSegments = [];
61
        $modelname = $this->module->getModelName();
62
63
        $validationSegments[] = $type->isRequired() ? 'required' : 'nullable';
64
        $validationSegments[] = $type->getValidationRule() ?? $type->getDataType();
65
        $rules = implode('|', $validationSegments);
66
67
        if ($type->isUnique()) {
68
            $validationLine = '($this->'.$modelname.') ? \'';
69
            $validationLine .= $rules.'|unique:'.$type->moduleName.','.$type->getColumn().','.'\''.'.$this->'.$modelname.'->id : \'';
70
            $validationLine .= $rules.'|unique:'.$type->moduleName.'\'';
71
        } else {
72
            $validationLine = "'{$rules}'";
73
        }
74
        return $validationLine;
75
    }
76
}
77