Test Failed
Push — develop ( 0ede07...29e3d8 )
by nguereza
02:43
created

SeedExecuteCommand::execute()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 17
c 1
b 0
f 0
nc 5
nop 0
dl 0
loc 24
rs 9.7
1
<?php
2
3
/**
4
 * Platine Framework
5
 *
6
 * Platine Framework is a lightweight, high-performance, simple and elegant
7
 * PHP Web framework
8
 *
9
 * This content is released under the MIT License (MIT)
10
 *
11
 * Copyright (c) 2020 Platine Framework
12
 *
13
 * Permission is hereby granted, free of charge, to any person obtaining a copy
14
 * of this software and associated documentation files (the "Software"), to deal
15
 * in the Software without restriction, including without limitation the rights
16
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
 * copies of the Software, and to permit persons to whom the Software is
18
 * furnished to do so, subject to the following conditions:
19
 *
20
 * The above copyright notice and this permission notice shall be included in all
21
 * copies or substantial portions of the Software.
22
 *
23
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
 * SOFTWARE.
30
 */
31
32
/**
33
 *  @file SeedExecuteCommand.php
34
 *
35
 *  The seed execute command class
36
 *
37
 *  @package    Platine\Framework\Migration\Seed\Command
38
 *  @author Platine Developers team
39
 *  @copyright  Copyright (c) 2020
40
 *  @license    http://opensource.org/licenses/MIT  MIT License
41
 *  @link   http://www.iacademy.cf
42
 *  @version 1.0.0
43
 *  @filesource
44
 */
45
46
declare(strict_types=1);
47
48
namespace Platine\Framework\Migration\Seed\Command;
49
50
use Platine\Config\Config;
51
use Platine\Filesystem\Filesystem;
52
use Platine\Framework\App\Application;
53
use Platine\Framework\Migration\MigrationRepository;
54
use RuntimeException;
55
56
/**
57
 * @class SeedExecuteCommand
58
 * @package Platine\Framework\Migration\Seed\Command
59
 * @template T
60
 * @extends AbstractSeedCommand<T>
61
 */
62
class SeedExecuteCommand extends AbstractSeedCommand
63
{
64
65
    /**
66
     * Create new instance
67
     * {@inheritodc}
68
     */
69
    public function __construct(
70
        Application $app,
71
        Config $config,
72
        Filesystem $filesystem
73
    ) {
74
        parent::__construct($app, $config, $filesystem);
75
        $this->setName('migration:exec')
76
             ->setDescription('Command to execute only one seed at a time');
77
78
        $this->addOption('-n|--name', 'the seed name', null, false, true);
79
    }
80
81
    /**
82
     * {@inheritodc}
83
     */
84
    public function execute()
85
    {
86
        $io = $this->io();
87
        $writer = $io->writer();
88
        $writer->boldYellow('SEED EXECUTION', true)->eol();
89
90
        $seeds = $this->getAvailableSeeds();
91
        $name = $this->getOptionValue('name');
92
93
        if (empty($seeds)) {
94
            $writer->boldGreen('No seed available to execute');
95
        } else {
96
            if (empty($name)) {
97
                $name = $io->choice('Choose which seed to execute', $seeds);
98
            }
99
            $className = $this->getSeedClassName($name);
0 ignored issues
show
Bug introduced by
It seems like $name can also be of type null; however, parameter $description of Platine\Framework\Migrat...and::getSeedClassName() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

99
            $className = $this->getSeedClassName(/** @scrutinizer ignore-type */ $name);
Loading history...
100
101
            if (!isset($seeds[$className])) {
102
                $writer->boldRed(sprintf(
103
                    'Invalid seed [%s]',
104
                    $name
105
                ));
106
            } else {
107
                $this->executeSeed($seeds[$className]);
108
            }
109
        }
110
    }
111
112
    /**
113
     * Execute seed
114
     * @param string $description
115
     * @return void
116
     */
117
    public function executeSeed(string $description): void
118
    {
119
        $writer = $this->io()->writer();
120
        $writer->boldGreen(sprintf(
121
            '* Execute seed up for %s',
122
            $description,
123
        ))->eol();
124
125
        $seed = $this->createSeedClass($description);
126
        $seed->run();
127
    }
128
}
129