Completed
Push — master ( 6dd664...23f979 )
by Freek
10s
created

OptimizerChainFactory::binaryPath()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 4
nc 2
nop 1
1
<?php
2
3
namespace Spatie\LaravelImageOptimizer;
4
5
use Psr\Log\LoggerInterface;
6
use Spatie\ImageOptimizer\Optimizer;
7
use Spatie\ImageOptimizer\DummyLogger;
8
use Spatie\ImageOptimizer\OptimizerChain;
9
use Spatie\LaravelImageOptimizer\Exceptions\InvalidConfiguration;
10
11
class OptimizerChainFactory
12
{
13
    public static function create(array $config)
14
    {
15
        return (new OptimizerChain())
16
            ->useLogger(static::getLogger($config))
17
            ->setTimeout($config['timeout'])
18
            ->setOptimizers(static::getOptimizers($config));
19
    }
20
21
    protected static function getLogger($config): LoggerInterface
22
    {
23
        $configuredLogger = $config['log_optimizer_activity'];
24
25
        if ($configuredLogger === true) {
26
            return app('log');
27
        }
28
29
        if ($configuredLogger === false) {
30
            return new DummyLogger();
31
        }
32
33
        if (! $configuredLogger instanceof LoggerInterface) {
34
            throw InvalidConfiguration::notAnLogger($configuredLogger);
35
        }
36
37
        return new $configuredLogger;
38
    }
39
40
    protected static function getOptimizers(array $config)
41
    {
42
        return collect($config['optimizers'])
43
          ->mapWithKeys(function (array $options, string $optimizerClass) use($config) {
44
              if (! is_a($optimizerClass, Optimizer::class, true)) {
45
                  throw InvalidConfiguration::notAnOptimizer($optimizerClass);
46
              }
47
48
              // Initialize optimizer class
49
              $newOptimizerClass = new $optimizerClass();
50
51
              if(self::binaryPath($config)){
52
                  $newOptimizerClass->setBinaryPath(self::binaryPath($config));
53
              }
54
55
              $newOptimizerClass->setOptions($options);
56
57
              return [$optimizerClass => $newOptimizerClass];
58
          })
59
          ->toArray();
60
    }
61
62
    /**
63
     * Chek whether binary path has been defined in config
64
     *
65
     * @param array $config
66
     * @return string
67
     */
68
    public function binaryPath($config){
69
        if(isset($config['binary_path']) && $config['binary_path']) {
70
            return $config['binary_path'];
71
        }
72
        return '';
73
    }
74
}