Completed
Push — master ( ed7824...4c153c )
by Maarten
01:49 queued 10s
created

CreateModelAction   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 1
dl 0
loc 41
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A execute() 0 13 1
A getFillables() 0 16 5
1
<?php
2
3
namespace Mtolhuys\LaravelSchematics\Actions\Model;
4
5
use Illuminate\Support\Facades\File;
6
7
class CreateModelAction
8
{
9
    /**
10
     * @param $request
11
     * @return void
12
     */
13
    public function execute($request)
14
    {
15
        $name = $request['name'];
16
        $namespace = config('schematics.namespace');
17
        $stub = __DIR__ . '/../../../resources/stubs/model.stub';
18
        $path = app_path(str_replace(['App\\', '\\'], ['', '/'], $namespace) . "{$name}.php");
19
20
        File::put($path, str_replace(
21
            ['$namespace$', '$model$', '$fillables$'],
22
            [rtrim($namespace, '\\'), $name, $this->getFillables($request['fields'])],
23
            File::get($stub)
24
        ));
25
    }
26
27
    /**
28
     * @param array $fields
29
     * @return string
30
     */
31
    private function getFillables(array $fields): string
32
    {
33
        $fillables = '';
34
35
        foreach ($fields as $index => $field) {
36
            if ($index === 0) {
37
                $fillables .= "'{$field['name']}'" . (count($fields) > 1 ? ',' : '');
38
            } elseif ($index === count($fields) - 1) {
39
                $fillables .= PHP_EOL . str_repeat(' ', 8) . "'{$field['name']}'";
40
            } else {
41
                $fillables .= PHP_EOL . str_repeat(' ', 8) . "'{$field['name']}',";
42
            }
43
        }
44
45
        return $fillables;
46
    }
47
}
48