MakeCommand::getPreset()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 0
cts 8
cp 0
rs 9.8666
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 6
1
<?php namespace Arcanedev\Assets\Console;
2
3
use Arcanedev\Assets\Pipes;
4
use Illuminate\Support\Str;
5
6
/**
7
 * Class     MakeCommand
8
 *
9
 * @package  Arcanedev\Assets\Console
10
 * @author   ARCANEDEV <[email protected]>
11
 */
12
class MakeCommand extends Command
13
{
14
    /* -----------------------------------------------------------------
15
     |  Properties
16
     | -----------------------------------------------------------------
17
     */
18
19
    /**
20
     * The name and signature of the console command.
21
     *
22
     * @var string
23
     */
24
    protected $signature = 'assets:make 
25
        {name : Name of the asset} 
26
        {--W|workspace= : Select a predefined workspace} 
27
        {--P|preset= : Preset for the new asset}';
28
29
    /**
30
     * The console command description.
31
     *
32
     * @var string
33
     */
34
    protected $description = 'Make a new assets folder';
35
36
    /* -----------------------------------------------------------------
37
     |  Main Methods
38
     | -----------------------------------------------------------------
39
     */
40
41
    /**
42
     * Execute the console command.
43
     *
44
     * @return mixed
45
     */
46
    public function handle()
47
    {
48
        $this->ensureIsInitiated();
49
50
        $this->pipeline()
51
             ->send($passable = $this->getPassable())
52
             ->through($this->getPipes($passable['preset']))
53
             ->then(function (array $passable) {
0 ignored issues
show
Unused Code introduced by
The parameter $passable is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
54
                 $this->info('All finished! Please run `yarn install && yarn run dev` and you are all set to go!');
55
             });
56
    }
57
58
    /* -----------------------------------------------------------------
59
     |  Other Methods
60
     | -----------------------------------------------------------------
61
     */
62
63
    /**
64
     * Get the passable for the pipeline.
65
     *
66
     * @return array
67
     */
68
    protected function getPassable()
69
    {
70
        return parent::getPassable() + [
71
            'name'   => Str::slug($this->argument('name') ?: $this->ask('What is the name of the asset')),
72
            'preset' => $this->getPreset(),
73
        ];
74
    }
75
76
    /**
77
     * Get the pipes.
78
     *
79
     * @param  string  $preset
80
     *
81
     * @return array
82
     */
83
    protected function getPipes($preset)
84
    {
85
        return array_merge([
86
            Pipes\Make\EnsureAssetsDirectoryExists::class,
87
        ], $this->getPresetPipes($preset));
88
    }
89
90
    /**
91
     * Get the preset pipes.
92
     *
93
     * @param  string  $preset
94
     *
95
     * @return array
96
     *
97
     * @throws \Exception
98
     */
99
    private function getPresetPipes($preset)
100
    {
101
        $pipes = config("assets.presets.{$preset}");
102
103
        if ( ! is_array($pipes))
104
            throw new \Exception("Invalid selected preset [{$preset}]");
105
106
        return $pipes;
107
    }
108
109
    /**
110
     * Get the selected preset.
111
     *
112
     * @return string
113
     */
114
    protected function getPreset()
115
    {
116
        if (is_null($preset = $this->option('preset'))) {
117
            $preset = $this->choice(
118
                'Choose your preset',
119
                array_keys(config('assets.presets')),
120
                'none'
121
            );
122
        }
123
124
        return $preset;
125
    }
126
}
127