Completed
Push — master ( b16c28...402287 )
by recca
01:53
created

ControllerMakeCommand::buildClass()   B

Complexity

Conditions 5
Paths 16

Size

Total Lines 28
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 5.1502

Importance

Changes 0
Metric Value
dl 0
loc 28
ccs 18
cts 22
cp 0.8182
rs 8.439
c 0
b 0
f 0
cc 5
eloc 20
nc 16
nop 1
crap 5.1502
1
<?php
2
3
namespace Recca0120\Generator\Console;
4
5
use Symfony\Component\Console\Input\InputOption;
6
7
class ControllerMakeCommand extends GeneratorCommand
8
{
9
    /**
10
     * The console command name.
11
     *
12
     * @var string
13
     */
14
    protected $name = 'generate:controller';
15
16
    /**
17
     * The console command description.
18
     *
19
     * @var string
20
     */
21
    protected $description = 'Create a new controller';
22
23
    /**
24
     * The type of class being generated.
25
     *
26
     * @var string
27
     */
28
    protected $type = 'Controller';
29
30
    /**
31
     * Get the stub file for the generator.
32
     *
33
     * @return string
34
     */
35
    protected function getStub()
36
    {
37
        return __DIR__.'/../../resources/stubs/Http/Controllers/Controller.stub';
38
    }
39
40
    /**
41
     * Get the default namespace for the class.
42
     *
43
     * @param string $rootNamespace
44
     *
45
     * @return string
46
     */
47 1
    protected function getDefaultNamespace($rootNamespace)
48
    {
49 1
        return $rootNamespace.'\Http\Controllers';
50
    }
51
52
    /**
53
     * Build the class with the given name.
54
     *
55
     * @param string $name
56
     *
57
     * @return string
58
     */
59 1
    protected function buildClass($name)
60
    {
61 1
        $fullBaseClass = $this->option('extend') ?:
62
            class_exists($this->getNamespace($name).'\Controller') === false
63 1
                ? 'App\Http\Controllers\Controller'
64 1
                : $this->getNamespace($name).'\Controller';
65
66 1
        $rootNamespace = trim($this->rootNamespace(), '\\');
67 1
        $namespace = $this->getNamespace($name);
68 1
        $baseClass = ltrim(str_replace($namespace, '', $name), '\\');
69 1
        $repositoryContractInterface = $rootNamespace.'\Repositories\Contracts\\'.$baseClass.'Repository';
70 1
        $repositoryClass = $rootNamespace.'\Repositories\\'.$baseClass.'Repository';
71 1
        $requestClass = $rootNamespace.'\Http\Requests\\'.$baseClass.'Request';
72
73 1
        if (class_exists($repositoryClass) === false) {
74 1
            $this->call('generate:repository', ['name' => $baseClass]);
75 1
        }
76
77 1
        if (class_exists($requestClass) === false) {
78 1
            $this->call('generate:request', ['name' => $baseClass]);
79 1
        }
80
81 1
        return $this->generator->setFullControllerClass($name.'Controller')
82 1
            ->setFullBaseClass($fullBaseClass)
83
            ->setFullRepositoryInterface($repositoryContractInterface)
84
            ->setFullRequestClass($requestClass)
85
            ->render($this->getStub());
86
    }
87
88
    /**
89
     * Get the destination class path.
90
     *
91
     * @param string $name
92
     *
93
     * @return string
94
     */
95 1
    protected function getPath($name)
96
    {
97 1
        return str_replace('.php', 'Controller.php', parent::getPath($name));
98
    }
99
100
    /**
101
     * Get the console command options.
102
     *
103
     * @return array
104
     */
105 1
    protected function getOptions()
106
    {
107
        return [
108 1
            ['extend', '', InputOption::VALUE_OPTIONAL, 'controller extend.'],
109 1
        ];
110
    }
111
}
112