diff --git a/src/Cache/CacheInterface.php b/src/Cache/CacheInterface.php deleted file mode 100644 index d2f8710..0000000 --- a/src/Cache/CacheInterface.php +++ /dev/null @@ -1,52 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/src/Cache/CacheManager.php b/src/Cache/CacheManager.php deleted file mode 100644 index 8fbf498..0000000 --- a/src/Cache/CacheManager.php +++ /dev/null @@ -1,123 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/src/Cache/Driver/DriverInterface.php b/src/Cache/Driver/DriverInterface.php deleted file mode 100644 index d6290ce..0000000 --- a/src/Cache/Driver/DriverInterface.php +++ /dev/null @@ -1,55 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/src/Cache/Driver/DriverTrait.php b/src/Cache/Driver/DriverTrait.php deleted file mode 100644 index d9f9dd7..0000000 --- a/src/Cache/Driver/DriverTrait.php +++ /dev/null @@ -1,68 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/src/Cache/Driver/NullDriver.php b/src/Cache/Driver/NullDriver.php deleted file mode 100644 index 36216c0..0000000 --- a/src/Cache/Driver/NullDriver.php +++ /dev/null @@ -1,78 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/src/Cache/Driver/RedisDriver.php b/src/Cache/Driver/RedisDriver.php deleted file mode 100644 index 579d0f2..0000000 --- a/src/Cache/Driver/RedisDriver.php +++ /dev/null @@ -1,121 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/src/Cache/Driver/SQLDriver.php b/src/Cache/Driver/SQLDriver.php deleted file mode 100644 index ccd32d1..0000000 --- a/src/Cache/Driver/SQLDriver.php +++ /dev/null @@ -1,124 +0,0 @@ - - * @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 \ No newline at end of file diff --git a/tests/Cache/CacheManagerTest.php b/tests/Cache/CacheManagerTest.php deleted file mode 100644 index ca6415c..0000000 --- a/tests/Cache/CacheManagerTest.php +++ /dev/null @@ -1,57 +0,0 @@ - - * @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)); - } -} \ No newline at end of file diff --git a/tests/Cache/Driver/CacheDriverBase.php b/tests/Cache/Driver/CacheDriverBase.php deleted file mode 100644 index 959fb76..0000000 --- a/tests/Cache/Driver/CacheDriverBase.php +++ /dev/null @@ -1,59 +0,0 @@ - - * @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')); - } -} \ No newline at end of file diff --git a/tests/Cache/Driver/NullDriverTest.php b/tests/Cache/Driver/NullDriverTest.php deleted file mode 100644 index 4bac011..0000000 --- a/tests/Cache/Driver/NullDriverTest.php +++ /dev/null @@ -1,32 +0,0 @@ - - * @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')); - } -} \ No newline at end of file diff --git a/tests/Cache/Driver/RedisDriver2Test.php b/tests/Cache/Driver/RedisDriver2Test.php deleted file mode 100644 index 6446d0b..0000000 --- a/tests/Cache/Driver/RedisDriver2Test.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @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(); - } - } -} \ No newline at end of file diff --git a/tests/Cache/Driver/RedisDriverTest.php b/tests/Cache/Driver/RedisDriverTest.php deleted file mode 100644 index 66087f7..0000000 --- a/tests/Cache/Driver/RedisDriverTest.php +++ /dev/null @@ -1,44 +0,0 @@ - - * @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(); - } - - } -} \ No newline at end of file diff --git a/tests/Cache/Driver/SQLDriverTest.php b/tests/Cache/Driver/SQLDriverTest.php deleted file mode 100644 index 308fd09..0000000 --- a/tests/Cache/Driver/SQLDriverTest.php +++ /dev/null @@ -1,45 +0,0 @@ - - * @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')); - } -} \ No newline at end of file