Completed
Push — master ( b31c56...70860f )
by Sébastien
05:51 queued 03:58
created

ConfigProvider   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Test Coverage

Coverage 29.63%

Importance

Changes 0
Metric Value
eloc 30
dl 0
loc 101
ccs 8
cts 27
cp 0.2963
rs 10
c 0
b 0
f 0
wmc 13

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 4 1
A getDependencies() 0 16 1
A getConsoleCommands() 0 5 1
A getProjectBaseDirectory() 0 8 2
A getProjectLogDirectory() 0 13 4
A getProjectCacheDirectory() 0 13 4
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * @see       https://github.com/soluble-io/soluble-mediatools-cli for the canonical repository
7
 *
8
 * @copyright Copyright (c) 2018-2019 Sébastien Vanvelthem. (https://github.com/belgattitude)
9
 * @license   https://github.com/soluble-io/soluble-mediatools-cli/blob/master/LICENSE.md MIT
10
 */
11
12
namespace Soluble\MediaTools\Cli\Config;
13
14
use Soluble\MediaTools\Cli\Command\ConvertDirCommand;
15
use Soluble\MediaTools\Cli\Command\ConvertDirCommandFactory;
16
use Soluble\MediaTools\Cli\Command\ScanCommand;
17
use Soluble\MediaTools\Cli\Command\ScanCommandFactory;
18
use Soluble\MediaTools\Cli\Service\MediaToolsServiceFactory;
19
use Soluble\MediaTools\Cli\Service\MediaToolsServiceInterface;
20
use Soluble\MediaTools\Preset\MP4\StreamableH264Preset;
21
use Soluble\MediaTools\Preset\MP4\StreamableH264PresetFactory;
22
use Soluble\MediaTools\Preset\WebM\GoogleVod2019Preset;
23
use Soluble\MediaTools\Preset\WebM\GoogleVod2019PresetFactory;
24
use Soluble\MediaTools\Video\Config\ConfigProvider as VideoConfigProvider;
25
26
class ConfigProvider
27
{
28
    /**
29
     * Returns the configuration array.
30
     *
31
     * To add a bit of a structure, each section is defined in a separate
32
     * method which returns an array with its configuration.
33
     */
34 1
    public function __invoke(): array
35
    {
36
        return [
37 1
            'dependencies' => $this->getDependencies(),
38
        ];
39
    }
40
41
    /**
42
     * Returns the container dependencies.
43
     *
44
     * @return array<string, array>
45
     */
46 8
    public function getDependencies(): array
47
    {
48 8
        return array_merge_recursive(
49 8
            (new VideoConfigProvider())->getDependencies(),
50
            [
51 8
                'factories'  => [
52
                    // Services
53
                    MediaToolsServiceInterface::class => MediaToolsServiceFactory::class,
54
55
                    // Commands
56
                    ConvertDirCommand::class => ConvertDirCommandFactory::class,
57
                    ScanCommand::class       => ScanCommandFactory::class,
58
59
                    // Presets
60
                    GoogleVod2019Preset::class  => GoogleVod2019PresetFactory::class,
61
                    StreamableH264Preset::class => StreamableH264PresetFactory::class,
62
                ],
63
            ]
64
        );
65
    }
66
67
    /**
68
     * Return build console commands class names.
69
     *
70
     * @return string[]
71
     */
72 1
    public function getConsoleCommands(): array
73
    {
74
        return [
75 1
            \Soluble\MediaTools\Cli\Command\ScanCommand::class,
76
            \Soluble\MediaTools\Cli\Command\ConvertDirCommand::class,
77
        ];
78
    }
79
80
    /**
81
     * @throws \RuntimeException
82
     */
83
    public static function getProjectBaseDirectory(): string
84
    {
85
        $baseDir = dirname(__FILE__, 3);
86
        if (!is_dir($baseDir)) {
87
            throw new \RuntimeException(sprintf('Cannot get project base directory %s', $baseDir));
88
        }
89
90
        return $baseDir;
91
    }
92
93
    /**
94
     * @throws \RuntimeException
95
     */
96
    public static function getProjectCacheDirectory(): string
97
    {
98
        $cacheDir = self::getProjectBaseDirectory() . implode(DIRECTORY_SEPARATOR, ['data', 'cache']);
99
100
        if (!is_dir($cacheDir)) {
101
            throw new \RuntimeException(sprintf('Cache directory %s does not exists or invalid.', $cacheDir));
102
        }
103
104
        if (!is_readable($cacheDir) || !is_writable($cacheDir)) {
105
            throw new \RuntimeException(sprintf('Cache directory %s must have read/write access.', $cacheDir));
106
        }
107
108
        return $cacheDir;
109
    }
110
111
    /**
112
     * @throws \RuntimeException
113
     */
114
    public static function getProjectLogDirectory(): string
115
    {
116
        $logDir = self::getProjectBaseDirectory() . implode(DIRECTORY_SEPARATOR, ['data', 'logs']);
117
118
        if (!is_dir($logDir)) {
119
            throw new \RuntimeException(sprintf('Log directory %s does not exists or invalid.', $logDir));
120
        }
121
122
        if (!is_readable($logDir) || !is_writable($logDir)) {
123
            throw new \RuntimeException(sprintf('Cache directory %s must have read/write access.', $logDir));
124
        }
125
126
        return $logDir;
127
    }
128
}
129