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

MinifyFilter   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
c 1
b 0
f 0
lcom 0
cbo 3
dl 0
loc 76
ccs 0
cts 49
cp 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
B run() 0 42 6
A checkRequirements() 0 9 2
A getSupportedExtensions() 0 7 1
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