Passed
Push — master ( 0dbe95...e58ec5 )
by Prateek
10:08 queued 06:33
created

Request   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 6
eloc 31
c 3
b 0
f 0
dl 0
loc 51
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getRules() 0 8 2
A generate() 0 11 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
    protected $destination = "laragen/app/Http/Requests/Backend";
10
    protected $namespace  = "Laragen\App\Http\Requests\Backend";
11
    protected $template  = "backend/Request";
12
    protected $fileSuffix  = "Request";
13
14
    protected $childDestination = "app/Http/Requests/Backend";
15
    protected $childNamespace  = "App\Http\Requests\Backend";
16
17
    public function generate()
18
    {
19
        $requestTemplate = $this->buildTemplate($this->template, [
20
            '{{namespace}}'     => $this->namespace,
21
            '{{modelName}}'     => $this->module->getModelName(),
22
            '{{moduleName}}'    => $this->module->getModuleName(),
23
            '{{modelNameLowercase}}' => $this->module->getModelNameLowercase(),
24
            '{{rules}}' 		=> $this->getRules(),
25
        ]);
26
27
        return $this->generateFile($requestTemplate);
28
    }
29
30
    protected function getRules()
31
    {
32
        $validation = [];
33
        foreach ($this->module->getColumns(true) as $column) {
34
            $validation[] = "'{$column->getColumnKey()}'"." => ".$this->getValidationLine($column);
35
        }
36
        $delimiter = ",\n{$this->getTabs(3)}";
37
        return (implode($delimiter, $validation));
38
    }
39
40
41
    public function getValidationLine($type)
42
    {
43
        $validationSegments = [];
44
        $modelname = $this->module->getModelName();
45
46
        $validationSegments[] = $type->isRequired() ? 'required' : 'nullable';
47
        $validationSegments[] = $type->getValidationRule() ?? $type->getDataType();
48
        $rules = implode('|', $validationSegments);
49
50
        if ($type->isUnique()) {
51
            $validationLine = '($this->'.$modelname.') ? \'';
52
            $validationLine .= $rules.'|unique:'.$type->moduleName.','.$type->getColumn().','.'\''.'.$this->'.$modelname.'->id : \'';
53
            $validationLine .= $rules.'|unique:'.$type->moduleName.'\'';
54
        } else {
55
            $validationLine = "'{$rules}'";
56
        }
57
        return $validationLine;
58
    }
59
}
60