PublishCommand::handle()   A
last analyzed

Complexity

Conditions 5
Paths 7

Size

Total Lines 39
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 26
c 1
b 0
f 0
nc 7
nop 0
dl 0
loc 39
rs 9.1928
1
<?php
2
3
namespace Itstructure\Mult\Commands;
4
5
use Illuminate\Console\Command;
6
use Symfony\Component\Process\Process;
7
use Itstructure\Mult\MultServiceProvider;
8
9
/**
10
 * Class PublishCommand
11
 *
12
 * @package Itstructure\Mult\Commands
13
 *
14
 * @author Andrey Girnik <[email protected]>
15
 */
16
class PublishCommand extends Command
17
{
18
    /**
19
     * The name and signature of the console command.
20
     * @var string
21
     */
22
    protected $signature = 'mult:publish '.
23
    '{--force : Overwrite existing files by default. This option can not be used.}'.
24
    '{--only= : Publish only specific part. Available parts: migrations, seeders. This option can not be used.}';
25
26
    /**
27
     * The console command description.
28
     * @var string
29
     */
30
    protected $description = 'Publish the Mult package parts.';
31
32
    /**
33
     * Execute the console command.
34
     * @return void
35
     */
36
    public function handle()
37
    {
38
        $this->info('Starting publication process of the Mult package parts...');
39
40
        $callArguments = ['--provider' => MultServiceProvider::class];
41
42
        if ($this->option('only')) {
43
            switch ($this->option('only')) {
44
                case 'migrations':
45
                    $this->info('Publish just a part: migrations.');
46
                    $callArguments['--tag'] = 'migrations';
47
                    break;
48
49
                case 'seeders':
50
                    $this->info('Publish just a part: seeders.');
51
                    $callArguments['--tag'] = 'seeders';
52
                    break;
53
54
                default:
55
                    $this->error('Invalid "only" argument value!');
56
                    return;
57
            }
58
59
        } else {
60
            $this->info('Publish all parts: migrations, seeders.');
61
        }
62
63
        if ($this->option('force')) {
64
            $this->warn('Force publishing.');
65
            $callArguments['--force'] = true;
66
        }
67
68
        $this->call('vendor:publish', $callArguments);
69
70
        $this->info('Dumping the autoloaded files and reloading all new files.');
71
        $composer = $this->findComposer();
72
        $process = Process::fromShellCommandline($composer.' dump-autoload -o');
73
        $process->setTimeout(null);
74
        $process->setWorkingDirectory(base_path())->run();
75
    }
76
77
    /**
78
     * Get the composer command for the environment.
79
     * @return string
80
     */
81
    private function findComposer()
82
    {
83
        if (file_exists(getcwd().'/composer.phar')) {
84
            return '"'.PHP_BINARY.'" '.getcwd().'/composer.phar';
85
        }
86
87
        return 'composer';
88
    }
89
}
90