Failed Conditions
Pull Request — 0.3 (#20)
by jean
03:05
created

onStartIterableProcess()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
nc 4
nop 2
dl 0
loc 17
ccs 9
cts 9
cp 1
crap 4
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
namespace Darkilliant\ProcessBundle\ProcessNotifier;
4
5
use Darkilliant\ProcessBundle\Console\ProgressBar;
6
use Darkilliant\ProcessBundle\State\ProcessState;
7
use Darkilliant\ProcessBundle\Step\IterableStepInterface;
8
use Darkilliant\ProcessBundle\Step\StepInterface;
9
use Symfony\Component\Console\ConsoleEvents;
10
use Symfony\Component\Console\Event\ConsoleEvent;
11
use Symfony\Component\Console\Output\NullOutput;
12
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
13
14
/**
15
 * @internal
16
 * Class ProgressBarProcessNotifier
17
 */
18
class ProgressBarProcessNotifier implements EventSubscriberInterface, ProcessNotifierInterface
19
{
20
    /** @var ProgressBar */
21
    private $progressBar;
22
23 13
    public function __construct(ProgressBar $progressBar)
24
    {
25 13
        $this->progressBar = $progressBar;
26 13
        $this->progressBar->setOutput(new NullOutput());
27 13
    }
28
29 1
    public static function getSubscribedEvents()
30
    {
31
        return [
32 1
            ConsoleEvents::COMMAND => ['onCommand', 255],
33
        ];
34
    }
35
36 1
    public function onCommand(ConsoleEvent $event)
37
    {
38 1
        $this->progressBar->setOutput($event->getOutput());
39 1
    }
40
41 1
    public function onStartProcess(ProcessState $state, StepInterface $step)
42
    {
43 1
        return;
44
    }
45
46 7
    public function onStartIterableProcess(ProcessState $state, StepInterface $step)
47
    {
48 7
        if (!$step instanceof IterableStepInterface) {
49 2
            return null;
50
        }
51
52 5
        if (!$state->getOptions()['progress_bar']) {
53 1
            return null;
54
        }
55
56 4
        $count = $step->count($state);
57
58 4
        if (!$count) {
59 1
            return null;
60
        }
61
62 3
        $this->progressBar->create($count, get_class($step));
63 3
    }
64
65 3
    public function onUpdateIterableProcess(ProcessState $state, StepInterface $step)
66
    {
67 3
        if (!$step instanceof IterableStepInterface) {
68 1
            return null;
69
        }
70
71 2
        if (!$state->getOptions()['progress_bar']) {
72 1
            return;
73
        }
74
75 1
        $this->progressBar->setProgress($step->getProgress($state));
76 1
    }
77
78 3
    public function onEndProcess(ProcessState $state, StepInterface $step)
79
    {
80 3
        if (!$step instanceof IterableStepInterface) {
81 1
            return null;
82
        }
83
84 2
        if (!$state->getOptions()['progress_bar']) {
85 1
            return;
86
        }
87
88 1
        $this->progressBar->finish();
89 1
    }
90
91 1
    public function onExecutedProcess(ProcessState $state, StepInterface $step)
92
    {
93 1
    }
94
}
95