Completed
Push — 4.x ( aaeb5e...270996 )
by Cees-Jan
52s queued 47s
created

CompileShell   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 151
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 70.83%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 5
dl 0
loc 151
ccs 34
cts 48
cp 0.7083
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A setTwigview() 0 4 1
A plugin() 0 5 1
A file() 0 5 1
A compileTemplate() 0 13 2
A walkIterator() 0 6 2
B getOptionParser() 0 31 1
A all() 0 9 2
1
<?php
2
3
/**
4
 * This file is part of TwigView.
5
 *
6
 ** (c) 2014 Cees-Jan Kiewiet
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
namespace WyriHaximus\TwigView\Shell;
12
13
use Cake\Console\ConsoleIo;
14
use Cake\Console\Shell;
15
use Cake\Core\Plugin;
16
use WyriHaximus\TwigView\Lib\Scanner;
17
use WyriHaximus\TwigView\View\TwigView;
18
19
/**
20
 * Class CompileTemplatesShell
21
 * @package WyriHaximus\TwigView\Console\Command
22
 */
23
// @codingStandardsIgnoreStart
24
class CompileShell extends Shell
25
// @codingStandardsIgnoreEnd
26
{
27
28
    /**
29
     * Instance of TwigView to be used to compile templates.
30
     *
31
     * @var TwigView
32
     */
33
    protected $twigView;
34
35
    /**
36
     * Constructor.
37
     *
38
     * @param ConsoleIo $consoleIo An IO instance.
39
     */
40 2
    public function __construct(ConsoleIo $consoleIo = null)
41
    {
42 2
        parent::__construct($consoleIo);
43
44 2
        $this->twigView = new TwigView();
45 2
    }
46
47
    /**
48
     * Set TwigView.
49
     *
50
     * @param TwigView $twigView TwigView instance.
51
     *
52
     * @return void
53
     */
54 1
    public function setTwigview(TwigView $twigView)
55
    {
56 1
        $this->twigView = $twigView;
57 1
    }
58
59
    /**
60
     * Compile all templates.
61
     *
62
     * @return void
63
     */
64
    // @codingStandardsIgnoreStart
65 1
    public function all()
66
    {
67 1
        $this->out('<info>Compiling all templates</info>');
68
69 1
        foreach(Scanner::all() as $section => $templates) {
70 1
            $this->out('<info>Compiling ' . $section . '\'s templates</info>');
71 1
            $this->walkIterator($templates);
72
        }
73 1
    }
74
    // @codingStandardsIgnoreEnd
75
76
    /**
77
     * Compile only this plugin.
78
     *
79
     * @param string $plugin Plugin name.
80
     *
81
     * @return void
82
     */
83 1
    public function plugin($plugin)
84
    {
85 1
        $this->out('<info>Compiling one ' . $plugin . '\'s templates</info>');
86 1
        $this->walkIterator(Scanner::plugin($plugin));
87
    }
88
89
    /**
90
     * Only compile one file.
91
     *
92
     * @param string $fileName File to compile.
93
     *
94
     * @return void
95
     */
96 1
    public function file($fileName)
97
    {
98 1
        $this->out('<info>Compiling one template</info>');
99 1
        $this->compileTemplate($fileName);
100 1
    }
101
102
    /**
103
     * Walk over $iterator and compile all templates in it.
104
     *
105
     * @param mixed $iterator Iterator to walk over.
106
     *
107
     * @return void
108
     */
109
    protected function walkIterator($iterator)
110
    {
111
        foreach ($iterator as $template) {
112
            $this->compileTemplate($template);
113
        }
114
    }
115
116
    /**
117
     * Compile a template.
118
     *
119
     * @param string $fileName Template to compile.
120
     *
121
     * @return void
122
     */
123
    protected function compileTemplate($fileName)
124
    {
125
        try {
126
            $this->
127
                twigView->
128
                getTwig()->
129
                loadTemplate($fileName);
130
            $this->out('<success>' . $fileName . '</success>');
131
        } catch (\Exception $exception) {
132
            $this->out('<error>' . $fileName . '</error>');
133
            $this->out('<error>' . $exception->getMessage() . '</error>');
134
        }
135
    }
136
137
    /**
138
     * Set options for this console.
139
     *
140
     * @return \Cake\Console\ConsoleOptionParser
141
     */
142
    // @codingStandardsIgnoreStart
143 1
    public function getOptionParser()
144
    {
145
        // @codingStandardsIgnoreEnd
146 1
        return parent::getOptionParser()->addSubcommand(
0 ignored issues
show
Bug Compatibility introduced by
The expression parent::getOptionParser(...mplates precompiler')); of type Cake\Console\ConsoleOptionParser|string adds the type string to the return on line 146 which is incompatible with the return type of the parent method Cake\Console\Shell::getOptionParser of type Cake\Console\ConsoleOptionParser.
Loading history...
Deprecated Code introduced by
The method Cake\Console\ConsoleOptionParser::description() has been deprecated with message: 3.4.0 Use setDescription()/getDescription() instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
147 1
            'all',
148
            [
149 1
                'short' => 'a',
150
                // @codingStandardsIgnoreStart
151 1
                'help' => __('Searches and precompiles all twig templates it finds.')
152
                // @codingStandardsIgnoreEnd
153
            ]
154 1
        )->addSubcommand(
155 1
            'plugin',
156
            [
157 1
                'short' => 'p',
158
                // @codingStandardsIgnoreStart
159 1
                'help' => __('Searches and precompiles all twig templates for a specific plugin.')
160
                // @codingStandardsIgnoreEnd
161
            ]
162 1
        )->addSubcommand(
163 1
            'file',
164
            [
165 1
                'short' => 'f',
166
                // @codingStandardsIgnoreStart
167 1
                'help' => __('Precompile a specific file.')
168
                // @codingStandardsIgnoreEnd
169
            ]
170
        // @codingStandardsIgnoreStart
171 1
        )->description(__('TwigView templates precompiler'));
172
        // @codingStandardsIgnoreEnd
173
    }
174
}
175