Passed
Push — master ( 512e51...5d8438 )
by butschster
06:09 queued 18s
created

CommandBootloader   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Test Coverage

Coverage 95.65%

Importance

Changes 0
Metric Value
wmc 10
eloc 37
c 0
b 0
f 0
dl 0
loc 76
ccs 44
cts 46
cp 0.9565
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A init() 0 14 1
A configureExtensions() 0 21 6
A configureViews() 0 8 1
A configureEncrypter() 0 3 1
A configureTranslator() 0 17 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Spiral\Bootloader;
6
7
use Psr\Container\ContainerInterface;
8
use Spiral\Boot\Bootloader\Bootloader;
9
use Spiral\Command\Encrypter;
10
use Spiral\Command\Router;
11
use Spiral\Command\Tokenizer;
12
use Spiral\Command\Translator;
13
use Spiral\Command\Views;
14
use Spiral\Command\CleanCommand;
15
use Spiral\Command\PublishCommand;
16
use Spiral\Console;
17
use Spiral\Console\Bootloader\ConsoleBootloader;
18
use Spiral\Console\Sequence\RuntimeDirectory;
19
use Spiral\Encrypter\EncryptionInterface;
20
use Spiral\Files\FilesInterface;
21
use Spiral\Router\RouterInterface;
22
use Spiral\Tokenizer\ClassesInterface;
23
use Spiral\Translator\Config\TranslatorConfig;
24
use Spiral\Translator\TranslatorInterface;
25
use Spiral\Views\ViewsInterface;
26
use Symfony\Component\Console\Output\OutputInterface;
27
28
/**
29
 * Register framework directories in tokenizer in order to locate default commands.
30
 */
31
final class CommandBootloader extends Bootloader
32
{
33 322
    public function init(ConsoleBootloader $console, ContainerInterface $container): void
34
    {
35 322
        $console->addCommand(CleanCommand::class);
36 322
        $console->addCommand(PublishCommand::class);
37
38 322
        $console->addCommand(Console\Command\ConfigureCommand::class);
39 322
        $console->addCommand(Console\Command\UpdateCommand::class);
40
41 322
        $console->addConfigureSequence(
42 322
            [RuntimeDirectory::class, 'ensure'],
43 322
            '<fg=magenta>[runtime]</fg=magenta> <fg=cyan>verify `runtime` directory access</fg=cyan>'
44 322
        );
45
46 322
        $this->configureExtensions($console, $container);
47
    }
48
49 322
    private function configureExtensions(ConsoleBootloader $console, ContainerInterface $container): void
50
    {
51 322
        if ($container->has(TranslatorInterface::class)) {
52 322
            $this->configureTranslator($console);
53
        }
54
55 322
        if ($container->has(ViewsInterface::class)) {
56 322
            $this->configureViews($console);
57
        }
58
59 322
        if ($container->has(EncryptionInterface::class)) {
60 322
            $this->configureEncrypter($console);
61
        }
62
63 322
        if ($container->has(RouterInterface::class)) {
64 322
            $console->addCommand(Router\ListCommand::class);
65
        }
66
67 322
        if ($container->has(ClassesInterface::class)) {
68 322
            $console->addCommand(Tokenizer\InfoCommand::class);
69 322
            $console->addCommand(Tokenizer\ValidateCommand::class);
70
        }
71
    }
72
73 322
    private function configureTranslator(ConsoleBootloader $console): void
74
    {
75 322
        $console->addCommand(Translator\IndexCommand::class);
76 322
        $console->addCommand(Translator\ExportCommand::class);
77 322
        $console->addCommand(Translator\ResetCommand::class);
78
79 322
        $console->addConfigureSequence(
80 322
            function (FilesInterface $files, TranslatorConfig $config, OutputInterface $output): void {
81
                $files->ensureDirectory($config->getLocaleDirectory($config->getDefaultLocale()));
82
                $output->writeln('<info>The default locale directory has been ensured.</info>');
83 322
            },
84 322
            '<fg=magenta>[i18n]</fg=magenta> <fg=cyan>ensure default locale directory...</fg=cyan>'
85 322
        );
86
87 322
        $console->addConfigureSequence(
88 322
            'i18n:index',
89 322
            '<fg=magenta>[i18n]</fg=magenta> <fg=cyan>scan translator function and [[values]] usage...</fg=cyan>'
90 322
        );
91
    }
92
93 322
    private function configureViews(ConsoleBootloader $console): void
94
    {
95 322
        $console->addCommand(Views\ResetCommand::class);
96 322
        $console->addCommand(Views\CompileCommand::class);
97
98 322
        $console->addConfigureSequence(
99 322
            'views:compile',
100 322
            '<fg=magenta>[views]</fg=magenta> <fg=cyan>warm up view cache...</fg=cyan>'
101 322
        );
102
    }
103
104 322
    private function configureEncrypter(ConsoleBootloader $console): void
105
    {
106 322
        $console->addCommand(Encrypter\KeyCommand::class);
107
    }
108
}
109