From 83bb073e0b5770b84283eb6b045dc3aec057adb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kutn=C3=BD?= Date: Mon, 2 Jan 2017 15:12:14 +0100 Subject: [PATCH] Cache: do not save data with negative/zero expiration --- src/Caching/Cache.php | 7 ++++++- tests/Caching/Cache.save.phpt | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Caching/Cache.php b/src/Caching/Cache.php index b21ef577..85a79335 100644 --- a/src/Caching/Cache.php +++ b/src/Caching/Cache.php @@ -186,7 +186,12 @@ public function save($key, $data, array $dependencies = NULL) if ($data === NULL) { $this->storage->remove($key); } else { - $this->storage->write($key, $data, $this->completeDependencies($dependencies)); + $dependencies = $this->completeDependencies($dependencies); + if (isset($dependencies[Cache::EXPIRATION]) && $dependencies[Cache::EXPIRATION] <= 0) { + $this->storage->remove($key); + } else { + $this->storage->write($key, $data, $dependencies); + } return $data; } } diff --git a/tests/Caching/Cache.save.phpt b/tests/Caching/Cache.save.phpt index 15dc01fe..97b56143 100644 --- a/tests/Caching/Cache.save.phpt +++ b/tests/Caching/Cache.save.phpt @@ -50,3 +50,17 @@ $cache->save('key', function () { $res = $cache->load('key'); Assert::equal('value', $res['data']); Assert::equal($dependencies, $res['dependencies']); + + +// do not save already expired data +$storage = new testStorage(); +$cache = new Cache($storage, 'ns'); +$dependencies = [Cache::EXPIRATION => new DateTime]; + +$res = $cache->save('key', function () { + return 'value'; +}, $dependencies); +Assert::equal('value', $res); + +$res = $cache->load('key'); +Assert::null($res);