From 00df1e88ebc2323a477825a9a4d32f64e838079d Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Wed, 12 Jun 2013 21:45:12 -0400 Subject: [PATCH] Added GroupDependency. --- framework/yii/caching/GroupDependency.php | 72 +++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 framework/yii/caching/GroupDependency.php diff --git a/framework/yii/caching/GroupDependency.php b/framework/yii/caching/GroupDependency.php new file mode 100644 index 0000000..be77344 --- /dev/null +++ b/framework/yii/caching/GroupDependency.php @@ -0,0 +1,72 @@ + + * @since 2.0 + */ +class GroupDependency extends Dependency +{ + /** + * @var string the group name + */ + public $group; + + /** + * Constructor. + * @param string $group the group name + * @param array $config name-value pairs that will be used to initialize the object properties + */ + public function __construct($group, $config = array()) + { + $this->group = $group; + parent::__construct($config); + } + + /** + * Generates the data needed to determine if dependency has been changed. + * This method does nothing in this class. + * @param Cache $cache the cache component that is currently evaluating this dependency + * @return mixed the data needed to determine if dependency has been changed. + */ + protected function generateDependencyData($cache) + { + if ($cache->get(array(__CLASS__, $this->group)) === false) { + // If the cutoff timestamp is not initialized or is swapped out of the cache, we need to set it. + $this->invalidate($cache, array(__CLASS__, $this->group)); + } + return microtime(true); + } + + /** + * Performs the actual dependency checking. + * @param Cache $cache the cache component that is currently evaluating this dependency + * @return boolean whether the dependency is changed or not. + */ + public function getHasChanged($cache) + { + $time = $cache->get(array(__CLASS__, $this->group)); + return $time === false || $time > $this->data; + } + + /** + * Invalidates all of the cached data items that have the same [[group]]. + * @param Cache $cache the cache component that caches the data items + * @param string $group the group name + */ + public static function invalidate($cache, $group) + { + $cache->set(array(__CLASS__, $group), microtime(true)); + } +}