diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-11-24 19:20:36 -0800 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-11-24 19:20:36 -0800 |
commit | 9b6663f87a7e679ffba691cf516191fc840cf978 (patch) | |
tree | 20cf9f3aaf93b4ba69d282dcf10d259db4a752de /system/libraries/Cache.php | |
parent | 82ee5f9d338017c69331b2907f37a468ced8c66e (diff) |
Update to Kohana r4684 which is now Kohana 2.4 and has substantial
changes.
Diffstat (limited to 'system/libraries/Cache.php')
-rw-r--r-- | system/libraries/Cache.php | 145 |
1 files changed, 54 insertions, 91 deletions
diff --git a/system/libraries/Cache.php b/system/libraries/Cache.php index 8a02a905..2ed344fa 100644 --- a/system/libraries/Cache.php +++ b/system/libraries/Cache.php @@ -4,20 +4,17 @@ * resources. Caches are identified by a unique string. Tagging of caches is * also supported, and caches can be found and deleted by id or tag. * - * $Id: Cache.php 4321 2009-05-04 01:39:44Z kiall $ + * $Id: Cache.php 4605 2009-09-14 17:22:21Z kiall $ * * @package Cache * @author Kohana Team - * @copyright (c) 2007-2008 Kohana Team - * @license http://kohanaphp.com/license.html + * @copyright (c) 2007-2009 Kohana Team + * @license http://kohanaphp.com/license */ class Cache_Core { protected static $instances = array(); - // For garbage collection - protected static $loaded; - // Configuration protected $config; @@ -55,7 +52,7 @@ class Cache_Core { // Test the config group name if (($config = Kohana::config('cache.'.$config)) === NULL) - throw new Kohana_Exception('cache.undefined_group', $name); + throw new Kohana_Exception('The :group: group is not defined in your configuration.', array(':group:' => $name)); } if (is_array($config)) @@ -77,132 +74,98 @@ class Cache_Core { // Load the driver if ( ! Kohana::auto_load($driver)) - throw new Kohana_Exception('core.driver_not_found', $this->config['driver'], get_class($this)); + throw new Kohana_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 Kohana_Exception('core.driver_implements', $this->config['driver'], get_class($this), 'Cache_Driver'); - - Kohana::log('debug', 'Cache Library initialized'); - - if (Cache::$loaded !== TRUE) - { - $this->config['requests'] = (int) $this->config['requests']; - - if ($this->config['requests'] > 0 AND mt_rand(1, $this->config['requests']) === 1) - { - // Do garbage collection - $this->driver->delete_expired(); + throw new Kohana_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('debug', 'Cache: Expired caches deleted.'); - } - - // Cache has been loaded once - Cache::$loaded = TRUE; - } + Kohana_Log::add('debug', 'Cache Library initialized'); } /** - * Fetches a cache by id. NULL is returned when a cache item is not found. - * - * @param string cache id - * @return mixed cached data or NULL + * Set cache items */ - public function get($id) + public function set($key, $value = NULL, $tags = NULL, $lifetime = NULL) { - // Sanitize the ID - $id = $this->sanitize_id($id); + if ($lifetime === NULL) + { + $lifetime = $this->config['lifetime']; + } - return $this->driver->get($id); - } + if ( ! is_array($key)) + { + $key = array($key => $value); + } - /** - * Fetches all of the caches for a given tag. An empty array will be - * returned when no matching caches are found. - * - * @param string cache tag - * @return array all cache items matching the tag - */ - public function find($tag) - { - return $this->driver->find($tag); + return $this->driver->set($key, $tags, $lifetime); } /** - * Set a cache item by id. Tags may also be added and a custom lifetime - * can be set. Non-string data is automatically serialized. - * - * @param string unique cache id - * @param mixed data to cache - * @param array|string tags for this item - * @param integer number of seconds until the cache expires - * @return boolean + * Get a cache items by key */ - function set($id, $data, $tags = NULL, $lifetime = NULL) + public function get($keys) { - if (is_resource($data)) - throw new Kohana_Exception('cache.resources'); - - // Sanitize the ID - $id = $this->sanitize_id($id); + $single = FALSE; - if ($lifetime === NULL) + if ( ! is_array($keys)) { - // Get the default lifetime - $lifetime = $this->config['lifetime']; + $keys = array($keys); + $single = TRUE; } - return $this->driver->set($id, $data, (array) $tags, $lifetime); + return $this->driver->get($keys, $single); } /** - * Delete a cache item by id. - * - * @param string cache id - * @return boolean + * Get cache items by tags */ - public function delete($id) + public function get_tag($tags) { - // Sanitize the ID - $id = $this->sanitize_id($id); + if ( ! is_array($tags)) + { + $tags = array($tags); + } - return $this->driver->delete($id); + return $this->driver->get_tag($tags); } /** - * Delete all cache items with a given tag. - * - * @param string cache tag name - * @return boolean + * Delete cache item by key */ - public function delete_tag($tag) + public function delete($keys) { - return $this->driver->delete($tag, TRUE); + if ( ! is_array($keys)) + { + $keys = array($keys); + } + + return $this->driver->delete($keys); } /** - * Delete ALL cache items items. - * - * @return boolean + * Delete cache items by tag */ - public function delete_all() + public function delete_tag($tags) { - return $this->driver->delete(TRUE); + if ( ! is_array($tags)) + { + $tags = array($tags); + } + + return $this->driver->delete_tag($tags); } /** - * Replaces troublesome characters with underscores. - * - * @param string cache id - * @return string + * Empty the cache */ - protected function sanitize_id($id) + public function delete_all() { - // Change slashes and spaces to underscores - return str_replace(array('/', '\\', ' '), '_', $id); + return $this->driver->delete_all(); } - -} // End Cache +} // End Cache Library
\ No newline at end of file |