/**
  * FixMe: Currently only db and has_one fields are cached.
  * @param string|int $identifier an identifier which will be used for key generation
  * @param callable $callback the function which can be called to fetch the data
  * @return DataObject
  */
 protected function cache($identifier, $callback)
 {
     $serializer = CacheHelper::get_serializer();
     // check for cacheable extension of data object class
     $className = $this->dataClass;
     if (Object::has_extension($className, 'CacheableExtension')) {
         // search in cache
         $cache = CacheHelper::get_cache();
         $key = CacheHelper::to_key("{$className}.{$identifier}");
         if ($data = $cache->load($key)) {
             return $serializer->deserialize($data);
         } else {
             // if not found in cache, perform callback
             $data = $callback();
             if (!$data) {
                 // if result is empty, return null
                 return null;
             }
             $cachedFunctions = array_keys($data->hasOne());
             foreach ($cachedFunctions as $fn) {
                 $data->{$fn}();
             }
             $cache->save($serializer->serialize($data), $key);
             // return result
             return $data;
         }
     } else {
         return $callback();
     }
 }
 public function testCacheDataListWithoutCacheableExtension()
 {
     $key = 'Member_1';
     Member::remove_extension('CacheableExtension');
     $this->cacheDataObject();
     $cache = CacheHelper::get_cache()->load($key);
     $this->assertFalse($cache);
 }
 /**
  * @param SS_HTTPRequest $request
  */
 public function run($request)
 {
     CacheHelper::get_cache()->clean(Zend_Cache::CLEANING_MODE_ALL);
 }
 /**
  *
  */
 public function onBeforeDelete()
 {
     // delete the cache
     CacheHelper::get_cache()->remove($this->key());
     parent::onBeforeDelete();
 }
 public function testGetCache()
 {
     $cache = CacheHelper::get_cache();
     $this->assertEquals(ClassInfo::class_name($cache), 'Zend_Cache_Frontend_Function');
 }