Skip to content

Commit d8b6316

Browse files
committed
(feat) restores observer functions
1 parent e80a7a8 commit d8b6316

2 files changed

Lines changed: 37 additions & 10 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules/

index.js

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ class DDPClient extends EventEmitter{
174174
var item = {
175175
"_id": id
176176
};
177+
177178
if (data.fields) {
178179
_.each(data.fields, function(value, key) {
179180
item[key] = value;
@@ -185,31 +186,55 @@ class DDPClient extends EventEmitter{
185186
}
186187

187188
self.collections[name].upsert(item);
189+
190+
if (self._observers[name]) {
191+
_.each(self._observers[name], function(observer) {
192+
observer.added(id, item);
193+
})
194+
}
188195
}
189196

190197
// remove document from collection
191198
} else if (data.msg === "removed") {
192199
if (self.maintainCollections && data.collection) {
193-
var name = data.collection, id = data.id;
200+
var name = data.collection,
201+
id = data.id
202+
oldFields = self.collections[name].get(id);
203+
194204
self.collections[name].remove({"_id": id});
205+
206+
if (self._observers[name]) {
207+
_.each(self._observers[name], function(observer) {
208+
observer.removed(id, oldFields);
209+
});
210+
}
195211
}
196212

197213
// change document in collection
198214
} else if (data.msg === "changed") {
199215
if (self.maintainCollections && data.collection) {
200-
var name = data.collection, id = data.id;
201-
216+
var name = data.collection,
217+
id = data.id,
218+
oldFields = {},
219+
clearedFields = data.cleared || [];
202220
var item = {
203221
"_id": id
204222
};
205223

206224
if (data.fields) {
225+
oldFields = self.collections[name].get(id);
207226
_.each(data.fields, function(value, key) {
208227
item[key] = value;
209-
})
228+
});
210229
}
211230

212-
self.collections[name].upsert(item);
231+
var newFields = self.collections[name].upsert(item);
232+
233+
if (self._observers[name]) {
234+
_.each(self._observers[name], function(observer) {
235+
observer.changed(id, oldFields, clearedFields, newFields);
236+
});
237+
}
213238
}
214239

215240
// subscriptions ready
@@ -285,7 +310,6 @@ class DDPClient extends EventEmitter{
285310

286311
var url = self._buildWsUrl();
287312
self._makeWebSocketConnection(url);
288-
289313
}
290314

291315
_endPendingMethodCalls() {
@@ -420,10 +444,10 @@ class DDPClient extends EventEmitter{
420444
/**
421445
* Adds an observer to a collection and returns the observer.
422446
* Observation can be stopped by calling the stop() method on the observer.
423-
* Functions for added, updated and removed can be added to the observer
447+
* Functions for added, changed and removed can be added to the observer
424448
* afterward.
425449
*/
426-
observe(name, added, updated, removed) {
450+
observe(name, added, changed, removed) {
427451
var self = this;
428452
var observer = {};
429453
var id = self._getNextId();
@@ -434,10 +458,12 @@ class DDPClient extends EventEmitter{
434458
enumerable: true
435459
});
436460

437-
Object.defineProperty(observer, "_id", { get: function() { return id; }});
461+
Object.defineProperty(observer, "_id", {
462+
get: function() { return id; }
463+
});
438464

439465
observer.added = added || function(){};
440-
observer.updated = updated || function(){};
466+
observer.changed = changed || function(){};
441467
observer.removed = removed || function(){};
442468

443469
observer.stop = function() {

0 commit comments

Comments
 (0)