Passed
Pull Request — master (#301)
by Fabien
02:07
created

SequentialProcessHandler::executeProcess()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 15
rs 10
c 0
b 0
f 0
cc 4
nc 8
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Churn\Process\Handler;
6
7
use Churn\Process\ChangesCountInterface;
8
use Churn\Process\CyclomaticComplexityInterface;
9
use Churn\Process\Observer\OnSuccess;
10
use Churn\Process\ProcessFactory;
11
use Churn\Process\ProcessInterface;
12
use Churn\Result\Result;
13
use Generator;
14
15
class SequentialProcessHandler implements ProcessHandler
16
{
17
18
    /**
19
     * Run the processes sequentially to gather information.
20
     *
21
     * @param Generator $filesFinder Collection of files.
22
     * @param ProcessFactory $processFactory Process Factory.
23
     * @param OnSuccess $onSuccess The OnSuccess event observer.
24
     */
25
    public function process(Generator $filesFinder, ProcessFactory $processFactory, OnSuccess $onSuccess): void
26
    {
27
        foreach ($filesFinder as $file) {
28
            $result = new Result($file->getDisplayPath());
29
            $processes = [
30
                $processFactory->createChangesCountProcess($file),
31
                $processFactory->createCyclomaticComplexityProcess($file),
32
            ];
33
34
            foreach ($processes as $process) {
35
                $this->executeProcess($process, $result);
36
            }
37
38
            $onSuccess($result);
39
        }
40
    }
41
42
    /**
43
     * Execute a process and save the result when it's done.
44
     *
45
     * @param ProcessInterface $process The process to execute.
46
     * @param Result $result The result to complete.
47
     */
48
    private function executeProcess(ProcessInterface $process, Result $result): Result
49
    {
50
        $process->start();
51
52
        while (!$process->isSuccessful());
53
54
        if ($process instanceof ChangesCountInterface) {
55
            $result->setCommits($process->countChanges());
56
        }
57
58
        if ($process instanceof CyclomaticComplexityInterface) {
59
            $result->setComplexity($process->getCyclomaticComplexity());
60
        }
61
62
        return $result;
63
    }
64
}
65