EventContractLoader   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Test Coverage

Coverage 57.14%

Importance

Changes 6
Bugs 0 Features 1
Metric Value
wmc 3
eloc 21
c 6
b 0
f 1
dl 0
loc 42
ccs 12
cts 21
cp 0.5714
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 24 2
A __construct() 0 4 1
1
<?php
2
3
namespace MallardDuck\DynamicEcho\Loader;
4
5
use Illuminate\Support\Collection;
6
use Illuminate\Support\Str;
7
use MallardDuck\DynamicEcho\ChannelManager;
8
use MallardDuck\DynamicEcho\Channels\AbstractChannelParameters;
9
use MallardDuck\DynamicEcho\Collections\ChannelAwareEventCollection;
10
use MallardDuck\DynamicEcho\Composer\CacheResolver;
11
use MallardDuck\DynamicEcho\Contracts\HasDynamicChannelFormula;
12
13
// TODO: Make this class good at loading channels and events - then rename it properly.
14
class EventContractLoader
15
{
16
    /**
17
     * @var ChannelManager
18
     */
19
    private ChannelManager $channelManager;
20
21
    /**
22
     * @var CacheResolver
23
     */
24
    private CacheResolver $composeCacheResolver;
25
26 28
    public function __construct(ChannelManager $channelManager, CacheResolver $composeCacheResolver)
27
    {
28 28
        $this->channelManager = $channelManager;
29 28
        $this->composeCacheResolver = $composeCacheResolver;
30 28
    }
31
32 28
    public function load(): ChannelAwareEventCollection
33
    {
34 28
        $events = $this->composeCacheResolver->getEvents();
35 28
        $channelManager = $this->channelManager;
36
37 28
        $events->filter(static function ($val, $key) {
38
            $implements = class_implements($key);
39
            if (array_key_exists(HasDynamicChannelFormula::class, $implements)) {
40
                return true;
41
            }
42
            return false;
43 28
        })->each(static function ($val, $key) use ($channelManager) {
44
            /** @var AbstractChannelParameters $channelParameterClass */
45
            $channelParameterClass = $key::getChannelParametersClassname();
46
            $channelManager->pushEventDto(LoadedEventDTO::new(
47
                (string) Str::of($key)->afterLast("\\"),
48
                $key,
49
                $key::getEventJSCallback(),
50
                $channelParameterClass::getInstance()
51
            ));
52 28
        });
53 28
        gc_mem_caches();
54
55 28
        return $this->channelManager->getChannelEventCollection();
56
    }
57
}
58