Skip to content

Commit d298aea

Browse files
committed
add fetchRevisions to lib/redis and deployPlugin
1 parent 96278aa commit d298aea

File tree

4 files changed

+138
-0
lines changed

4 files changed

+138
-0
lines changed

index.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,18 @@ module.exports = {
9797
}
9898
},
9999

100+
fetchRevisions: function(context) {
101+
var redisDeployClient = this.readConfig('redisDeployClient');
102+
var keyPrefix = this.readConfig('keyPrefix');
103+
104+
this.log('Listing revisions for key: `' + keyPrefix + '`');
105+
return Promise.resolve(redisDeployClient.fetchRevisions(keyPrefix))
106+
.then(function(revisions){
107+
return { revisions: revisions };
108+
})
109+
.catch(this._errorMessage.bind(this));
110+
},
111+
100112
_readFileContents: function(path) {
101113
return readFile(path)
102114
.then(function(buffer) {

lib/redis.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,22 @@ module.exports = CoreObject.extend({
6161
.then(this._activateRevisionKey.bind(this, currentKey, revisionKey));
6262
},
6363

64+
fetchRevisions: function(keyPrefix) {
65+
var currentKey = keyPrefix + ':current';
66+
67+
return Promise.hash({
68+
revisions: this._listRevisions(keyPrefix),
69+
current: this._client.get(currentKey)
70+
}).then(function(results) {
71+
return results.revisions.map(function(revision) {
72+
return {
73+
revision: revision,
74+
active: revision === results.current
75+
};
76+
});
77+
});
78+
},
79+
6480
_listRevisions: function(keyPrefix) {
6581
var client = this._client;
6682
return client.lrange(keyPrefix, 0, this._maxNumberOfRecentUploads - 1);

tests/unit/index-nodetest.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,4 +454,50 @@ describe('redis plugin', function() {
454454
assert.match(messageOutput, /ember deploy:activate qa --revision=123abc/);
455455
});
456456
});
457+
458+
describe('fetchRevisions hook', function() {
459+
it('fills the revisions variable on context', function() {
460+
var plugin;
461+
var context;
462+
463+
plugin = subject.createDeployPlugin({
464+
name: 'redis'
465+
});
466+
467+
context = {
468+
ui: mockUi,
469+
project: stubProject,
470+
config: {
471+
redis: {
472+
keyPrefix: 'test-prefix',
473+
filePattern: 'index.html',
474+
distDir: 'tests',
475+
revisionKey: '123abc',
476+
redisDeployClient: function(context) {
477+
return {
478+
fetchRevisions: function(keyPrefix, revisionKey) {
479+
return Promise.resolve([{
480+
revision: 'a',
481+
active: false
482+
}]);
483+
}
484+
};
485+
}
486+
}
487+
}
488+
};
489+
plugin.beforeHook(context);
490+
plugin.configure(context);
491+
492+
return assert.isFulfilled(plugin.fetchRevisions(context))
493+
.then(function(result) {
494+
assert.deepEqual(result, {
495+
revisions: [{
496+
"active": false,
497+
"revision": "a"
498+
}]
499+
});
500+
});
501+
});
502+
});
457503
});

tests/unit/lib/redis-nodetest.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,68 @@ describe('redis', function() {
178178
});
179179
});
180180
});
181+
182+
describe('#fetchRevisions', function() {
183+
it('lists the last existing revisions', function() {
184+
var recentRevisions = ['a', 'b', 'c'];
185+
186+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
187+
lrange: function() {
188+
return recentRevisions;
189+
},
190+
get: function() {
191+
}
192+
})));
193+
194+
var promise = redis.fetchRevisions('key-prefix');
195+
return assert.isFulfilled(promise)
196+
.then(function(result) {
197+
assert.deepEqual(result, [
198+
{
199+
revision: 'a',
200+
active: false
201+
},
202+
{
203+
revision: 'b',
204+
active: false
205+
},
206+
{
207+
revision: 'c',
208+
active: false
209+
}
210+
]
211+
);
212+
});
213+
});
214+
215+
it('lists revisions and marks the active one', function() {
216+
var recentRevisions = ['a', 'b'];
217+
var currentRevision = 'b';
218+
219+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
220+
lrange: function() {
221+
return recentRevisions;
222+
},
223+
get: function() {
224+
return currentRevision;
225+
}
226+
})));
227+
228+
var promise = redis.fetchRevisions('key-prefix');
229+
return assert.isFulfilled(promise)
230+
.then(function(result) {
231+
assert.deepEqual(result, [
232+
{
233+
revision: 'a',
234+
active: false
235+
},
236+
{
237+
revision: 'b',
238+
active: true
239+
}
240+
]
241+
);
242+
});
243+
});
244+
});
181245
});

0 commit comments

Comments
 (0)