$name)); } if (is_array($config)) { // Append the default configuration options $config += Kohana::config('cache.default'); } else { // Load the default group $config = Kohana::config('cache.default'); } // Cache the config in the object $this->config = $config; // Set driver name $driver = 'Cache_'.ucfirst($this->config['driver']).'_Driver'; // Load the driver if ( ! Kohana::auto_load($driver)) throw new Cache_Exception('The :driver: driver for the :class: library could not be found', array(':driver:' => $this->config['driver'], ':class:' => get_class($this))); // Initialize the driver $this->driver = new $driver($this->config['params']); // Validate the driver if ( ! ($this->driver instanceof Cache_Driver)) throw new Cache_Exception('The :driver: driver for the :library: library must implement the :interface: interface', array(':driver:' => $this->config['driver'], ':library:' => get_class($this), ':interface:' => 'Cache_Driver')); Kohana_Log::add('debug', 'Cache Library initialized'); } /** * Set cache items */ public function set($key, $value = NULL, $tags = NULL, $lifetime = NULL) { if ($lifetime === NULL) { $lifetime = $this->config['lifetime']; } if ( ! is_array($key)) { $key = array($key => $value); } if ($this->config['prefix'] !== NULL) { $key = $this->add_prefix($key); if ($tags !== NULL) { $tags = $this->add_prefix($tags, FALSE); } } return $this->driver->set($key, $tags, $lifetime); } /** * Get a cache items by key */ public function get($keys) { $single = FALSE; if ( ! is_array($keys)) { $keys = array($keys); $single = TRUE; } if ($this->config['prefix'] !== NULL) { $keys = $this->add_prefix($keys, FALSE); if ( ! $single) { return $this->strip_prefix($this->driver->get($keys, $single)); } } return $this->driver->get($keys, $single); } /** * Get cache items by tags */ public function get_tag($tags) { if ( ! is_array($tags)) { $tags = array($tags); } if ($this->config['prefix'] !== NULL) { $tags = $this->add_prefix($tags, FALSE); return $this->strip_prefix($this->driver->get_tag($tags)); } else { return $this->driver->get_tag($tags); } } /** * Delete cache item by key */ public function delete($keys) { if ( ! is_array($keys)) { $keys = array($keys); } if ($this->config['prefix'] !== NULL) { $keys = $this->add_prefix($keys, FALSE); } return $this->driver->delete($keys); } /** * Delete cache items by tag */ public function delete_tag($tags) { if ( ! is_array($tags)) { $tags = array($tags); } if ($this->config['prefix'] !== NULL) { $tags = $this->add_prefix($tags, FALSE); } return $this->driver->delete_tag($tags); } /** * Empty the cache */ public function delete_all() { return $this->driver->delete_all(); } /** * Add a prefix to keys or tags */ protected function add_prefix($array, $to_key = TRUE) { $out = array(); foreach($array as $key => $value) { if ($to_key) { $out[$this->config['prefix'].$key] = $value; } else { $out[$key] = $this->config['prefix'].$value; } } return $out; } /** * Strip a prefix to keys or tags */ protected function strip_prefix($array) { $out = array(); $start = strlen($this->config['prefix']); foreach($array as $key => $value) { $out[substr($key, $start)] = $value; } return $out; } } // End Cache Library