Remove cache
This commit is contained in:
parent
436a95224f
commit
2eeb15d37b
@ -1,52 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for retrieving values from cache
|
|
||||||
*/
|
|
||||||
interface CacheInterface {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a cached value if it exists, otherwise, get the value
|
|
||||||
* from the passed arguments
|
|
||||||
*
|
|
||||||
* @param object $object - object to retrieve fresh value from
|
|
||||||
* @param string $method - method name to call
|
|
||||||
* @param [array] $args - the arguments to pass to the retrieval method
|
|
||||||
* @return mixed - the cached or fresh data
|
|
||||||
*/
|
|
||||||
public function get($object, $method, array $args=[]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a fresh value, and update the cache
|
|
||||||
*
|
|
||||||
* @param object $object - object to retrieve fresh value from
|
|
||||||
* @param string $method - method name to call
|
|
||||||
* @param [array] $args - the arguments to pass to the retrieval method
|
|
||||||
* @return mixed - the fresh data
|
|
||||||
*/
|
|
||||||
public function getFresh($object, $method, array $args=[]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the entire cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function purge();
|
|
||||||
}
|
|
||||||
// End of CacheInterface.php
|
|
@ -1,123 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache;
|
|
||||||
|
|
||||||
use Aviat\Ion\ConfigInterface;
|
|
||||||
use Aviat\Ion\Cache\Driver\DriverInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class proxying cached and fresh values from the selected cache driver
|
|
||||||
*/
|
|
||||||
class CacheManager implements CacheInterface {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The storage backend adapter
|
|
||||||
*
|
|
||||||
* @var DriverInterface
|
|
||||||
*/
|
|
||||||
protected $driver;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the appropriate driver from the container
|
|
||||||
*
|
|
||||||
* @param ConfigInterface $config The configuration management class
|
|
||||||
*/
|
|
||||||
public function __construct(ConfigInterface $config)
|
|
||||||
{
|
|
||||||
$driverConf = $config->get('cache_driver');
|
|
||||||
|
|
||||||
if (empty($driverConf))
|
|
||||||
{
|
|
||||||
$driverConf = 'NullDriver';
|
|
||||||
}
|
|
||||||
|
|
||||||
$driverClass = __NAMESPACE__ . "\\Driver\\{$driverConf}";
|
|
||||||
$driver = new $driverClass($config);
|
|
||||||
|
|
||||||
$this->driver = $driver;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a cached value if it exists, otherwise, get the value
|
|
||||||
* from the passed arguments
|
|
||||||
*
|
|
||||||
* @param object $object - object to retrieve fresh value from
|
|
||||||
* @param string $method - method name to call
|
|
||||||
* @param [array] $args - the arguments to pass to the retrieval method
|
|
||||||
* @return mixed - the cached or fresh data
|
|
||||||
*/
|
|
||||||
public function get($object, $method, array $args=[])
|
|
||||||
{
|
|
||||||
$hash = $this->generateHashForMethod($object, $method, $args);
|
|
||||||
|
|
||||||
$data = $this->driver->get($hash);
|
|
||||||
|
|
||||||
if (empty($data))
|
|
||||||
{
|
|
||||||
$data = call_user_func_array([$object, $method], $args);
|
|
||||||
$this->driver->set($hash, $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a fresh value from the method, and update the cache
|
|
||||||
* @param object $object - object to retrieve fresh value from
|
|
||||||
* @param string $method - method name to call
|
|
||||||
* @param [array] $args - the arguments to pass to the retrieval method
|
|
||||||
* @return mixed - the fresh data
|
|
||||||
*/
|
|
||||||
public function getFresh($object, $method, array $args=[])
|
|
||||||
{
|
|
||||||
$hash = $this->generateHashForMethod($object, $method, $args);
|
|
||||||
$data = call_user_func_array([$object, $method], $args);
|
|
||||||
$this->driver->set($hash, $data);
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the entire cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function purge()
|
|
||||||
{
|
|
||||||
$this->driver->invalidateAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a hash as a cache key from the current method call
|
|
||||||
*
|
|
||||||
* @param object $object
|
|
||||||
* @param string $method
|
|
||||||
* @param array $args
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function generateHashForMethod($object, $method, array $args)
|
|
||||||
{
|
|
||||||
$classname = get_class($object);
|
|
||||||
$keyObj = [
|
|
||||||
'class' => $classname,
|
|
||||||
'method' => $method,
|
|
||||||
'args' => $args,
|
|
||||||
];
|
|
||||||
$hash = sha1(json_encode($keyObj));
|
|
||||||
return $hash;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of CacheManager.php
|
|
@ -1,55 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache\Driver;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for cache drivers
|
|
||||||
*/
|
|
||||||
interface DriverInterface {
|
|
||||||
/**
|
|
||||||
* Retreive a value from the cache backend
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function get($key);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a cached value
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @param mixed $value
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function set($key, $value);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invalidate a cached value
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function invalidate($key);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the contents of the cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function invalidateAll();
|
|
||||||
}
|
|
||||||
// End of DriverInterface.php
|
|
@ -1,68 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\Json;
|
|
||||||
use Aviat\Ion\JsonException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract base for Cache drivers to share common functionality
|
|
||||||
*/
|
|
||||||
trait DriverTrait {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key prefix for key / value cache stores
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected static $CACHE_KEY_PREFIX = "aviat:ion:cache:";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set key prefix for cache drivers that have global keys
|
|
||||||
*
|
|
||||||
* @param string $key - the raw key name
|
|
||||||
* @return string - the prefixed key name
|
|
||||||
*/
|
|
||||||
protected function prefix($key)
|
|
||||||
{
|
|
||||||
return static::$CACHE_KEY_PREFIX . $key;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts data to cache to a string representation for storage in a cache
|
|
||||||
*
|
|
||||||
* @param mixed $data - data to store in the cache backend
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function serialize($data)
|
|
||||||
{
|
|
||||||
return Json::encode($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert serialized data from cache backend to native types
|
|
||||||
*
|
|
||||||
* @param string $data - data from cache backend
|
|
||||||
* @return mixed
|
|
||||||
* @throws JsonException
|
|
||||||
*/
|
|
||||||
protected function unserialize($data)
|
|
||||||
{
|
|
||||||
return Json::decode($data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of DriverTrait.php
|
|
@ -1,78 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache\Driver;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Driver for no real cache
|
|
||||||
*/
|
|
||||||
class NullDriver implements DriverInterface {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 'Cache' for Null data store
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $data = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a value from the cache backend
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function get($key)
|
|
||||||
{
|
|
||||||
return (array_key_exists($key, $this->data))
|
|
||||||
? $this->data[$key]
|
|
||||||
: NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a cached value
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @param mixed $value
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function set($key, $value)
|
|
||||||
{
|
|
||||||
$this->data[$key] = $value;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invalidate a cached value
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function invalidate($key)
|
|
||||||
{
|
|
||||||
unset($this->data[$key]);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the contents of the cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function invalidateAll()
|
|
||||||
{
|
|
||||||
$this->data = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of NullDriver.php
|
|
@ -1,121 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\ConfigInterface;
|
|
||||||
|
|
||||||
use Predis\Client;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache Driver for a Redis backend
|
|
||||||
*/
|
|
||||||
class RedisDriver implements DriverInterface {
|
|
||||||
|
|
||||||
use DriverTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* THe Predis library instance
|
|
||||||
*
|
|
||||||
* @var Client
|
|
||||||
*/
|
|
||||||
protected $redis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the Redis cache driver
|
|
||||||
*
|
|
||||||
* @param ConfigInterface $config The configuration management class
|
|
||||||
*/
|
|
||||||
public function __construct(ConfigInterface $config)
|
|
||||||
{
|
|
||||||
$redisConfig = $config->get('redis');
|
|
||||||
|
|
||||||
// If you don't have a redis password set, and you attempt to send an
|
|
||||||
// empty string, Redis will think you want to authenticate with a password
|
|
||||||
// that is an empty string. To work around this, empty string passwords
|
|
||||||
// are considered to be a lack of a password
|
|
||||||
if (array_key_exists('password', $redisConfig) && $redisConfig['password'] === '')
|
|
||||||
{
|
|
||||||
unset($redisConfig['password']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->redis = new Client($redisConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disconnect from redis
|
|
||||||
*/
|
|
||||||
public function __destruct()
|
|
||||||
{
|
|
||||||
$this->redis = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a value from the cache backend
|
|
||||||
*
|
|
||||||
* @param string $rawKey
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function get($rawKey)
|
|
||||||
{
|
|
||||||
$key = $this->prefix($rawKey);
|
|
||||||
$serializedData = $this->redis->get($key);
|
|
||||||
|
|
||||||
return $this->unserialize($serializedData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a cached value
|
|
||||||
*
|
|
||||||
* @param string $rawKey
|
|
||||||
* @param mixed $value
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function set($rawKey, $value)
|
|
||||||
{
|
|
||||||
$key = $this->prefix($rawKey);
|
|
||||||
$serializedData = $this->serialize($value);
|
|
||||||
|
|
||||||
$this->redis->set($key, $serializedData);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invalidate a cached value
|
|
||||||
*
|
|
||||||
* @param string $rawKey
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function invalidate($rawKey)
|
|
||||||
{
|
|
||||||
$key = $this->prefix($rawKey);
|
|
||||||
$this->redis->del($key);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the contents of the cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function invalidateAll()
|
|
||||||
{
|
|
||||||
$this->redis->flushdb();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of RedisDriver.php
|
|
@ -1,124 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\ConfigInterface;
|
|
||||||
use Aviat\Ion\Exception\ConfigException;
|
|
||||||
use Aviat\Ion\Model\DB;
|
|
||||||
use PDO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Driver for caching via a traditional SQL database
|
|
||||||
*/
|
|
||||||
class SQLDriver extends DB implements DriverInterface {
|
|
||||||
|
|
||||||
use DriverTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The query builder object
|
|
||||||
* @var object $db
|
|
||||||
*/
|
|
||||||
protected $db;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the driver object
|
|
||||||
*
|
|
||||||
* @param ConfigInterface $config
|
|
||||||
* @throws ConfigException
|
|
||||||
*/
|
|
||||||
public function __construct(ConfigInterface $config)
|
|
||||||
{
|
|
||||||
parent::__construct($config);
|
|
||||||
|
|
||||||
if ( ! array_key_exists('cache', $this->db_config))
|
|
||||||
{
|
|
||||||
throw new ConfigException("Missing '[cache]' section in database config.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->db = \Query($this->db_config['cache']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve a value from the cache backend
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function get($key)
|
|
||||||
{
|
|
||||||
$query = $this->db->select('value')
|
|
||||||
->from('cache')
|
|
||||||
->where('key', $key)
|
|
||||||
->get();
|
|
||||||
|
|
||||||
$row = $query->fetch(PDO::FETCH_ASSOC);
|
|
||||||
|
|
||||||
if (empty($row))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
$serializedData = $row['value'];
|
|
||||||
return $this->unserialize($serializedData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a cached value
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @param mixed $value
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function set($key, $value)
|
|
||||||
{
|
|
||||||
$serializedData = $this->serialize($value);
|
|
||||||
|
|
||||||
$this->db->set([
|
|
||||||
'key' => $key,
|
|
||||||
'value' => $serializedData,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->db->insert('cache');
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invalidate a cached value
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return DriverInterface
|
|
||||||
*/
|
|
||||||
public function invalidate($key)
|
|
||||||
{
|
|
||||||
$this->db->where('key', $key)
|
|
||||||
->delete('cache');
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the contents of the cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function invalidateAll()
|
|
||||||
{
|
|
||||||
$this->db->truncate('cache');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of SQLDriver.php
|
|
@ -1,57 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Tests\Cache;
|
|
||||||
|
|
||||||
use Aviat\Ion\Friend;
|
|
||||||
use Aviat\Ion\Cache\CacheManager;
|
|
||||||
use Aviat\Ion\Tests\Ion_TestCase;
|
|
||||||
|
|
||||||
class CacheManagerTest extends Ion_TestCase {
|
|
||||||
|
|
||||||
protected $cachedTime;
|
|
||||||
|
|
||||||
public function __call($name, $args)
|
|
||||||
{
|
|
||||||
return \call_user_func_array($name, $args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->cache = new CacheManager($this->container->get('config'), $this->container);
|
|
||||||
$this->friend = new Friend($this->cache);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGet()
|
|
||||||
{
|
|
||||||
$this->cachedTime = $this->cache->get($this, 'time');
|
|
||||||
$this->assertEquals($this->cache->get($this, 'time'), $this->cachedTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetFresh()
|
|
||||||
{
|
|
||||||
$this->assertNotEquals($this->cache->getFresh($this, 'time'), $this->cachedTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testPurge()
|
|
||||||
{
|
|
||||||
$this->cachedTime = $this->cache->get($this, 'time');
|
|
||||||
$key = $this->friend->generateHashForMethod($this, 'time', []);
|
|
||||||
$this->cache->purge();
|
|
||||||
$this->assertEmpty($this->friend->driver->get($key));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Tests\Cache\Driver;
|
|
||||||
|
|
||||||
trait CacheDriverBase {
|
|
||||||
|
|
||||||
protected $foo = [
|
|
||||||
'bar' => [
|
|
||||||
'baz' => 'foobar'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $bar = 'secondvalue';
|
|
||||||
|
|
||||||
public function testHasCacheDriver()
|
|
||||||
{
|
|
||||||
$this->assertTrue((bool) $this->driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDriverGetSet()
|
|
||||||
{
|
|
||||||
$this->driver->set('foo', $this->foo);
|
|
||||||
$this->driver->set('bar', 'baz');
|
|
||||||
$this->assertEquals($this->driver->get('foo'), $this->foo);
|
|
||||||
$this->assertEquals($this->driver->get('bar'), 'baz');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testInvalidate()
|
|
||||||
{
|
|
||||||
$this->driver->set('foo', $this->foo);
|
|
||||||
$this->driver->invalidate('foo');
|
|
||||||
$this->assertEmpty($this->driver->get('foo'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testInvalidateAll()
|
|
||||||
{
|
|
||||||
$this->driver->set('foo', $this->foo);
|
|
||||||
$this->driver->set('bar', $this->bar);
|
|
||||||
|
|
||||||
$this->driver->invalidateAll();
|
|
||||||
|
|
||||||
$this->assertEmpty($this->driver->get('foo'));
|
|
||||||
$this->assertEmpty($this->driver->get('bar'));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Tests\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\Cache\Driver\NullDriver;
|
|
||||||
use Aviat\Ion\Tests\Ion_TestCase;
|
|
||||||
|
|
||||||
class CacheNullDriverTest extends Ion_TestCase {
|
|
||||||
use CacheDriverBase;
|
|
||||||
|
|
||||||
protected $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->driver = new NullDriver($this->container->get('config'));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Tests\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\Config;
|
|
||||||
use Aviat\Ion\Cache\Driver\RedisDriver;
|
|
||||||
use Aviat\Ion\Tests\Ion_TestCase;
|
|
||||||
|
|
||||||
class CacheRedisDriverTestTwo extends Ion_TestCase {
|
|
||||||
use CacheDriverBase;
|
|
||||||
|
|
||||||
protected $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
|
|
||||||
// Setup config with port and password
|
|
||||||
$config = new Config([
|
|
||||||
'redis' => [
|
|
||||||
'host' => (array_key_exists('REDIS_HOST', $_ENV)) ? $_ENV['REDIS_HOST'] : 'localhost',
|
|
||||||
'port' => 6379,
|
|
||||||
'password' => '',
|
|
||||||
'database' => 13,
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$this->driver = new RedisDriver($config);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function tearDown()
|
|
||||||
{
|
|
||||||
parent::tearDown();
|
|
||||||
|
|
||||||
if ( ! is_null($this->driver))
|
|
||||||
{
|
|
||||||
$this->driver->__destruct();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Tests\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\Cache\Driver\RedisDriver;
|
|
||||||
use Aviat\Ion\Tests\Ion_TestCase;
|
|
||||||
|
|
||||||
class CacheRedisDriverTest extends Ion_TestCase {
|
|
||||||
use CacheDriverBase;
|
|
||||||
|
|
||||||
protected $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
|
|
||||||
$this->driver = new RedisDriver($this->container->get('config'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function tearDown()
|
|
||||||
{
|
|
||||||
parent::tearDown();
|
|
||||||
|
|
||||||
if ( ! is_null($this->driver))
|
|
||||||
{
|
|
||||||
$this->driver->__destruct();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/**
|
|
||||||
* Ion
|
|
||||||
*
|
|
||||||
* Building blocks for web development
|
|
||||||
*
|
|
||||||
* PHP version 7
|
|
||||||
*
|
|
||||||
* @package Ion
|
|
||||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
|
||||||
* @copyright 2015 - 2016 Timothy J. Warren
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://git.timshomepage.net/timw4mail/ion
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Aviat\Ion\Tests\Cache\Driver;
|
|
||||||
|
|
||||||
use Aviat\Ion\Config;
|
|
||||||
use Aviat\Ion\Friend;
|
|
||||||
use Aviat\Ion\Cache\Driver\SQLDriver;
|
|
||||||
use Aviat\Ion\Tests\Ion_TestCase;
|
|
||||||
|
|
||||||
class CacheSQLDriverTest extends Ion_TestCase {
|
|
||||||
use CacheDriverBase;
|
|
||||||
|
|
||||||
protected $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->driver = new SQLDriver($this->container->get('config'));
|
|
||||||
$friend = new Friend($this->driver);
|
|
||||||
$friend->db->query('CREATE TABLE IF NOT EXISTS "cache" ("key" TEXT NULL, "value" TEXT NULL, PRIMARY KEY ("key"))');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMissingConfig()
|
|
||||||
{
|
|
||||||
$this->expectException('Aviat\Ion\Exception\ConfigException');
|
|
||||||
$this->expectExceptionMessage('Missing \'[cache]\' section in database config.');
|
|
||||||
|
|
||||||
$this->container->setInstance('config', new Config([]));
|
|
||||||
$this->driver = new SQLDriver($this->container->get('config'));
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user