updating model Cache engine.

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@5975 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
gwoo 2007-11-09 08:00:59 +00:00
parent e3e02ba775
commit 3feac9a768
2 changed files with 72 additions and 23 deletions

View file

@ -32,13 +32,6 @@
* @subpackage cake.cake.libs.cache
*/
class ModelEngine extends CacheEngine {
/**
* Model instance.
*
* @var object
* @access private
*/
var $__Model = null;
/**
* settings
* className = name of the model to use, default => Cache
@ -48,6 +41,21 @@ class ModelEngine extends CacheEngine {
* @access public
*/
var $settings = array();
/**
* Model instance.
*
* @var object
* @access private
*/
var $__Model = null;
/**
* Model instance.
*
* @var object
* @access private
*/
var $__fields = array();
/**
* Initialize the Cache Engine
*
@ -60,13 +68,16 @@ class ModelEngine extends CacheEngine {
*/
function init($settings) {
parent::init($settings);
$defaults = array('className'=> 'Cache', 'fields'=> array('data', 'expires'));
$defaults = array('className'=> 'CacheModel', 'fields'=> array('data', 'expires'));
$this->settings = am($this->settings, $defaults, $settings);
if (!class_exists($this->settings['className']) && !loadModel($this->settings['className'])) {
$this->__Model = new $modelName();
$className = $this->settings['className'];
$this->__fields = $this->settings['fields'];
if (class_exists($className) || loadModel($className)) {
$this->__Model = new $className();
} else {
$this->__Model = new Model(array('name' => $this->settings['className']));
$this->__Model = new Model(array('name' => $className));
}
return true;
}
/**
* Garbage collection. Permanently remove all expired and deleted data
@ -94,15 +105,15 @@ class ModelEngine extends CacheEngine {
return false;
}
$cache = array($this->__Model->alias => array(
$this->__fields[0] => $data,
$this->__fields[1] => time() + $duration));
$oldId = $this->__Model->id;
$this->__Model->id = $key;
$res = $this->__Model->save($cache);
$this->__Model->id = $oldId;
return $res;
$cache = array('id' => $key,
$this->__fields[0] => $data,
$this->__fields[1] => time() + $duration
);
$result = false;
if ($this->__Model->save($cache)) {
$result = true;
}
return $result;
}
/**
* Read a key from the cache
@ -117,7 +128,7 @@ class ModelEngine extends CacheEngine {
return false;
}
if (isset($this->settings['serialize'])) {
return unserialize($val);
return unserialize($data);
}
return $data;
}

View file

@ -27,16 +27,50 @@
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
*/
uses('cache', 'cache' . DS . 'model');
class CacheTestModel extends CakeTestModel {
var $name = 'CacheTestModel';
}
/**
* Short description for class.
*
* @package cake.tests
* @subpackage cake.tests.cases.libs.cache
*/
class ModelEngineTest extends UnitTestCase {
class ModelEngineTest extends CakeTestCase {
var $fixtures = array('core.cache_test_model');
function skip() {
$this->skipif (true, 'ModelEngineTest not implemented');
$this->skipif (false, 'ModelEngineTest not implemented');
}
function setUp() {
Cache::config('model');
}
function start() {
parent::start();
Cache::config('model', array('engine' => 'Model', //[required]
'duration'=> 3600, //[optional]
'probability'=> 100, //[optional]
'className' => 'CacheTestModel', //[optional]
'fields' => array('data', 'expires'), //[optional]
'serialize' => true, //[optional]
)
);
}
function testSettings() {
$settings = Cache::settings();
$expecting = array('duration'=> 3600, //[optional]
'probability'=> 100, //[optional]
'className' => 'CacheTestModel', //[optional]
'fields' => array('data', 'expires'), //[optional]
'serialize' => true, //[optional]
'engine' => 'Model'
);
$this->assertEqual($settings, $expecting);
}
function testReadAndWriteCache() {
@ -83,5 +117,9 @@ class ModelEngineTest extends UnitTestCase {
$result = Cache::delete('delete_test');
$this->assertTrue($result);
}
function tearDown() {
Cache::config('default');
}
}
?>