Completed
Branch master (bbeaa5)
by Edwin
02:03
created

BroadcastManager::getBroadcasters()   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

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
namespace EdwinLuijten\Ekko\Broadcast;
4
5
use EdwinLuijten\Ekko\Broadcast\Broadcasters\BroadcasterInterface;
6
7
class BroadcastManager
8
{
9
    /**
10
     * @var array
11
     */
12
    protected $broadcasters = [];
13
14
    /**
15
     * @var BroadcasterInterface
16
     */
17
    private $default;
18
19
    /**
20
     * @param string $broadcaster
21
     * @return BroadcasterInterface
22
     */
23 18
    public function connection($broadcaster = null)
24
    {
25 18
        return $this->broadcaster($broadcaster);
26
    }
27
28
    /**
29
     * @param string $broadcaster
30
     * @return BroadcasterInterface
31
     */
32 18
    public function broadcaster($broadcaster = null)
33
    {
34 18
        return $this->broadcasters[$broadcaster] = $this->get($broadcaster);
35
    }
36
37
    /**
38
     * @param string $broadcaster
39
     * @return BroadcasterInterface
40
     */
41 18
    protected function get($broadcaster)
42
    {
43 18
        if (is_null($broadcaster)) {
44 6
            return $this->default;
45
        }
46
47 12
        if (!isset($this->broadcasters[$broadcaster])) {
48 3
            throw new \InvalidArgumentException(sprintf('Broadcaster [%s] is not defined.', $broadcaster));
49
        }
50
51 9
        return $this->broadcasters[$broadcaster];
52
    }
53
54
    /**
55
     * @param string $name
56
     * @param BroadcasterInterface $broadcaster
57
     */
58 15
    public function add($name, BroadcasterInterface $broadcaster)
59
    {
60 15
        $this->broadcasters[$name] = $broadcaster;
61 15
    }
62
63
    /**
64
     * @return BroadcasterInterface
65
     */
66 6
    public function getDefaultBroadcaster()
67
    {
68 6
        if (!$this->default instanceof BroadcasterInterface) {
69 3
            throw new \InvalidArgumentException(
70 3
                sprintf('Default broadcaster not set or does not implement %s', BroadcasterInterface::class)
71 2
            );
72
        }
73
74 3
        return $this->default;
75
    }
76
77
    /**
78
     * @param BroadcasterInterface $broadcaster
79
     */
80 21
    public function setDefaultBroadcaster(BroadcasterInterface $broadcaster)
81
    {
82 21
        $this->default = $broadcaster;
83 21
    }
84
85
    /**
86
     * @return array
87
     */
88 3
    public function getBroadcasters()
89
    {
90 3
        return $this->broadcasters;
91
    }
92
93
    /**
94
     * @param $method
95
     * @param $arguments
96
     * @return mixed
97
     */
98 12
    public function __call($method, $arguments)
99
    {
100 12
        return call_user_func_array([$this->default, $method], $arguments);
101
    }
102
}
103