Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
48 / 48
100.00% covered (success)
100.00%
39 / 39
46.15% covered (danger)
46.15%
12 / 26
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
Flash
100.00% covered (success)
100.00%
48 / 48
100.00% covered (success)
100.00%
39 / 39
46.15% covered (danger)
46.15%
12 / 26
100.00% covered (success)
100.00%
7 / 7
89.85
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 add
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 peek
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
8 / 8
40.00% covered (danger)
40.00%
2 / 5
100.00% covered (success)
100.00%
1 / 1
7.46
 pop
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 clear
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
8 / 8
40.00% covered (danger)
40.00%
2 / 5
100.00% covered (success)
100.00%
1 / 1
7.46
 has
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
8 / 8
40.00% covered (danger)
40.00%
2 / 5
100.00% covered (success)
100.00%
1 / 1
7.46
 messages
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
12 / 12
37.50% covered (danger)
37.50%
3 / 8
100.00% covered (success)
100.00%
1 / 1
14.79
1<?php
2
3declare(strict_types=1);
4
5namespace Celemas\Session;
6
7/** @api */
8class Flash
9{
10    public const string STORAGE = 'celemas_flash_messages';
11
12    /** @param non-empty-string $key */
13    public function __construct(
14        private readonly Session $session,
15        private readonly string $key = self::STORAGE,
16    ) {}
17
18    public function add(
19        string $message,
20        string $queue = 'default',
21    ): void {
22        $messages = $this->messages();
23        $messages[] = [
24            'message' => $message,
25            'queue' => $queue,
26        ];
27
28        $this->session->set($this->key, $messages);
29    }
30
31    /** @return array<array-key, array{message: string, queue: string}> */
32    public function peek(?string $queue = null): array
33    {
34        $messages = $this->messages();
35
36        if ($queue === null) {
37            return $messages;
38        }
39
40        $flashes = [];
41
42        foreach ($messages as $message) {
43            if ($message['queue'] === $queue) {
44                $flashes[] = $message;
45            }
46        }
47
48        return $flashes;
49    }
50
51    /** @return array<array-key, array{message: string, queue: string}> */
52    public function pop(?string $queue = null): array
53    {
54        $flashes = $this->peek($queue);
55        $this->clear($queue);
56
57        return $flashes;
58    }
59
60    public function clear(?string $queue = null): void
61    {
62        if ($queue === null) {
63            $this->session->set($this->key, []);
64
65            return;
66        }
67
68        $messages = $this->messages();
69
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
72                unset($messages[$key]);
73            }
74        }
75
76        $this->session->set($this->key, $messages);
77    }
78
79    public function has(?string $queue = null): bool
80    {
81        $messages = $this->messages();
82
83        if ($queue === null) {
84            return count($messages) > 0;
85        }
86
87        foreach ($messages as $message) {
88            if ($message['queue'] === $queue) {
89                return true;
90            }
91        }
92
93        return false;
94    }
95
96    /** @return array<array-key, array{message: string, queue: string}> */
97    private function messages(): array
98    {
99        /** @psalm-suppress MixedAssignment */
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
103            return [];
104        }
105
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
128}

Paths

Below are the source code lines that represent each code path as identified by Xdebug. Please note a path is not necessarily coterminous with a line, a line may contain multiple paths and therefore show up more than once. Please also be aware that some paths may include implicit rather than explicit branches, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

Flash->__construct
14        private readonly Session $session,
15        private readonly string $key = self::STORAGE,
16    ) {}
Flash->add
19        string $message,
20        string $queue = 'default',
21    ): void {
22        $messages = $this->messages();
23        $messages[] = [
24            'message' => $message,
25            'queue' => $queue,
26        ];
27
28        $this->session->set($this->key, $messages);
29    }
Flash->clear
60    public function clear(?string $queue = null): void
61    {
62        if ($queue === null) {
 
63            $this->session->set($this->key, []);
64
65            return;
60    public function clear(?string $queue = null): void
61    {
62        if ($queue === null) {
 
68        $messages = $this->messages();
69
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
72                unset($messages[$key]);
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
72                unset($messages[$key]);
73            }
74        }
75
76        $this->session->set($this->key, $messages);
77    }
60    public function clear(?string $queue = null): void
61    {
62        if ($queue === null) {
 
68        $messages = $this->messages();
69
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
72                unset($messages[$key]);
73            }
74        }
75
76        $this->session->set($this->key, $messages);
77    }
60    public function clear(?string $queue = null): void
61    {
62        if ($queue === null) {
 
68        $messages = $this->messages();
69
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
72                unset($messages[$key]);
73            }
74        }
75
76        $this->session->set($this->key, $messages);
77    }
60    public function clear(?string $queue = null): void
61    {
62        if ($queue === null) {
 
68        $messages = $this->messages();
69
70        foreach ($messages as $key => $message) {
 
70        foreach ($messages as $key => $message) {
71            if ($message['queue'] === $queue) {
72                unset($messages[$key]);
73            }
74        }
75
76        $this->session->set($this->key, $messages);
77    }
Flash->has
79    public function has(?string $queue = null): bool
80    {
81        $messages = $this->messages();
82
83        if ($queue === null) {
 
84            return count($messages) > 0;
79    public function has(?string $queue = null): bool
80    {
81        $messages = $this->messages();
82
83        if ($queue === null) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
 
88            if ($message['queue'] === $queue) {
 
89                return true;
79    public function has(?string $queue = null): bool
80    {
81        $messages = $this->messages();
82
83        if ($queue === null) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
 
88            if ($message['queue'] === $queue) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
88            if ($message['queue'] === $queue) {
89                return true;
90            }
91        }
92
93        return false;
94    }
79    public function has(?string $queue = null): bool
80    {
81        $messages = $this->messages();
82
83        if ($queue === null) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
88            if ($message['queue'] === $queue) {
89                return true;
90            }
91        }
92
93        return false;
94    }
79    public function has(?string $queue = null): bool
80    {
81        $messages = $this->messages();
82
83        if ($queue === null) {
 
87        foreach ($messages as $message) {
 
87        foreach ($messages as $message) {
88            if ($message['queue'] === $queue) {
89                return true;
90            }
91        }
92
93        return false;
94    }
Flash->messages
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
103            return [];
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
 
110                continue;
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
 
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
 
118            if (is_string($body) && is_string($queue)) {
 
118            if (is_string($body) && is_string($queue)) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
 
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
 
118            if (is_string($body) && is_string($queue)) {
 
118            if (is_string($body) && is_string($queue)) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
 
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
 
118            if (is_string($body) && is_string($queue)) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
 
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
 
118            if (is_string($body) && is_string($queue)) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
100        $messages = $this->session->get($this->key, []);
101
102        if (!is_array($messages)) {
 
106        $flashes = [];
107
108        foreach ($messages as $key => $message) {
 
108        foreach ($messages as $key => $message) {
109            if (!is_array($message)) {
110                continue;
111            }
112
113            /** @psalm-suppress MixedAssignment */
114            $body = $message['message'] ?? null;
115            /** @psalm-suppress MixedAssignment */
116            $queue = $message['queue'] ?? null;
117
118            if (is_string($body) && is_string($queue)) {
119                $flashes[$key] = [
120                    'message' => $body,
121                    'queue' => $queue,
122                ];
123            }
124        }
125
126        return $flashes;
127    }
Flash->peek
32    public function peek(?string $queue = null): array
33    {
34        $messages = $this->messages();
35
36        if ($queue === null) {
 
37            return $messages;
32    public function peek(?string $queue = null): array
33    {
34        $messages = $this->messages();
35
36        if ($queue === null) {
 
40        $flashes = [];
41
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
 
43            if ($message['queue'] === $queue) {
 
42        foreach ($messages as $message) {
43            if ($message['queue'] === $queue) {
44                $flashes[] = $message;
 
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
43            if ($message['queue'] === $queue) {
44                $flashes[] = $message;
45            }
46        }
47
48        return $flashes;
49    }
32    public function peek(?string $queue = null): array
33    {
34        $messages = $this->messages();
35
36        if ($queue === null) {
 
40        $flashes = [];
41
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
 
43            if ($message['queue'] === $queue) {
 
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
43            if ($message['queue'] === $queue) {
44                $flashes[] = $message;
45            }
46        }
47
48        return $flashes;
49    }
32    public function peek(?string $queue = null): array
33    {
34        $messages = $this->messages();
35
36        if ($queue === null) {
 
40        $flashes = [];
41
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
43            if ($message['queue'] === $queue) {
44                $flashes[] = $message;
45            }
46        }
47
48        return $flashes;
49    }
32    public function peek(?string $queue = null): array
33    {
34        $messages = $this->messages();
35
36        if ($queue === null) {
 
40        $flashes = [];
41
42        foreach ($messages as $message) {
 
42        foreach ($messages as $message) {
43            if ($message['queue'] === $queue) {
44                $flashes[] = $message;
45            }
46        }
47
48        return $flashes;
49    }
Flash->pop
52    public function pop(?string $queue = null): array
53    {
54        $flashes = $this->peek($queue);
55        $this->clear($queue);
56
57        return $flashes;
58    }