Passed
Push — master ( 1f8075...93e91b )
by Fabien
02:17
created

OnSuccessBuilder   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 11
eloc 22
c 1
b 0
f 0
dl 0
loc 74
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A build() 0 16 3
A addOnSuccess() 0 7 2
A addOnSuccessCache() 0 7 2
A addOnSuccessProgress() 0 7 2
A addOnSuccessAccumulate() 0 7 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Churn\Process\Observer;
6
7
use Churn\Process\CacheProcessFactory;
8
use Churn\Result\ResultAccumulator;
9
use Symfony\Component\Console\Helper\ProgressBar;
10
11
class OnSuccessBuilder
12
{
13
14
    /**
15
     * @param array<mixed> $objects Objects who need to observe OnSuccess events.
16
     */
17
    public function build(array $objects): OnSuccess
18
    {
19
        $observers = [];
20
21
        foreach ($objects as $object) {
22
            $this->addOnSuccess($object, $observers);
23
            $this->addOnSuccessProgress($object, $observers);
24
            $this->addOnSuccessAccumulate($object, $observers);
25
            $this->addOnSuccessCache($object, $observers);
26
        }
27
28
        if (1 === \count($observers)) {
29
            return $observers[0];
30
        }
31
32
        return new OnSuccessCollection(...$observers);
33
    }
34
35
    /**
36
     * @param mixed $object Object who needs to observe OnSuccess events.
37
     * @param array<OnSuccess> $observers Collection of observers.
38
     */
39
    private function addOnSuccess($object, array &$observers): void
40
    {
41
        if (!$object instanceof OnSuccess) {
42
            return;
43
        }
44
45
        $observers[] = $object;
46
    }
47
48
    /**
49
     * @param mixed $object Object who needs to observe OnSuccess events.
50
     * @param array<OnSuccess> $observers Collection of observers.
51
     */
52
    private function addOnSuccessProgress($object, array &$observers): void
53
    {
54
        if (!$object instanceof ProgressBar) {
55
            return;
56
        }
57
58
        $observers[] = new OnSuccessProgress($object);
59
    }
60
61
    /**
62
     * @param mixed $object Object who needs to observe OnSuccess events.
63
     * @param array<OnSuccess> $observers Collection of observers.
64
     */
65
    private function addOnSuccessAccumulate($object, array &$observers): void
66
    {
67
        if (!$object instanceof ResultAccumulator) {
68
            return;
69
        }
70
71
        $observers[] = new OnSuccessAccumulate($object);
72
    }
73
74
    /**
75
     * @param mixed $object Object who needs to observe OnSuccess events.
76
     * @param array<OnSuccess> $observers Collection of observers.
77
     */
78
    private function addOnSuccessCache($object, array &$observers): void
79
    {
80
        if (!$object instanceof CacheProcessFactory) {
81
            return;
82
        }
83
84
        $observers[] = new OnSuccessCache($object);
85
    }
86
}
87