Test Failed
Push — master ( afd99a...0309cf )
by Ilya
03:13
created

Laraflash::offsetExists()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Coderello\Laraflash\Laraflash;
4
5
use ArrayAccess;
6
use JsonSerializable;
7
use BadMethodCallException;
8
use Illuminate\Support\Collection;
9
use Illuminate\Contracts\Support\Htmlable;
10
use Illuminate\Contracts\Support\Jsonable;
11
use Illuminate\Contracts\Support\Arrayable;
12
use Illuminate\Contracts\Support\Renderable;
13
use Coderello\Laraflash\FlashMessage\FlashMessage;
14
use Coderello\Laraflash\MessagesStorage\MessagesStorageContract;
15
use Coderello\Laraflash\FlashMessage\FlashMessageFactoryContract;
16
17
class Laraflash implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, Renderable, Htmlable
18
{
19
    /** @var Collection */
20
    protected $messages;
21
22
    protected $flashMessageFactory;
23
24
    protected $messagesStorage;
25
26
    protected $laraflashRenderer;
27
28
    public function __construct(FlashMessageFactoryContract $flashMessageFactory, MessagesStorageContract $messagesStorage, LaraflashRendererContract $laraflashRenderer)
29
    {
30
        $this->flashMessageFactory = $flashMessageFactory;
31
32
        $this->messagesStorage = $messagesStorage;
33
34
        $this->laraflashRenderer = $laraflashRenderer;
35
36
        $this->messages = Collection::make();
37
    }
38
39
    public function load(): self
40
    {
41
        $this->messages = Collection::make($this->messagesStorage->get())
42
            ->whereInstanceOf(FlashMessage::class);
43
44
        return $this;
45
    }
46
47
    public function save(): self
48
    {
49
        $this->messagesStorage->put($this->messages->all());
50
51
        return $this;
52
    }
53
54
    public function message(?string $content = null, ?string $title = null, ?string $type = null, ?int $delay = null, ?int $hops = null): FlashMessage
55
    {
56
        $message = $this->flashMessageFactory->make();
57
58
        if (! is_null($content)) {
59
            $message->content($content);
60
        }
61
62
        if (! is_null($title)) {
63
            $message->title($title);
64
        }
65
66
        if (! is_null($type)) {
67
            $message->type($type);
68
        }
69
70
        if (! is_null($delay)) {
71
            $message->delay($delay);
72
        }
73
74
        if (! is_null($hops)) {
75
            $message->hops($hops);
76
        }
77
78
        $this->messages->push($message);
79
80
        return $message;
81
    }
82
83
    public function keep(): self
84
    {
85
        $this->messages->each(function (FlashMessage $message) {
86
            $message->keep();
87
        });
88
89
        return $this;
90
    }
91
92
    public function clear(): self
93
    {
94
        $this->messages = Collection::make();
95
96
        return $this;
97
    }
98
99
    public function all(): Collection
100
    {
101
        return Collection::make($this->messages);
102
    }
103
104
    public function ready(): Collection
105
    {
106
        return $this->messages
107
            ->filter(function (FlashMessage $message) {
108
                return $message->get('delay') === 0;
109
            });
110
    }
111
112
    public function touch(): self
113
    {
114
        $this->messages = $this->messages->reject(function (FlashMessage $message) {
115
            return $message->get('hops') <= 1 && $message->get('delay') === 0;
116
        })->each(function (FlashMessage $message) {
117
            if ($message->get('hops') > 1 && $message->get('delay') === 0) {
118
                $message->hops($message->get('hops') - 1);
119
            } elseif ($message->get('delay') > 0) {
120
                $message->delay($message->get('delay') - 1);
121
            }
122
        });
123
124
        return $this;
125
    }
126
127
    public function toArray()
128
    {
129
        return $this->ready()->map(function (FlashMessage $message) {
130
            return $message->toArray();
131
        })->values()->all();
132
    }
133
134
    public function jsonSerialize()
135
    {
136
        return $this->toArray();
137
    }
138
139
    public function toJson($options = 0): string
140
    {
141
        return json_encode($this, $options);
142
    }
143
144
    public function offsetExists($offset)
145
    {
146
        return $this->messages->has($offset);
147
    }
148
149
    public function offsetGet($offset)
150
    {
151
        return $this->messages->get($offset);
152
    }
153
154
    public function offsetSet($offset, $value)
155
    {
156
        throw new BadMethodCallException;
157
    }
158
159
    public function offsetUnset($offset)
160
    {
161
        $this->messages->forget($offset);
162
    }
163
164
    public function toHtml()
165
    {
166
        return $this->render();
167
    }
168
169
    public function render()
170
    {
171
        return $this->laraflashRenderer->render($this);
172
    }
173
}
174