Skip to content

Commit 79ec421

Browse files
authored
Merge pull request loopbackio#1206 from strongloop/add-flush-op-to-kvao
Add flush operation to KVAO
2 parents d095cc1 + f38709b commit 79ec421

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed

lib/connectors/kv-memory.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ KeyValueMemoryConnector.prototype.disconnect = function(callback) {
201201
process.nextTick(callback);
202202
};
203203

204+
KeyValueMemoryConnector.prototype.flush =
205+
function(modelName, options, callback) {
206+
this._store = Object.create(null);
207+
callback();
208+
};
209+
204210
function StoreItem(value, ttl) {
205211
this.value = value;
206212
this.setTtl(ttl);

lib/kvao/flush.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use strict';
2+
3+
var assert = require('assert');
4+
var utils = require('../utils');
5+
6+
/**
7+
* Delete all keys (and values) associated to the current model.
8+
*
9+
* @options {Object} options Unused ATM, placeholder for future options.
10+
* @callback {Function} callback
11+
* @param {Error} err Error object.
12+
* @promise
13+
*
14+
* @header KVAO.prototype.flush(options, cb)
15+
*/
16+
module.exports = function flush(options, callback) {
17+
if (callback == undefined && typeof options === 'function') {
18+
callback = options;
19+
options = {};
20+
} else if (!options) {
21+
options = {};
22+
}
23+
24+
assert(typeof options === 'object', 'options must be an object');
25+
26+
callback = callback || utils.createPromiseCallback();
27+
28+
this.getConnector().flush(this.modelName, options, callback);
29+
return callback.promise;
30+
};

lib/kvao/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module.exports = KeyValueAccessObject;
88
KeyValueAccessObject.get = require('./get');
99
KeyValueAccessObject.set = require('./set');
1010
KeyValueAccessObject.expire = require('./expire');
11+
KeyValueAccessObject.flush = require('./flush');
1112
KeyValueAccessObject.ttl = require('./ttl');
1213
KeyValueAccessObject.iterateKeys = require('./iterate-keys');
1314
KeyValueAccessObject.keys = require('./keys');

test/kvao/flush.suite.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'use strict';
2+
3+
const bdd = require('../helpers/bdd-if');
4+
const helpers = require('./_helpers');
5+
const should = require('should');
6+
7+
module.exports = function(dataSourceFactory, connectorCapabilities) {
8+
var supportsFlushOperation =
9+
connectorCapabilities.supportsFlushOperation !== false;
10+
11+
bdd.describeIf(supportsFlushOperation, 'flush', function() {
12+
let CacheItem;
13+
beforeEach(function unpackContext() {
14+
CacheItem = helpers.givenCacheItem(dataSourceFactory);
15+
});
16+
17+
it('removes all associated keys for a given model', function() {
18+
return helpers.givenKeys(CacheItem, ['key1', 'key2'])
19+
.then(() => CacheItem.flush())
20+
.then(() => CacheItem.keys())
21+
.done((keys) => {
22+
should(keys).eql([]);
23+
});
24+
});
25+
});
26+
};

0 commit comments

Comments
 (0)