Browse Source

adding caching.keys() function (issue #6)

feature/nested-cache-fetch-fix
Bryan Donovan 11 years ago
parent
commit
bff664192e
  1. 5
      lib/caching.js
  2. 11
      lib/stores/memory.js
  3. 42
      test/caching.unit.js

5
lib/caching.js

@ -1,3 +1,4 @@
/*jshint maxcomplexity:10*/
var caching = function (args) { var caching = function (args) {
args = args || {}; args = args || {};
var self = {}; var self = {};
@ -61,6 +62,10 @@ var caching = function (args) {
self.reset = self.store.reset.bind(self.store); self.reset = self.store.reset.bind(self.store);
} }
if (typeof self.store.keys === 'function') {
self.keys = self.store.keys.bind(self.store);
}
return self; return self;
}; };

11
lib/stores/memory.js

@ -39,6 +39,17 @@ var memory_store = function (args) {
} }
}; };
self.keys = function (cb) {
var keys = lru_cache.keys();
if (cb) {
process.nextTick(function () {
cb(null, keys);
});
} else {
return keys;
}
};
return self; return self;
}; };

42
test/caching.unit.js

@ -1,6 +1,7 @@
// TODO: These are really a mix of unit and integration tests. // TODO: These are really a mix of unit and integration tests.
var assert = require('assert'); var assert = require('assert');
var async = require('async');
var sinon = require('sinon'); var sinon = require('sinon');
var support = require('./support'); var support = require('./support');
var check_err = support.check_err; var check_err = support.check_err;
@ -132,7 +133,7 @@ describe("caching", function () {
}); });
}); });
it("lets us clear the cache without a callback", function (done) { it("lets us clear the cache without a callback (memory store only)", function (done) {
cache.reset(); cache.reset();
setTimeout(function () { setTimeout(function () {
cache.get(key, function (err, result) { cache.get(key, function (err, result) {
@ -147,6 +148,43 @@ describe("caching", function () {
}); });
}); });
describe("keys()", function () {
var key_count;
var saved_keys = [];
beforeEach(function (done) {
key_count = 10;
var processed = 0;
cache = caching({store: 'memory'});
function is_done() {
return processed === key_count;
}
async.until(is_done, function (cb) {
processed += 1;
key = support.random.string(20);
saved_keys.push(key);
value = support.random.string();
cache.set(key, value, cb);
}, done);
});
it("calls back with all keys in cache", function (done) {
cache.keys(function (err, keys) {
check_err(err);
assert.deepEqual(keys.sort, saved_keys.sort);
done();
});
});
it("lets us get the keys without a callback (memory store only)", function () {
var keys = cache.keys();
assert.deepEqual(keys.sort, saved_keys.sort);
});
});
describe("wrap()", function () { describe("wrap()", function () {
describe("using memory (lru-cache) store", function () { describe("using memory (lru-cache) store", function () {
var memory_store_stub; var memory_store_stub;
@ -166,7 +204,7 @@ describe("caching", function () {
memory_store.create.restore(); memory_store.create.restore();
}); });
it("calls back with the result of a function", function (done) { it("calls back with the result of the wrapped function", function (done) {
cache.wrap(key, function (cb) { cache.wrap(key, function (cb) {
methods.get_widget(name, cb); methods.get_widget(name, cb);
}, function (err, widget) { }, function (err, widget) {

Loading…
Cancel
Save