Completed
Push — master ( 9f2dac...cab9cb )
by Arnaud
07:03 queued 01:55
created

MinifyFilter::run()   B

Complexity

Conditions 6
Paths 20

Size

Total Lines 42
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 42
ccs 0
cts 33
cp 0
rs 8.439
cc 6
eloc 26
nc 20
nop 2
crap 42
1
<?php
2
3
namespace JK\Sam\Filter\Minify;
4
5
use Exception;
6
use JK\Sam\Filter\Filter;
7
use MatthiasMullie\Minify\CSS;
8
use MatthiasMullie\Minify\JS;
9
use SplFileInfo;
10
11
class MinifyFilter extends Filter
12
{
13
    /**
14
     * @param SplFileInfo[] $sources
15
     * @param SplFileInfo[] $destinations
16
     * @return SplFileInfo[]
17
     */
18
    public function run(array $sources, array $destinations)
19
    {
20
        $cssMinifier = new CSS();
21
        $jsMinifier = new JS();
22
        $hasJs = false;
23
        $hasCss = false;
24
25
        // add source files to the minifier
26
        foreach ($sources as $source) {
27
28
            if ($source->getExtension() == 'js') {
29
                $this->addNotification('Add '.$source.' to js minification');
30
                $jsMinifier->add($source);
31
                $hasJs = true;
32
            }
33
34
            if ($source->getExtension() == 'css') {
35
                $this->addNotification('Add '.$source.' to css minification');
36
                $cssMinifier->add($source);
37
                $hasCss = true;
38
            }
39
        }
40
        $cssMinified = $this->getCacheDir().'minified.css';
41
        $jsMinified = $this->getCacheDir().'minified.js';
42
        $updatedSources = [];
43
44
        // js minification if required
45
        if ($hasJs) {
46
            $this->addNotification($jsMinified.' js minification');
47
            $jsMinifier->minify($jsMinified);
48
            $updatedSources[] = $jsMinified;
49
        }
50
51
        // css minification if required
52
        if ($hasCss) {
53
            $this->addNotification($cssMinified.' css minification');
54
            $jsMinifier->minify($cssMinified);
55
            $updatedSources[] = $cssMinified;
56
        }
57
58
        return $updatedSources;
59
    }
60
61
    /**
62
     * @throws Exception
63
     */
64
    public function checkRequirements()
65
    {
66
        if (!class_exists('MatthiasMullie\Minify\CSS')) {
67
            throw new Exception(
68
                'MatthiasMullie\Minify\CSS should exists. '.
69
                'Install the MatthiasMullie\Minify library (composer require matthiasmullie/minify)'
70
            );
71
        }
72
    }
73
74
    /**
75
     * Return the file extensions supported by this filter.
76
     *
77
     * @return string[]
78
     */
79
    public function getSupportedExtensions()
80
    {
81
        return [
82
            'css',
83
            'js',
84
        ];
85
    }
86
}
87