From 0271cbc25d5ae1bb9a3b98fba09e0aa7aaf8f855 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel
Date: Thu, 6 Jan 2011 08:28:10 +0100 Subject: [PATCH] Cache decoration. --- .../lib/Horde/Kolab/Storage/Factory.php | 31 ++++++++++++++++++++++ .../test/Horde/Kolab/Storage/Unit/FactoryTest.php | 31 ++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php index 23d521997..682bf86f0 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php @@ -67,6 +67,13 @@ class Horde_Kolab_Storage_Factory $this->createDriverFromParams($params), $this ); + if (!empty($params['cache'])) { + $storage = new Horde_Kolab_Storage_Decorator_Cache( + $storage, + $this->createCache($params['cache']), + $this + ); + } if (!empty($params['logger'])) { $storage = new Horde_Kolab_Storage_Decorator_Log( $storage, $params['logger'] @@ -262,4 +269,28 @@ class Horde_Kolab_Storage_Factory } return $this->_folder_types[$annotation]; } + + /** + * Create the cache handler. + * + * @param mixed $params The cache configuration or a Horde cache object + * + * @return Horde_Kolab_Storage_Cache The cache handler. + */ + public function createCache($params) + { + if ($params instanceOf Horde_Cache) { + return new Horde_Kolab_Storage_Cache($params); + } else { + $cache = new Horde_Cache( + new Horde_Cache_Storage_File( + $params + ), + array('lifetime' => 0) + ); + } + return new Horde_Kolab_Storage_Cache( + $cache + ); + } } \ No newline at end of file diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php index 37e3f3e7d..d7da93cfc 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php @@ -122,6 +122,20 @@ extends Horde_Kolab_Storage_TestCase ); } + public function testCacheDecoration() + { + $factory = new Horde_Kolab_Storage_Factory(); + $this->assertInstanceOf( + 'Horde_Kolab_Storage_Decorator_Cache', + $factory->createFromParams( + array( + 'driver' => 'mock', + 'cache' => array('') + ) + ) + ); + } + public function testTimerDecoration() { $factory = new Horde_Kolab_Storage_Factory(); @@ -217,4 +231,21 @@ extends Horde_Kolab_Storage_TestCase ) ); } + + public function testCacheInstance() + { + $factory = new Horde_Kolab_Storage_Factory(); + $cache = new Horde_Cache(new Horde_Cache_Storage_Mock()); + $this->assertInstanceOf( + 'Horde_Kolab_Storage_Cache', $factory->createCache($cache) + ); + } + + public function testCacheFilebased() + { + $factory = new Horde_Kolab_Storage_Factory(); + $this->assertInstanceOf( + 'Horde_Kolab_Storage_Cache', $factory->createCache(array()) + ); + } } -- 2.11.0