Issues (6)

src/SettingsBag.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace XLaravel\ModelSettingsBag;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Illuminate\Support\Arr;
7
8
class SettingsBag
9
{
10
    protected Model $model;
11
12
    public function __construct(Model $model)
13
    {
14
        $this->model = $model;
15
    }
16
17
    # Get the model's settings.
18
    public function all(): ?array
19
    {
20
        return $this->model->settings;
21
    }
22
23
    # Apply the model's settings.
24
    public function apply(array $settings = []): self
25
    {
26
        $this->model->settings = (array)$settings;
27
        $this->model->save();
28
29
        return $this;
30
    }
31
32
    # Return the value of the setting at the given path.
33
    public function get(string $path = null, $default = null)
34
    {
35
        return $path ? Arr::get($this->all(), $path, $default) : $this->all();
36
    }
37
38
    # Determine if the model has the given setting.
39
    public function has(string $path): bool
40
    {
41
        return (bool)Arr::has($this->all(), $path);
42
    }
43
44
    # Update the setting at given path to the given value.
45
    public function update(string $path = null, $value = []): self
46
    {
47
        if (func_num_args() < 2) {
48
            $value = $path;
49
            $path = null;
50
        }
51
52
        $settings = $this->all();
53
54
        Arr::set($settings, $path, $value);
55
56
        return $this->apply($settings);
57
    }
58
59
    # Delete the setting at the given path.
60
    public function delete(string $path = null): self
61
    {
62
        if (!$path) {
63
            return $this->update([]);
0 ignored issues
show
array() of type array is incompatible with the type null|string expected by parameter $path of XLaravel\ModelSettingsBag\SettingsBag::update(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

63
            return $this->update(/** @scrutinizer ignore-type */ []);
Loading history...
64
        }
65
66
        $settings = $this->all();
67
68
        Arr::forget($settings, $path);
69
70
        return $this->apply($settings);
71
    }
72
}
73