Passed
Push — master ( 0c664b...4bf842 )
by Gombos
04:37
created

TableSettingsManager   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
dl 0
loc 66
ccs 25
cts 25
cp 1
rs 10
c 1
b 0
f 0
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A apply() 0 10 2
A delete() 0 14 3
A set() 0 6 1
A deleteMultiple() 0 10 2
1
<?php
2
3
namespace Glorand\Model\Settings\Managers;
4
5
use Glorand\Model\Settings\Contracts\SettingsManagerContract;
6
use Glorand\Model\Settings\Models\ModelSettings;
7
8
/**
9
 * Class TableSettingsManager
10
 * @package Glorand\Model\Settings\Managers
11
 * @property  \Illuminate\Database\Eloquent\Model|\Glorand\Model\Settings\Traits\HasSettingsTable $model
12
 */
13
class TableSettingsManager extends AbstractSettingsManager
14
{
15
    /**
16
     * @param array $settings
17
     * @return \Glorand\Model\Settings\Contracts\SettingsManagerContract
18
     */
19 10
    public function apply(array $settings = []): SettingsManagerContract
20
    {
21 10
        if (!$modelSettings = $this->model->modelSettings()->first()) {
22 10
            $modelSettings = new ModelSettings();
23 10
            $modelSettings->model()->associate($this->model);
1 ignored issue
show
Bug introduced by
It seems like $this->model can also be of type Glorand\Model\Settings\Traits\HasSettingsTable; however, parameter $model of Illuminate\Database\Eloq...ns\MorphTo::associate() does only seem to accept Illuminate\Database\Eloquent\Model, maybe add an additional type check? ( Ignorable by Annotation )

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

23
            $modelSettings->model()->associate(/** @scrutinizer ignore-type */ $this->model);
Loading history...
24
        }
25 10
        $modelSettings->settings = $settings;
26 10
        $modelSettings->save();
27
28 10
        return $this;
29
    }
30
31
    /**
32
     * @param string|null $path
33
     * @return \Glorand\Model\Settings\Contracts\SettingsManagerContract
34
     * @throws \Exception
35
     */
36 2
    public function delete(string $path = null): SettingsManagerContract
37
    {
38 2
        if (!$path) {
39
            /** @var ModelSettings $modelSettings */
40 2
            if ($modelSettings = $this->model->modelSettings()->first()) {
41 2
                $modelSettings->delete();
42
            }
43
        } else {
44 1
            $settings = $this->all();
45 1
            array_forget($settings, $path);
0 ignored issues
show
Deprecated Code introduced by
The function array_forget() has been deprecated: Arr::forget() should be used directly instead. Will be removed in Laravel 6.0. ( Ignorable by Annotation )

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

45
            /** @scrutinizer ignore-deprecated */ array_forget($settings, $path);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
46 1
            $this->apply($settings);
47
        }
48
49 2
        return $this;
50
    }
51
52
    /**
53
     * @param iterable $paths
54
     * @return \Glorand\Model\Settings\Contracts\SettingsManagerContract
55
     */
56 1
    public function deleteMultiple(iterable $paths): SettingsManagerContract
57
    {
58 1
        $settings = $this->all();
59 1
        foreach ($paths as $path) {
60 1
            array_forget($settings, $path);
0 ignored issues
show
Deprecated Code introduced by
The function array_forget() has been deprecated: Arr::forget() should be used directly instead. Will be removed in Laravel 6.0. ( Ignorable by Annotation )

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

60
            /** @scrutinizer ignore-deprecated */ array_forget($settings, $path);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
61
        }
62
63 1
        $this->apply($settings);
64
65 1
        return $this;
66
    }
67
68
    /**
69
     * @param string $path
70
     * @param mixed $value
71
     * @return \Glorand\Model\Settings\Contracts\SettingsManagerContract
72
     */
73 2
    public function set(string $path, $value): SettingsManagerContract
74
    {
75 2
        $settings = $this->all();
76 2
        array_set($settings, $path, $value);
0 ignored issues
show
Deprecated Code introduced by
The function array_set() has been deprecated: Arr::set() should be used directly instead. Will be removed in Laravel 6.0. ( Ignorable by Annotation )

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

76
        /** @scrutinizer ignore-deprecated */ array_set($settings, $path, $value);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
77
78 2
        return $this->apply($settings);
79
    }
80
}
81