Skip to content

Commit 69f7f09

Browse files
authored
Merge pull request #2676 from strongloop/add-remoting-for-kv-model-ttl
Add remoting for kv model ttl
2 parents 6c0b159 + 9db0682 commit 69f7f09

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

common/models/key-value-model.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ module.exports = function(KeyValueModel) {
1616
throwNotAttached(this.modelName, 'expire');
1717
};
1818

19+
// TODO add api docs
20+
KeyValueModel.ttl = function(key, options, callback) {
21+
throwNotAttached(this.modelName, 'ttl');
22+
};
23+
1924
// TODO add api docs
2025
KeyValueModel.keys = function(filter, options, callback) {
2126
throwNotAttached(this.modelName, 'keys');
@@ -62,6 +67,15 @@ module.exports = function(KeyValueModel) {
6267
http: { path: '/:key/expire', verb: 'put' },
6368
});
6469

70+
this.remoteMethod('ttl', {
71+
accepts: {
72+
arg: 'key', type: 'string', required: true,
73+
http: { source: 'path' },
74+
},
75+
returns: { arg: 'value', type: 'any', root: true },
76+
http: { path: '/:key/ttl', verb: 'get' },
77+
});
78+
6579
this.remoteMethod('keys', {
6680
accepts: {
6781
arg: 'filter', type: 'object', required: false,

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"mBaaS"
3333
],
3434
"scripts": {
35+
"lint": "grunt eslint",
3536
"test": "grunt mocha-and-karma"
3637
},
3738
"dependencies": {

test/key-value-model.test.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,47 @@ describe('KeyValueModel', function() {
8181
.expect(404, done);
8282
});
8383

84+
it('provides "ttl(key)" at "GET /key/ttl"', function(done) {
85+
request.put('/CacheItems/ttl-key?ttl=2000')
86+
.end(function(err, res) {
87+
if (err) return done(err);
88+
request.get('/CacheItems/ttl-key/ttl')
89+
.end(function(err, res) {
90+
if (err) return done(err);
91+
expect(res.body).to.be.number;
92+
done();
93+
});
94+
});
95+
});
96+
97+
it('returns 204 when getting TTL for a key that does not have TTL set',
98+
function(done) {
99+
request.put('/CacheItems/ttl-key')
100+
.end(function(err, res) {
101+
if (err) return done(err);
102+
request.get('/CacheItems/ttl-key/ttl')
103+
.expect(204, done);
104+
});
105+
});
106+
107+
it('returns 404 when getting TTL for a key when TTL has expired',
108+
function(done) {
109+
request.put('/CacheItems/ttl-key?ttl=10')
110+
.end(function(err, res) {
111+
setTimeout(function() {
112+
if (err) return done(err);
113+
request.get('/CacheItems/ttl-key/ttl')
114+
.expect(404, done);
115+
}, 20);
116+
});
117+
});
118+
119+
it('returns 404 when getting TTL for a key that does not exist',
120+
function(done) {
121+
request.get('/CacheItems/key-does-not-exist/ttl')
122+
.expect(404, done);
123+
});
124+
84125
it('provides "keys(filter)" at "GET /keys"', function(done) {
85126
CacheItem.set('list-key', AN_OBJECT_VALUE, function(err) {
86127
if (err) return done(err);

0 commit comments

Comments
 (0)