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

CreateModelAction::execute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
cc 1
nc 1
nop 1
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