public function testToKey()
 {
     $data = ['local_cacheNtb\\User.1' => 'local_cacheNtb_User_1', 'local_cacheNtb\\User.1' => 'local_cacheNtb_User_1', 'local_cacheNtb-User-1' => 'local_cacheNtb_User_1'];
     foreach ($data as $input => $expected) {
         $this->assertEquals($expected, CacheHelper::to_key($input));
     }
 }
 /**
  * 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();
     }
 }
 private function key()
 {
     $name = $this->ownerBaseClass;
     $id = $this->Identifier();
     return CacheHelper::to_key("{$name}.{$id}");
 }