Passed
Push — main ( afae0a...eb4a74 )
by Dimitri
09:41 queued 03:53
created

Publish::execute()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 32
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 10.5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 22
c 1
b 0
f 0
nc 6
nop 1
dl 0
loc 32
ccs 5
cts 10
cp 0.5
crap 10.5
rs 8.9457
1
<?php
2
3
/**
4
 * This file is part of Blitz PHP framework.
5
 *
6
 * (c) 2022 Dimitri Sitchet Tomkeu <[email protected]>
7
 *
8
 * For the full copyright and license information, please view
9
 * the LICENSE file that was distributed with this source code.
10
 */
11
12
namespace BlitzPHP\Cli\Commands\Utilities;
13
14
use BlitzPHP\Cli\Console\Command;
15
use BlitzPHP\Publisher\Publisher;
16
17
/**
18
 * Découvre toutes les classes Publisher à partir du répertoire « Publishers/ » dans les espaces de noms.
19
 * Exécute `publish()` à partir de chaque instance, en analysant chaque résultat.
20
 */
21
class Publish extends Command
22
{
23
    /**
24
     * @var string Groupe
25
     */
26
    protected $group = 'BlitzPHP';
27
28
    /**
29
     * @var string Nom
30
     */
31
    protected $name = 'publish';
32
33
    /**
34
     * @var string Description
35
     */
36
    protected $description = 'Découvre et exécute toutes les classes Publisher prédéfinies.';
37
38
    /**
39
     * {@inheritDoc}
40
     */
41
    protected $arguments = [
42
        '[directory:Publishers]' => 'Le répertoire à analyser dans chaque namespace.',
43
    ];
44
45
    /**
46
     * {@inheritDoc}
47
     */
48
    protected $options = [
49
        '-n|--namespace' => 'Le namespace à partir duquel on devra chercher les fichiers à publier. Par défaut, tous les namespaces sont analysés.',
50
    ];
51
52
    /**
53
     * Affiche l'aide du script klinge cli lui-même.
54
     */
55
    public function execute(array $params)
56
    {
57 2
        $directory = $this->argument('directory', $params['directory'] ?? 'Publishers');
58 2
        $namespace = $this->option('namespace', $params['namespace'] ?? '');
59
60
        if ([] === $publishers = Publisher::discover($directory, $namespace)) {
61
            if ($namespace === '') {
62
                $this->write(lang('Publisher.publishMissing', [$directory]));
63
            } else {
64
                $this->write(lang('Publisher.publishMissingNamespace', [$directory, $namespace]));
65
            }
66
67
            return;
68
        }
69
70
        foreach ($publishers as $publisher) {
71
            if ($publisher->publish()) {
72
                $this->ok(lang('Publisher.publishSuccess', [
73
                    $publisher::class,
74
                    count($publisher->getPublished()),
75
                    $publisher->getDestination(),
76 2
                ]));
77
            } else {
78
                $this->fail(lang('Publisher.publishFailure', [
79
                    $publisher::class,
80
                    $publisher->getDestination(),
81 2
                ]));
82
83
                foreach ($publisher->getErrors() as $file => $exception) {
84 2
                    $this->write($file);
85
                    $this->fail($exception->getMessage());
86
                    $this->newLine();
87
                }
88
            }
89
        }
90
    }
91
}
92