Code Coverage |
||||||||||||||||
Lines |
Branches |
Paths |
Functions and Methods |
Classes and Traits |
||||||||||||
| Total | |
100.00% |
48 / 48 |
|
100.00% |
39 / 39 |
|
46.15% |
12 / 26 |
|
100.00% |
7 / 7 |
CRAP | |
100.00% |
1 / 1 |
| Flash | |
100.00% |
48 / 48 |
|
100.00% |
39 / 39 |
|
46.15% |
12 / 26 |
|
100.00% |
7 / 7 |
89.85 | |
100.00% |
1 / 1 |
| __construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| add | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| peek | |
100.00% |
8 / 8 |
|
100.00% |
8 / 8 |
|
40.00% |
2 / 5 |
|
100.00% |
1 / 1 |
7.46 | |||
| pop | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| clear | |
100.00% |
8 / 8 |
|
100.00% |
8 / 8 |
|
40.00% |
2 / 5 |
|
100.00% |
1 / 1 |
7.46 | |||
| has | |
100.00% |
7 / 7 |
|
100.00% |
8 / 8 |
|
40.00% |
2 / 5 |
|
100.00% |
1 / 1 |
7.46 | |||
| messages | |
100.00% |
15 / 15 |
|
100.00% |
12 / 12 |
|
37.50% |
3 / 8 |
|
100.00% |
1 / 1 |
14.79 | |||
| 1 | <?php |
| 2 | |
| 3 | declare(strict_types=1); |
| 4 | |
| 5 | namespace Celemas\Session; |
| 6 | |
| 7 | /** @api */ |
| 8 | class 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 | } |
Below are the source code lines that represent each code branch as identified by Xdebug. Please note a branch is not
necessarily coterminous with a line, a line may contain multiple branches and therefore show up more than once.
Please also be aware that some branches may be implicit rather than explicit, e.g. an if statement
always has an else as part of its logical flow even if you didn't write one.
| 14 | private readonly Session $session, |
| 15 | private readonly string $key = self::STORAGE, |
| 16 | ) {} |
| 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 | } |
| 60 | public function clear(?string $queue = null): void |
| 61 | { |
| 62 | if ($queue === null) { |
| 63 | $this->session->set($this->key, []); |
| 64 | |
| 65 | return; |
| 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) { |
| 71 | if ($message['queue'] === $queue) { |
| 72 | unset($messages[$key]); |
| 73 | } |
| 74 | } |
| 75 | |
| 76 | $this->session->set($this->key, $messages); |
| 77 | } |
| 79 | public function has(?string $queue = null): bool |
| 80 | { |
| 81 | $messages = $this->messages(); |
| 82 | |
| 83 | if ($queue === null) { |
| 84 | return count($messages) > 0; |
| 87 | foreach ($messages as $message) { |
| 87 | foreach ($messages as $message) { |
| 88 | if ($message['queue'] === $queue) { |
| 89 | return true; |
| 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 | } |
| 100 | $messages = $this->session->get($this->key, []); |
| 101 | |
| 102 | if (!is_array($messages)) { |
| 103 | return []; |
| 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; |
| 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) { |
| 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 | } |
| 32 | public function peek(?string $queue = null): array |
| 33 | { |
| 34 | $messages = $this->messages(); |
| 35 | |
| 36 | if ($queue === null) { |
| 37 | return $messages; |
| 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) { |
| 43 | if ($message['queue'] === $queue) { |
| 44 | $flashes[] = $message; |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | return $flashes; |
| 49 | } |
| 52 | public function pop(?string $queue = null): array |
| 53 | { |
| 54 | $flashes = $this->peek($queue); |
| 55 | $this->clear($queue); |
| 56 | |
| 57 | return $flashes; |
| 58 | } |