Passed
Pull Request — master (#1005)
by Maxim
10:03
created

CommandBootloader::configureTranslator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 1.0028

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 17
ccs 12
cts 14
cp 0.8571
rs 9.9
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1.0028
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 308
    public function init(ConsoleBootloader $console, ContainerInterface $container): void
34
    {
35 308
        $console->addCommand(CleanCommand::class);
36 308
        $console->addCommand(PublishCommand::class);
37
38 308
        $console->addCommand(Console\Command\ConfigureCommand::class);
39 308
        $console->addCommand(Console\Command\UpdateCommand::class);
40
41 308
        $console->addConfigureSequence(
42 308
            [RuntimeDirectory::class, 'ensure'],
43 308
            '<fg=magenta>[runtime]</fg=magenta> <fg=cyan>verify `runtime` directory access</fg=cyan>'
44 308
        );
45
46 308
        $this->configureExtensions($console, $container);
47
    }
48
49 308
    private function configureExtensions(ConsoleBootloader $console, ContainerInterface $container): void
50
    {
51 308
        if ($container->has(TranslatorInterface::class)) {
52 308
            $this->configureTranslator($console);
53
        }
54
55 308
        if ($container->has(ViewsInterface::class)) {
56 308
            $this->configureViews($console);
57
        }
58
59 308
        if ($container->has(EncryptionInterface::class)) {
60 308
            $this->configureEncrypter($console);
61
        }
62
63 308
        if ($container->has(RouterInterface::class)) {
64 308
            $console->addCommand(Router\ListCommand::class);
65
        }
66
67 308
        if ($container->has(ClassesInterface::class)) {
68 308
            $console->addCommand(Tokenizer\InfoCommand::class);
69
        }
70
    }
71
72 308
    private function configureTranslator(ConsoleBootloader $console): void
73
    {
74 308
        $console->addCommand(Translator\IndexCommand::class);
75 308
        $console->addCommand(Translator\ExportCommand::class);
76 308
        $console->addCommand(Translator\ResetCommand::class);
77
78 308
        $console->addConfigureSequence(
79 308
            function (FilesInterface $files, TranslatorConfig $config, OutputInterface $output): void {
80
                $files->ensureDirectory($config->getLocaleDirectory($config->getDefaultLocale()));
81
                $output->writeln('<info>The default locale directory has been ensured.</info>');
82 308
            },
83 308
            '<fg=magenta>[i18n]</fg=magenta> <fg=cyan>ensure default locale directory...</fg=cyan>'
84 308
        );
85
86 308
        $console->addConfigureSequence(
87 308
            'i18n:index',
88 308
            '<fg=magenta>[i18n]</fg=magenta> <fg=cyan>scan translator function and [[values]] usage...</fg=cyan>'
89 308
        );
90
    }
91
92 308
    private function configureViews(ConsoleBootloader $console): void
93
    {
94 308
        $console->addCommand(Views\ResetCommand::class);
95 308
        $console->addCommand(Views\CompileCommand::class);
96
97 308
        $console->addConfigureSequence(
98 308
            'views:compile',
99 308
            '<fg=magenta>[views]</fg=magenta> <fg=cyan>warm up view cache...</fg=cyan>'
100 308
        );
101
    }
102
103 308
    private function configureEncrypter(ConsoleBootloader $console): void
104
    {
105 308
        $console->addCommand(Encrypter\KeyCommand::class);
106
    }
107
}
108