Skip to content
This repository was archived by the owner on Apr 2, 2024. It is now read-only.

Commit 76dc6de

Browse files
authored
Merge pull request share#237 from share/fetch-snapshot-middleware
Expose `fetchSnapshot` requested version in `readSnapshots` middleware
2 parents 0249c91 + 11d982d commit 76dc6de

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

lib/backend.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ Backend.prototype.MIDDLEWARE_ACTIONS = {
7777
submit: 'submit'
7878
};
7979

80+
Backend.prototype.SNAPSHOT_TYPES = {
81+
// The current snapshot is being fetched (eg through backend.fetch)
82+
current: 'current',
83+
// A specific snapshot is being fetched by version (eg through backend.fetchSnapshot)
84+
byVersion: 'byVersion'
85+
};
86+
8087
Backend.prototype._shimDocAction = function() {
8188
if (warnDeprecatedDoc) {
8289
warnDeprecatedDoc = false;
@@ -264,15 +271,21 @@ Backend.prototype._sanitizeOpsBulk = function(agent, projection, collection, ops
264271
}, callback);
265272
};
266273

267-
Backend.prototype._sanitizeSnapshots = function(agent, projection, collection, snapshots, callback) {
274+
Backend.prototype._sanitizeSnapshots = function(agent, projection, collection, snapshots, snapshotType, callback) {
268275
if (projection) {
269276
try {
270277
projections.projectSnapshots(projection.fields, snapshots);
271278
} catch (err) {
272279
return callback(err);
273280
}
274281
}
275-
var request = {collection: collection, snapshots: snapshots};
282+
283+
var request = {
284+
collection: collection,
285+
snapshots: snapshots,
286+
snapshotType: snapshotType
287+
};
288+
276289
this.trigger(this.MIDDLEWARE_ACTIONS.readSnapshots, agent, request, callback);
277290
};
278291

@@ -352,7 +365,7 @@ Backend.prototype.fetch = function(agent, index, id, callback) {
352365
if (err) return callback(err);
353366
var snapshotProjection = backend._getSnapshotProjection(backend.db, projection);
354367
var snapshots = [snapshot];
355-
backend._sanitizeSnapshots(agent, snapshotProjection, collection, snapshots, function(err) {
368+
backend._sanitizeSnapshots(agent, snapshotProjection, collection, snapshots, backend.SNAPSHOT_TYPES.current, function(err) {
356369
if (err) return callback(err);
357370
backend.emit('timing', 'fetch', Date.now() - start, request);
358371
callback(null, snapshot);
@@ -376,7 +389,7 @@ Backend.prototype.fetchBulk = function(agent, index, ids, callback) {
376389
if (err) return callback(err);
377390
var snapshotProjection = backend._getSnapshotProjection(backend.db, projection);
378391
var snapshots = backend._getSnapshotsFromMap(ids, snapshotMap);
379-
backend._sanitizeSnapshots(agent, snapshotProjection, collection, snapshots, function(err) {
392+
backend._sanitizeSnapshots(agent, snapshotProjection, collection, snapshots, backend.SNAPSHOT_TYPES.current, function(err) {
380393
if (err) return callback(err);
381394
backend.emit('timing', 'fetchBulk', Date.now() - start, request);
382395
callback(null, snapshotMap);
@@ -564,7 +577,7 @@ Backend.prototype._query = function(agent, request, callback) {
564577
var backend = this;
565578
request.db.query(request.collection, request.query, request.fields, request.options, function(err, snapshots, extra) {
566579
if (err) return callback(err);
567-
backend._sanitizeSnapshots(agent, request.snapshotProjection, request.collection, snapshots, function(err) {
580+
backend._sanitizeSnapshots(agent, request.snapshotProjection, request.collection, snapshots, backend.SNAPSHOT_TYPES.current, function(err) {
568581
callback(err, snapshots, extra);
569582
});
570583
});
@@ -602,7 +615,8 @@ Backend.prototype.fetchSnapshot = function(agent, index, id, version, callback)
602615
if (error) return callback(error);
603616
var snapshotProjection = backend._getSnapshotProjection(backend.db, projection);
604617
var snapshots = [snapshot];
605-
backend._sanitizeSnapshots(agent, snapshotProjection, collection, snapshots, function (error) {
618+
var snapshotType = backend.SNAPSHOT_TYPES.byVersion;
619+
backend._sanitizeSnapshots(agent, snapshotProjection, collection, snapshots, snapshotType, function (error) {
606620
if (error) return callback(error);
607621
backend.emit('timing', 'fetchSnapshot', Date.now() - start, request);
608622
callback(null, snapshot);

lib/query-emitter.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ QueryEmitter.prototype.queryPoll = function(callback) {
186186
emitter.db.getSnapshotBulk(emitter.collection, inserted, emitter.fields, null, function(err, snapshotMap) {
187187
if (err) return emitter._finishPoll(err, callback, pending);
188188
var snapshots = emitter.backend._getSnapshotsFromMap(inserted, snapshotMap);
189-
emitter.backend._sanitizeSnapshots(emitter.agent, emitter.snapshotProjection, emitter.collection, snapshots, function(err) {
189+
var snapshotType = emitter.backend.SNAPSHOT_TYPES.current;
190+
emitter.backend._sanitizeSnapshots(emitter.agent, emitter.snapshotProjection, emitter.collection, snapshots, snapshotType, function(err) {
190191
if (err) return emitter._finishPoll(err, callback, pending);
191192
emitter._emitTiming('queryEmitter.pollGetSnapshotBulk', start);
192193
var diff = mapDiff(idsDiff, snapshotMap);
@@ -234,7 +235,8 @@ QueryEmitter.prototype.queryPollDoc = function(id, callback) {
234235
emitter.db.getSnapshot(emitter.collection, id, emitter.fields, null, function(err, snapshot) {
235236
if (err) return callback(err);
236237
var snapshots = [snapshot];
237-
emitter.backend._sanitizeSnapshots(emitter.agent, emitter.snapshotProjection, emitter.collection, snapshots, function(err) {
238+
var snapshotType = emitter.backend.SNAPSHOT_TYPES.current;
239+
emitter.backend._sanitizeSnapshots(emitter.agent, emitter.snapshotProjection, emitter.collection, snapshots, snapshotType, function(err) {
238240
if (err) return callback(err);
239241
emitter.onDiff([new arraydiff.InsertDiff(index, snapshots)]);
240242
emitter._emitTiming('queryEmitter.pollDocGetSnapshot', start);

test/client/snapshot-request.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,12 @@ describe('SnapshotRequest', function () {
228228
backend.use(backend.MIDDLEWARE_ACTIONS.readSnapshots,
229229
function (request) {
230230
expect(request.snapshots[0]).to.eql(v3);
231+
expect(request.snapshotType).to.be(backend.SNAPSHOT_TYPES.byVersion);
231232
done();
232233
}
233234
);
234235

235-
backend.connect().fetchSnapshot('books', 'don-quixote', function () { });
236+
backend.connect().fetchSnapshot('books', 'don-quixote', 3, function () { });
236237
});
237238

238239
it('can have its snapshot manipulated in the middleware', function (done) {

0 commit comments

Comments
 (0)