Completed
Push — master ( bc194a...d90c8b )
by Siad
17:01
created

SassTaskCompilerFactory::assertCompilerIsSet()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 2
nc 2
nop 1
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
class SassTaskCompilerFactory
6
{
7
8
    /**
9
     * @var FileSystem
10
     */
11
    private $fs;
12
13 7
    public function __construct(FileSystem $fs)
14
    {
15 7
        $this->fs = $fs;
16 7
    }
17
18 7
    public function prepareCompiler(SassTask $sassTask): SassTaskCompiler
19
    {
20 7
        $this->assertCompilerIsSet($sassTask);
21
22
        // If both are set to be used, prefer sass over scssphp.
23 4
        if ($sassTask->getUseSass() && $sassTask->getUseScssPhp()) {
24 1
            if ($this->fs->which($sassTask->getExecutable()) === false) {
0 ignored issues
show
introduced by
The condition $this->fs->which($sassTa...Executable()) === false is always false.
Loading history...
25
                $this->assertScssPhpIsAvailable();
26
                return new ScssPhpCompiler(
27
                    $sassTask->getStyle(),
28
                    $sassTask->getEncoding(),
29
                    $sassTask->getLineNumbers(),
30
                    $sassTask->getPath()
31
                );
32
            }
33 3
        } elseif ($sassTask->getUseSass()) {
34 2
            $this->assertSassIsAvailable($sassTask);
35 1
        } elseif ($sassTask->getUseScssPhp()) {
36 1
            $this->assertScssPhpIsAvailable();
37 1
            return new ScssPhpCompiler(
38 1
                $sassTask->getStyle(),
39 1
                $sassTask->getEncoding(),
40 1
                $sassTask->getLineNumbers(),
41 1
                $sassTask->getPath()
42
            );
43
        }
44
45 2
        return new SassCompiler($sassTask->getExecutable(), $sassTask->getFlags());
46
    }
47
48 7
    private function assertCompilerIsSet(SassTask $sassTask): void
49
    {
50 7
        if (!$sassTask->getUseSass() && !$sassTask->getUseScssPhp()) {
51 3
            throw new BuildException("Neither sass nor scssphp are to be used.");
52
        }
53 4
    }
54
55 1
    private function assertScssPhpIsAvailable(): void
56
    {
57 1
        if (!$this->isScssPhpLoaded()) {
58
            $msg = sprintf(
59
                "Install scssphp/scssphp."
60
            );
61
            throw new BuildException($msg);
62
        }
63 1
    }
64
65 2
    private function assertSassIsAvailable(SassTask $sassTask): void
66
    {
67 2
        if ($this->fs->which($sassTask->getExecutable()) === false) {
0 ignored issues
show
introduced by
The condition $this->fs->which($sassTa...Executable()) === false is always false.
Loading history...
68 1
            $msg = sprintf(
69 1
                "%s not found. Install sass.",
70 1
                $sassTask->getExecutable()
71
            );
72 1
            throw new BuildException($msg);
73
        }
74 1
    }
75
76 1
    private function isScssPhpLoaded(): bool
77
    {
78 1
        return class_exists('\ScssPhp\ScssPhp\Compiler');
79
    }
80
}
81