Writer::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 9
ccs 0
cts 5
cp 0
rs 9.6666
cc 1
eloc 7
nc 1
nop 3
crap 2
1
<?php
2
/**
3
 * The MIT License (MIT)
4
 *
5
 * Copyright (c) 2016 Marco Muths
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a copy
8
 * of this software and associated documentation files (the "Software"), to deal
9
 * in the Software without restriction, including without limitation the rights
10
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
 * copies of the Software, and to permit persons to whom the Software is
12
 * furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be included in all
15
 * copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
 * SOFTWARE.
24
 */
25
26
namespace Squeeze;
27
28
use PhpParser\NodeTraverser;
29
use PhpParser\ParserAbstract;
30
31
class Writer
32
{
33
    /** @var ParserAbstract */
34
    private $parser;
35
36
    /** @var NodeTraverser */
37
    private $traverser;
38
39
    /** @var Printer */
40
    private $printer;
41
42
    /** @var string */
43
    private $target;
44
45
    /**
46
     * @param ParserAbstract $parser
47
     * @param NodeTraverser  $traverser
48
     * @param Printer        $printer
49
     */
50
    public function __construct(
51
        ParserAbstract $parser,
52
        NodeTraverser $traverser,
53
        Printer $printer
54
    ) {
55
        $this->parser = $parser;
56
        $this->traverser = $traverser;
57
        $this->printer = $printer;
58
    }
59
60
    /**
61
     * @param $target
62
     */
63
    public function setTarget($target)
64
    {
65
        $this->target = $target;
66
    }
67
68
    /**
69
     * @param array $classMap
70
     * @param bool  $noComments
71
     */
72
    public function minify(array $classMap, $noComments)
73
    {
74
        if ($noComments) {
75
            $this->printer->disableComments();
76
        }
77
78
        file_put_contents($this->target, "<?php ");
79
80
        foreach ($classMap as $file) {
81
            if ($stmts = $this->parser->parse(file_get_contents($file))) {
82
                $stmts = $this->traverser->traverse($stmts);
83
                $code = $this->printer->prettyPrintFile($stmts);
84
                file_put_contents($this->target, $code, FILE_APPEND);
85
            }
86
        }
87
    }
88
}
89