CanCache::cacheName()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
ccs 0
cts 0
cp 0
crap 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Nip\Cache\Cacheable;
5
6
use DateInterval;
7
use Nip\Utility\Str;
8
9
/**
10
 * Trait CanCache
11
 * @package Nip\Cache\Cacheable
12
 */
13
trait CanCache
14
{
15
    use HasCacheStore;
16
17
    protected ?CacheData $data = null;
18
    protected $needsCaching = false;
19
20
    /**
21
     * @param null $needCaching
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $needCaching is correct as it would always require null to be passed?
Loading history...
22
     * @return bool
23
     */
24
    public function needsCaching($needCaching = null): bool
25
    {
26
        if (is_bool($needCaching)) {
0 ignored issues
show
introduced by
The condition is_bool($needCaching) is always false.
Loading history...
27
            $this->needsCaching = $needCaching;
28
        }
29
        return $this->needsCaching;
30
    }
31
    public function getData(): ?CacheData
32
    {
33
        $this->checkInitData();
34
        return $this->data;
35
    }
36
37
    protected function checkInitData()
38
    {
39
        if ($this->data !== null) {
40
            return;
41
        }
42
        $cacheStore = $this->cacheStore();
43
        if ($cacheStore->has($this->cacheName())) {
44
            $this->data = $cacheStore->get($this->cacheName());
45
        } else {
46
            $this->data = new CacheData();
47
            if (method_exists($this, 'generateCacheData')) {
48
                $data = $this->generateCacheData();
49
                $this->setDataToCache($data);
50
            }
51
            $this->saveDataToCache();
52
        }
53
    }
54
55
    protected function checkSaveCache()
56
    {
57
        if ($this->needsCaching() !== true) {
58
            return;
59
        }
60
        $data = $this->getData();
61
        $this->saveDataToCache($data);
62
    }
63
64
    /**
65
     * @param null $key
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $key is correct as it would always require null to be passed?
Loading history...
66
     * @return mixed|null
67
     * @throws \Psr\SimpleCache\InvalidArgumentException
68
     */
69
    protected function getDataFromCache($key = null, $default = null)
70
    {
71
        $key = $this->dataCacheKey($key);
72
        if ($this->getData()->offsetExists($key)) {
73
            return $this->getData()->get($key);
74
        }
75
        $value = $this->generateCacheDataKey($key, $default);
76
        $this->setDataToCache($value, $key);
77
        return $value;
78
    }
79
80
    /**
81
     * @param $data
82
     * @param $key
83
     * @return $this
84
     */
85
    protected function setDataToCache($data, $key = null)
86
    {
87
        $key = $this->dataCacheKey($key);
88
        $this->getData()->set($data, $key);
89
        $this->needsCaching(true);
90
        return $this;
91
    }
92
93
    /**
94
     * @param $data
95
     * @param null $key
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $key is correct as it would always require null to be passed?
Loading history...
96
     * @noinspection PhpDocMissingThrowsInspection
97
     */
98
    protected function saveDataToCache($data = null, $key = null)
99
    {
100
        if ($data) {
101
            $this->setDataToCache($data, $key);
102
        }
103
        /** @noinspection PhpUnhandledExceptionInspection */
104
        $this->cacheStore()->set($this->cacheName(), $this->getData(), $this->dataCacheTtl($key));
105
        $this->needsCaching(false);
106
    }
107
108
    /**
109
     * @param $key
110
     * @return string
111
     */
112
    protected function dataCacheKey($key = null): string
113
    {
114
        if ($key !== null) {
115
            return $key;
116
        }
117
        return CacheData::DEFAULT_KEY;
118
    }
119
120
    protected function cacheName(): string
121
    {
122
        return Str::slug(__CLASS__);
123
    }
124
125
    /**
126
     * @param null $key
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $key is correct as it would always require null to be passed?
Loading history...
127
     * @return DateInterval
128
     */
129
    protected function dataCacheTtl($key = null)
0 ignored issues
show
Unused Code introduced by
The parameter $key is not used and could be removed. ( Ignorable by Annotation )

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

129
    protected function dataCacheTtl(/** @scrutinizer ignore-unused */ $key = null)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
130
    {
131
        return DateInterval::createFromDateString('10 years');
132
    }
133
134
    /**
135
     * @param string $key
136
     * @param mixed|null $default
137
     * @return mixed|null
138
     */
139
    protected function generateCacheDataKey(string $key, mixed $default = null)
0 ignored issues
show
Unused Code introduced by
The parameter $key is not used and could be removed. ( Ignorable by Annotation )

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

139
    protected function generateCacheDataKey(/** @scrutinizer ignore-unused */ string $key, mixed $default = null)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
140
    {
141
        return $default;
142
    }
143
144
    public function __destruct()
145
    {
146
        $this->checkSaveCache();
147
    }
148
}
149