Queue   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 16
lcom 1
cbo 2
dl 0
loc 87
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 2
A push() 0 5 1
A insert() 0 16 4
A next() 0 5 1
A remove() 0 11 3
A clear() 0 5 1
A buildElement() 0 7 1
A getQueue() 0 4 1
A getDetails() 0 10 2
1
<?php
2
3
namespace Nopolabs\Yabot\Plugins\Queue;
4
5
6
use Nopolabs\Yabot\Message\Message;
7
use Nopolabs\Yabot\Helpers\StorageTrait;
8
use Nopolabs\Yabot\Storage\StorageInterface;
9
10
class Queue
11
{
12
    use StorageTrait;
13
14
    protected $queue;
15
16
    public function __construct(StorageInterface $storage, array $config)
17
    {
18
        $this->setStorageKey($config['storageName'] ?? 'queue');
19
        $this->setStorage($storage);
20
21
        $this->queue = $this->load() ?: [];
22
23
        $this->save($this->queue);
24
    }
25
26
    public function push($element)
27
    {
28
        $this->queue[] = $element;
29
        $this->save($this->queue);
30
    }
31
32
    public function insert($element, $index)
33
    {
34
        $queue = [];
35
        $idx = -1;
36
        foreach ($this->queue as $idx => $el) {
37
            if ($idx === $index) {
38
                $queue[] = $element;
39
            }
40
            $queue[] = $el;
41
        }
42
        if ($idx < $index) {
43
            $queue[] = $element;
44
        }
45
        $this->queue = $queue;
46
        $this->save($this->queue);
47
    }
48
49
    public function next()
50
    {
51
        array_shift($this->queue);
52
        $this->save($this->queue);
53
    }
54
55
    public function remove($element)
56
    {
57
        $queue = [];
58
        foreach ($this->queue as $el) {
59
            if ($el['item'] !== $element['item']) {
60
                $queue[] = $el;
61
            }
62
        }
63
        $this->queue = $queue;
64
        $this->save($this->queue);
65
    }
66
67
    public function clear()
68
    {
69
        $this->queue = [];
70
        $this->save($this->queue);
71
    }
72
73
    public function buildElement(Message $msg, array $matches)
74
    {
75
        return [
76
            'user' => $msg->getUsername(),
77
            'item' => $matches['item'],
78
        ];
79
    }
80
81
    public function getQueue() : array
82
    {
83
        return $this->queue;
84
    }
85
86
    public function getDetails() : array
87
    {
88
        $details = [];
89
90
        foreach ($this->getQueue() as $element) {
91
            $details[] = json_encode($element);
92
        }
93
94
        return $details;
95
    }
96
}