Test Setup Failed
Branch master (e0eff2)
by Alexey
06:56
created

AbstractCommand::output()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1.125

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 4
cp 0.5
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1.125
1
<?php
2
3
namespace Venta\Console;
4
5
use Symfony\Component\Console\Command\Command as SymfonyCommand;
6
use Symfony\Component\Console\Input\InputInterface;
7
use Symfony\Component\Console\Output\OutputInterface;
8
use Venta\Console\Command\SignatureParser;
9
10
/**
11
 * Class AbstractCommand
12
 *
13
 * @package Venta\Console
14
 */
15
abstract class AbstractCommand extends SymfonyCommand
16
{
17
    /**
18
     * The command description.
19
     *
20
     * @var string
21
     */
22
    protected $description = '';
23
24
    /**
25
     * The command signature.
26
     *
27
     * @var string
28
     */
29
    protected $signature = '';
30
31
    /**
32
     * The Input implementation.
33
     *
34
     * @var InputInterface
35
     */
36
    private $input;
37
38
    /**
39
     * The Output implementation.
40
     *
41
     * @var OutputInterface
42
     */
43
    private $output;
44
45
    /**
46
     * {@inheritdoc}
47
     */
48 1
    final public function run(InputInterface $input, OutputInterface $output)
49
    {
50 1
        $this->input = $input;
51 1
        $this->output = $output;
52
53 1
        return parent::run($input, $output);
54
    }
55
56
    /**
57
     * {@inheritdoc}
58
     */
59 2
    final protected function configure()
60
    {
61 2
        $signature = (new SignatureParser())->parse($this->signature);
62
63 2
        $this->setName($signature['name']);
64 2
        $this->setDescription($this->description);
65
66 2
        foreach ($signature['arguments'] as $argument) {
67 2
            $this->addArgument(
68 2
                $argument['name'],
69 2
                $argument['type'],
70 2
                $argument['description'],
71 2
                $argument['default']
72
            );
73
        }
74
75 2
        foreach ($signature['options'] as $option) {
76 2
            $this->addOption($option['name'], null, $option['type'], $option['description'], $option['default']);
77
        }
78 2
    }
79
80
    /**
81
     * {@inheritdoc}
82
     */
83 1
    final protected function execute(InputInterface $input, OutputInterface $output)
84
    {
85 1
        return $this->handle();
86
    }
87
88
    /**
89
     * The command handler.
90
     *
91
     * @return int Exit code.
92
     */
93
    abstract protected function handle();
94
95
    /**
96
     * Returns input.
97
     *
98
     * @return InputInterface
99
     */
100 1
    protected function input(): InputInterface
101
    {
102 1
        return $this->input;
103
    }
104
105
    /**
106
     * Returns output.
107
     *
108
     * @return OutputInterface
109
     */
110 1
    protected function output(): OutputInterface
111
    {
112 1
        return $this->output;
113
    }
114
}