Cache decoration.
authorGunnar Wrobel <p@rdus.de>
Thu, 6 Jan 2011 07:28:10 +0000 (08:28 +0100)
committerGunnar Wrobel <p@rdus.de>
Thu, 6 Jan 2011 07:28:10 +0000 (08:28 +0100)
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php
framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php

index 23d5219..682bf86 100644 (file)
@@ -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
index 37e3f3e..d7da93c 100644 (file)
@@ -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())
+        );
+    }
 }