Stack   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 58
ccs 22
cts 22
cp 1
rs 10
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A check() 0 3 1
A addToStack() 0 5 1
A add() 0 6 2
A get() 0 7 3
A reset() 0 3 1
A __construct() 0 3 1
1
<?php
2
3
namespace kalanis\kw_notify;
4
5
6
use ArrayAccess;
7
use kalanis\kw_notify\Interfaces\INotify;
8
9
10
/**
11
 * Class Stack
12
 * @package kalanis\kw_notify
13
 * Stack of notifications
14
 */
15
class Stack implements INotify
16
{
17
    /** @var ArrayAccess<string, array<string>> */
18
    protected ArrayAccess $storage;
19
20
    /**
21
     * @param ArrayAccess<string, array<string>> $storage Usually $_SESSION adapter
22
     */
23 3
    public function __construct(ArrayAccess $storage)
24
    {
25 3
        $this->storage = $storage;
26 3
    }
27
28
    /**
29
     * Add content to stack
30
     * Check stack before
31
     * @param string $stackName
32
     * @param string $message
33
     * @throws NotifyException
34
     */
35 3
    public function add(string $stackName, string $message): void
36
    {
37 3
        if (!$this->check($stackName)) {
38 3
            $this->reset($stackName);
39
        }
40 3
        $this->addToStack($stackName, $message);
41 3
    }
42
43
    /**
44
     * Simply add content to stack
45
     * @param string $stackName
46
     * @param string $message
47
     * @throws NotifyException
48
     */
49 3
    protected function addToStack(string $stackName, string $message): void
50
    {
51 3
        $local = $this->get($stackName);
52 3
        $local[] = $message;
53 3
        $this->storage->offsetSet($stackName, $local);
54 3
    }
55
56 3
    public function check(string $stackName): bool
57
    {
58 3
        return $this->storage->offsetExists($stackName);
59
    }
60
61 3
    public function get(string $stackName): array
62
    {
63 3
        if (!$this->check($stackName)) {
64 2
            return [];
65
        }
66 3
        $data = $this->storage->offsetGet($stackName);
67 3
        return empty($data) ? [] : $data;
68
    }
69
70 3
    public function reset(string $stackName): void
71
    {
72 3
        $this->storage->offsetSet($stackName, []);
73 3
    }
74
}
75