BaseRepository::updateCache()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Alex19pov31\LinkedData;
4
5
class BaseRepository implements RepositoryInterface
6
{
7
    /**
8
     * Данные
9
     *
10
     * @var array|null
11
     */
12
    protected $data;
13
14
    /**
15
     * Время кеширования
16
     *
17
     * @var integer
18
     */
19
    private $ttl = 0;
20
21
    /**
22
     * Название репозитория
23
     *
24
     * @var string
25
     */
26
    protected $name;
27
28
    /**
29
     * Загрузчик данных
30
     *
31
     * @var LoaderInterface|null
32
     */
33
    private $loaderData;
34
35
    public function __construct(string $name)
36
    {
37
        $this->name = $name;
38
    }
39
40
    /**
41
     * Название репозитория
42
     *
43
     * @return string
44
     */
45
    public function getName(): string
46
    {
47
        return $this->name;
48
    }
49
50
    /**
51
     * Установить кеш
52
     *
53
     * @param integer $minutes
54
     * @return RepositoryInterface
55
     */
56
    public function cache(int $minutes): RepositoryInterface
57
    {
58
        $this->ttl = $minutes;
59
        return $this;
60
    }
61
62
    /**
63
     * Обновить кеш
64
     *
65
     * @param integer $minutes
66
     * @return RepositoryInterface
67
     */
68
    public function updateCache(int $minutes): RepositoryInterface
69
    {
70
        setCacheData($minutes, 'repository_' . $this->getName(), '/repositories', 'cache', $this->data);
71
        return $this;
72
    }
73
74
    /**
75
     * Инициализация хранилища
76
     *
77
     * @return RepositoryInterface
78
     */
79
    public function init(): RepositoryInterface
80
    {
81
        if ($this->isEmpty() && !is_null($this->loaderData)) {
82
            if ($this->ttl == 0) {
83
                $this->putData((array) $this->initWithoutCache());
84
                return $this;
85
            }
86
87
            $data = cache($this->ttl, 'repository_' . $this->getName(), '/repositories', 'cache', function () {
88
                return $this->putData((array) $this->initWithoutCache());
0 ignored issues
show
Bug introduced by
Are you sure the usage of $this->putData((array)$this->initWithoutCache()) targeting Alex19pov31\LinkedData\BaseRepository::putData() seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
89
            });
90
91
            $this->putData((array) $data);
92
        }
93
94
        return $this;
95
    }
96
97
    private function initWithoutCache(): array
98
    {
99
        return (array) $this->loaderData->getData();
0 ignored issues
show
Bug introduced by
The method getData() does not exist on null. ( Ignorable by Annotation )

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

99
        return (array) $this->loaderData->/** @scrutinizer ignore-call */ getData();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
100
    }
101
102
    /**
103
     * Возвращает все данные из хранилища
104
     *
105
     * @return array|null
106
     */
107
    public function getData()
108
    {
109
        return $this->data;
110
    }
111
112
    /**
113
     * Вернуть элемент по ключу
114
     *
115
     * @param mixed $key
116
     * @return mixed
117
     */
118
    public function getItemByKey($key)
119
    {
120
        $this->init();
121
122
        if (!isset($this->data[$key])) {
123
            if (!is_null($this->loaderData)) {
124
                $data = $this->loaderData->getItem($key);
125
                if (!empty($data)) {
126
                    $this->addItem($key, $data);
127
                    return $data;
128
                }
129
            }
130
131
            return null;
132
        }
133
134
        return $this->data[$key];
135
    }
136
137
    /**
138
     * Добавить элемент в хранилище
139
     *
140
     * @param mixed $key
141
     * @param mixed $data
142
     * @return void
143
     */
144
    public function addItem($key, $data)
145
    {
146
        $this->data[$key] = $data;
147
    }
148
149
    /**
150
     * Загрузить данные в хранилище
151
     *
152
     * @param array $data
153
     * @return void
154
     */
155
    public function putData(array $data)
156
    {
157
        foreach ($data as $key => $value) {
158
            $this->addItem($key, $value);
159
        }
160
    }
161
162
    /**
163
     * Проверка наличия данных в хранилище
164
     *
165
     * @return boolean
166
     */
167
    public function isEmpty(): bool
168
    {
169
        return empty($this->data);
170
    }
171
172
    /**
173
     * Количество элементов в хранилище
174
     *
175
     * @return integer
176
     */
177
    public function getCount(): int
178
    {
179
        return count($this->data);
180
    }
181
182
    /**
183
     * Регистрация загрузчика данных
184
     *
185
     * @param LoaderInterface $loader
186
     * @return void
187
     */
188
    public function setLoaderData(LoaderInterface $loader)
189
    {
190
        $this->loaderData = $loader;
191
    }
192
}
193