Move cache class to IOn namespace, use safer json for serialization in cache drivers

This commit is contained in:
Timothy Warren 2016-07-28 10:44:13 -04:00
parent a108adfa23
commit 893584696b
15 changed files with 88 additions and 34 deletions

View File

@ -13,6 +13,7 @@ use Monolog\Handler\RotatingFileHandler;
use Zend\Diactoros\ServerRequestFactory;
use Zend\Diactoros\Response;
use Aviat\Ion\Config;
use Aviat\Ion\Di\Container;
use Aviat\Ion\Cache\CacheManager;
use Aviat\AnimeClient\Auth\HummingbirdAuth;

View File

@ -10,4 +10,14 @@ pass = ""
port = ""
name = "default"
database = ""
file = "/../../anime_collection.sqlite"
file = "anime_collection.sqlite"
[cache]
type = "sqlite"
host = ""
user = ""
pass = ""
port = ""
name = "default"
database = ""
file = "anime_collection.sqlite"

View File

@ -17,12 +17,14 @@ use Aura\Session\SessionFactory;
use ConsoleKit\Command;
use ConsoleKit\Widgets\Box;
use Aviat\Ion\Config;
use Aviat\Ion\Di\Container;
use Aviat\Ion\Cache\CacheManager;
use Aviat\AnimeClient\Config;
use Aviat\AnimeClient\AnimeClient;
use Aviat\AnimeClient\Auth\HummingbirdAuth;
use Aviat\AnimeClient\Model;
use Aviat\AnimeClient\Util;
/**
* Base class for console command setup
@ -77,6 +79,7 @@ class BaseCommand extends Command {
$container->set('manga-model', new Model\Manga($container));
$container->set('auth', new HummingbirdAuth($container));
$container->set('util', new Util($container));
return $container;
};

View File

@ -59,7 +59,7 @@ class RedisDriver implements CacheDriverInterface {
*/
public function get($key)
{
return unserialize($this->redis->get($key));
return json_decode($this->redis->get($key));
}
/**
@ -71,7 +71,7 @@ class RedisDriver implements CacheDriverInterface {
*/
public function set($key, $value)
{
$this->redis->set($key, serialize($value));
$this->redis->set($key, json_encode($value));
return $this;
}

View File

@ -14,6 +14,7 @@ namespace Aviat\Ion\Cache\Driver;
use Aviat\Ion\ConfigInterface;
use Aviat\Ion\Cache\CacheDriverInterface;
use Aviat\Ion\Exception\ConfigException;
use Aviat\Ion\Model\DB;
/**
@ -31,11 +32,18 @@ class SQLDriver extends DB implements CacheDriverInterface {
* Create the driver object
*
* @param ConfigInterface $config
* @throws ConfigException
*/
public function __construct(ConfigInterface $config)
{
parent::__construct($config);
$this->db = \Query($this->db_config['collection']);
if ( ! array_key_exists('cache', $this->db_config))
{
throw new ConfigException("Missing '[cache]' section in database config.");
}
$this->db = \Query($this->db_config['cache']);
}
/**
@ -54,7 +62,7 @@ class SQLDriver extends DB implements CacheDriverInterface {
$row = $query->fetch(\PDO::FETCH_ASSOC);
if ( ! empty($row))
{
return unserialize($row['value']);
return json_decode($row['value']);
}
return NULL;
@ -71,7 +79,7 @@ class SQLDriver extends DB implements CacheDriverInterface {
{
$this->db->set([
'key' => $key,
'value' => serialize($value),
'value' => json_encode($value),
]);
$this->db->insert('cache');

View File

@ -1,19 +1,19 @@
<?php
/**
* Hummingbird Anime Client
* Ion
*
* An API client for Hummingbird to manage anime and manga watch lists
* Building blocks for web development
*
* @package HummingbirdAnimeClient
* @package Ion
* @author Timothy J. Warren
* @copyright Copyright (c) 2015 - 2016
* @link https://github.com/timw4mail/HummingBirdAnimeClient
* @license MIT
*/
namespace Aviat\AnimeClient;
namespace Aviat\Ion;
use Aviat\Ion\ConfigInterface;
use Aviat\Ion\Exception\ConfigException;
use InvalidArgumentException;
@ -22,7 +22,7 @@ use InvalidArgumentException;
*/
class Config implements ConfigInterface {
use \Aviat\Ion\ArrayWrapper;
use ArrayWrapper;
/**
* Config object
@ -46,6 +46,7 @@ class Config implements ConfigInterface {
*
* @param array|string $key
* @return mixed
* @throws ConfigException
*/
public function get($key)
{

View File

@ -0,0 +1,20 @@
<?php
/**
* Ion
*
* Building blocks for web development
*
* @package Ion
* @author Timothy J. Warren
* @copyright Copyright (c) 2015 - 2016
* @license MIT
*/
namespace Aviat\Ion\Exception;
/**
* Exception for bad configuration
*/
class ConfigException extends \InvalidArgumentException {
}

View File

@ -6,9 +6,9 @@ use Monolog\Handler\TestHandler;
use Zend\Diactoros\ServerRequestFactory;
use Zend\Diactoros\Response;
use Aviat\Ion\Config;
use Aviat\Ion\Di\Container;
use Aviat\AnimeClient\Dispatcher;
use Aviat\AnimeClient\Config;
use Aviat\AnimeClient\UrlGenerator;

View File

@ -1,11 +1,6 @@
<?php
use Aura\Html\HelperLocatorFactory;
use Aviat\Ion\Friend;
use Aviat\Ion\Di\Container;
use Aviat\AnimeClient\Helper;
use Aviat\AnimeClient\Config;
use Aviat\AnimeClient\MenuGenerator;
class MenuGeneratorTest extends AnimeClient_TestCase {

View File

@ -1,7 +1,8 @@
<?php
use Aviat\Ion\Config;
use Aviat\Ion\Friend;
use Aviat\AnimeClient\Config;
use Aviat\AnimeClient\Model\AnimeCollection as AnimeCollectionModel;
class AnimeCollectionModelTest extends AnimeClient_TestCase {

View File

@ -1,22 +1,30 @@
<?php
class CoreTest extends AnimeClient_TestCase {
class RequirementsTest extends AnimeClient_TestCase {
public function testPHPVersion()
{
$this->assertTrue(version_compare(PHP_VERSION, "5.4", "ge"));
}
public function testRequirements()
public function testHasGd()
{
// Check required extensions
$this->assertTrue(extension_loaded('gd'));
$this->assertTrue(extension_loaded('mcrypt'));
}
// Check for pdo_sqlite
public function testHasMcrypt()
{
$this->assertTrue(extension_loaded('mcrypt'));
}
public function testHasPDO()
{
$this->assertTrue(class_exists('PDO'));
}
public function testHasPDOSqlite()
{
$drivers = PDO::getAvailableDrivers();
$this->assertTrue(in_array('sqlite', $drivers));
}
}

View File

@ -1,7 +1,6 @@
<?php
use Aviat\Ion\Di\Container;
use Aviat\AnimeClient\Config;
use Aviat\Ion\Config;
use Aviat\AnimeClient\UrlGenerator;
class UrlGeneratorTest extends AnimeClient_TestCase {

View File

@ -9,7 +9,6 @@ use Zend\Diactoros\ServerRequestFactory;
use Zend\Diactoros\Response as HttpResponse;
use Aviat\AnimeClient\AnimeClient;
use Aviat\AnimeClient\Config;
define('ROOT_DIR', __DIR__ . '/../');
define('TEST_DATA_DIR', __DIR__ . '/test_data');
@ -62,6 +61,16 @@ class AnimeClient_TestCase extends PHPUnit_Framework_TestCase {
'name' => 'default',
'database' => '',
'file' => ':memory:',
],
'cache' => [
'type' => 'sqlite',
'host' => '',
'user' => '',
'pass' => '',
'port' => '',
'name' => 'default',
'database' => '',
'file' => ':memory:',
]
],
'routes' => [

View File

@ -2,8 +2,7 @@
require_once('CacheDriverBase.php');
use Aviat\AnimeClient\Config;
use Aviat\Ion\Di\Container;
use Aviat\Ion\Config;
use Aviat\Ion\Cache\Driver\RedisDriver;
class CacheRedisDriverTestTwo extends AnimeClient_TestCase {

View File

@ -1,6 +1,6 @@
<?php
use \Aviat\AnimeClient\Config;
use Aviat\Ion\Config;
class ConfigTest extends AnimeClient_TestCase {