Item::getKey()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php namespace Comodojo\Cache;
2
3
use \Psr\Cache\CacheItemInterface;
4
use \Comodojo\Cache\Components\KeyValidator;
5
use \DateTimeInterface;
6
use \DateTime;
7
use \DateInterval;
8
use \Comodojo\Exception\InvalidCacheArgumentException;
9
10
/**
11
 * @package     Comodojo Cache
12
 * @author      Marco Giovinazzi <[email protected]>
13
 * @license     MIT
14
 *
15
 * LICENSE:
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
 * THE SOFTWARE.
24
 */
25
26
class Item implements CacheItemInterface {
27
28
    protected $key;
29
30
    protected $data;
31
32
    protected $hit = false;
33
34
    protected $expiration = 0;
35
36 196
    public function __construct($key, $hit = false) {
37
38 196
        if ( KeyValidator::validateKey($key) === false ) {
39 11
            throw new InvalidCacheArgumentException('Invalid key provided');
40
        }
41
42 185
        $this->key = $key;
43
44 185
        $this->hit = $hit;
45
46 185
    }
47
48
    /**
49
     * {@inheritdoc}
50
     */
51 129
    public function getKey() {
52
53 129
        return $this->key;
54
55
    }
56
57
    /**
58
     * {@inheritdoc}
59
     */
60 154
    public function get() {
61
62 154
        return $this->isHit() ? $this->data : null;
63
64
    }
65
66
    /**
67
     * {@inheritdoc}
68
     */
69 164
    public function isHit() {
70
71
        // return !is_null($this->data);
72 164
        return $this->hit === true;
73
74
    }
75
76
    /**
77
     * {@inheritdoc}
78
     */
79 172
    public function set($value) {
80
81 172
        $this->data = $value;
82
83 172
        return $this;
84
85
    }
86
87
    /**
88
     * {@inheritdoc}
89
     */
90 57
    public function expiresAt($expiration = null) {
91
92 57
        if ( is_null($expiration) ) {
93
            $this->expiration = 0;
94
        }
95
96 57
        if ( $expiration instanceof DateTimeInterface ) {
97 57
            $this->expiration = $expiration;
98
        }
99
100 57
        return $this;
101
102
    }
103
104
    /**
105
     * {@inheritdoc}
106
     */
107 25
    public function expiresAfter($time) {
108
109 25
        if ( is_null($time) ) {
110
            $this->expiration = 0;
111
        }
112
113 25
        if ( is_numeric($time) ) {
114 25
            $this->expiration = new DateTime('now +'.$time.' seconds');
115
        }
116
117 25
        if ( $time instanceof DateInterval ) {
118
            $expiration = new DateTime('now');
119
            $expiration->add($time);
120
            $this->expiration = $expiration;
121
        }
122
123 25
        return $this;
124
125
    }
126
127
    /**
128
     * Returns the raw value, regardless of hit status.
129
     *
130
     * Although not part of the CacheItemInterface, this method is used by
131
     * the pool for extracting information for saving.
132
     *
133
     * @return mixed
134
     *
135
     * @internal
136
     */
137 122
    public function getRaw() {
138
139 122
        return $this->data;
140
141
    }
142
143
    /**
144
     * Get currently (calculated) ttl of cache item
145
     *
146
     * This method is not part of the CacheItemInterface.
147
     *
148
     * @return int
149
     *
150
     * @internal
151
     */
152 170
    public function getTtl() {
153
154 170
        if ( is_null($this->expiration) ) return null;
0 ignored issues
show
introduced by
The condition is_null($this->expiration) is always false.
Loading history...
155
156 170
        if ( $this->expiration === 0 ) return 0;
157
158 96
        $now = new DateTime("now");
159
160 96
        if ( $now > $this->expiration ) return -1;
161
162 47
        return (int) $now->diff($this->expiration)->format("%r%s");
0 ignored issues
show
Bug introduced by
$this->expiration of type integer is incompatible with the type DateTimeInterface expected by parameter $datetime2 of DateTime::diff(). ( Ignorable by Annotation )

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

162
        return (int) $now->diff(/** @scrutinizer ignore-type */ $this->expiration)->format("%r%s");
Loading history...
163
164
    }
165
166
    /**
167
     * Get expiration time (absolute)
168
     *
169
     * This method is not part of the CacheItemInterface.
170
     *
171
     * @return int
172
     *
173
     * @internal
174
     */
175 1
    public function getExpiration() {
176
177 1
        return $this->expiration;
178
179
    }
180
181 1
    public function __toString() {
182
183 1
        return serialize($this->get());
184
185
    }
186
187
}
188