}
function __invoke(callable $callback) {
- if (empty($this->args["fresh"]) && ($cache = $this->api->getCacheStorage())) {
- $key = $this->getCacheKey();
-
- if ($cache->get($key, $cached)) {
- call_user_func_array($callback, $cached);
- return $this->api->getClient();
- }
+ if ($this->readFromCache($cached)) {
+ header("X-Cache-Hit: $this", false);
+ call_user_func_array($callback, $cached);
+ } else {
+ header("X-Cache-Miss: $this", false);
+ $this->enqueue($callback);
}
-
- $this->enqueue($callback);
- return $this->api->getClient();
+ return $this;
}
/**
return strtolower(end($parts));
}
+ /**
+ * Call Client::send()
+ */
+ function send() {
+ return $this->api->getClient()->send();
+ }
+
/**
* Get associated cache storage
* @param int $ttl out param of configure ttl
}
function getCacheKey() {
+ $args = $this->args;
+ unset($args["fresh"]);
+ ksort($args);
return sprintf("github:%s:%s:%s", $this->api->getToken(), $this,
- new QueryString($this->args));
+ new QueryString($args));
}
function readFromCache(array &$cached = null, &$ttl = null) {
if (isset($this->config->storage->cache->{$this}->ttl)) {
$ttl = $this->config->storage->cache->{$this}->ttl;
} else {
- $ttl = 0;
+ $ttl = null;
}
$key = $this->getCacheKey();
$cache->set($key, $fresh, $ttl);
}
}
+
+ function dropFromCache() {
+ if (($cache = $this->api->getCacheStorage())) {
+ $key = $this->getCacheKey();
+ $cache->del($key);
+ }
+ }
}