EventContractLoader::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 2
c 2
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 2
crap 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