From f87084730c7bced1a2c2e931d72eff7926c71874 Mon Sep 17 00:00:00 2001 From: Erwin Goossen Date: Sat, 17 Oct 2015 17:55:24 +0200 Subject: [PATCH 1/5] Added changed, removed and added events back to the observer Added the fields which have been added to the response of the observer. --- index.js | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index c2dfa9f..d7a1d0d 100644 --- a/index.js +++ b/index.js @@ -185,31 +185,57 @@ class DDPClient extends EventEmitter{ } self.collections[name].upsert(item); + + if (self._observers[name]) { + _.each(self._observers[name], function(observer) { + observer.added(id, item); + }); + } } // remove document from collection } else if (data.msg === "removed") { if (self.maintainCollections && data.collection) { - var name = data.collection, id = data.id; + var name = data.collection, + id = data.id + oldFields = self.collections[name].get(id); + self.collections[name].remove({"_id": id}); + + if (self._observers[name]) { + _.each(self._observers[name], function(observer) { + observer.removed(id, oldFields); + }); + } } - - // change document in collection + + // change document in collection } else if (data.msg === "changed") { if (self.maintainCollections && data.collection) { - var name = data.collection, id = data.id; + var name = data.collection, + id = data.id, + oldFields = {}, + newFields = {}, + clearedFields = data.cleared || []; var item = { "_id": id }; if (data.fields) { + oldFields = self.collections[name].get(id); _.each(data.fields, function(value, key) { item[key] = value; }) } self.collections[name].upsert(item); + + if (self._observers[name]) { + _.each(self._observers[name], function(observer) { + observer.changed(id, oldFields, clearedFields, newFields); + }); + } } // subscriptions ready From d31f48faf78a1cae6599885bb526fb880c1e5afa Mon Sep 17 00:00:00 2001 From: Erwin Goossen Date: Sat, 17 Oct 2015 18:46:33 +0200 Subject: [PATCH 2/5] newFields now gets the result of the upsert --- index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index d7a1d0d..f2d9cad 100644 --- a/index.js +++ b/index.js @@ -199,7 +199,7 @@ class DDPClient extends EventEmitter{ var name = data.collection, id = data.id oldFields = self.collections[name].get(id); - + self.collections[name].remove({"_id": id}); if (self._observers[name]) { @@ -229,7 +229,7 @@ class DDPClient extends EventEmitter{ }) } - self.collections[name].upsert(item); + newFields = self.collections[name].upsert(item); if (self._observers[name]) { _.each(self._observers[name], function(observer) { From 7f104cb295a5e80f11a8ca40da7a76a8360cdd86 Mon Sep 17 00:00:00 2001 From: Erwin Goossen Date: Sat, 17 Oct 2015 20:01:36 +0200 Subject: [PATCH 3/5] Added changed as a parameter for observe --- index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index f2d9cad..722a505 100644 --- a/index.js +++ b/index.js @@ -446,10 +446,10 @@ class DDPClient extends EventEmitter{ /** * Adds an observer to a collection and returns the observer. * Observation can be stopped by calling the stop() method on the observer. - * Functions for added, updated and removed can be added to the observer + * Functions for added, updated, removed and changed can be added to the observer * afterward. */ - observe(name, added, updated, removed) { + observe(name, added, updated, removed, changed) { var self = this; var observer = {}; var id = self._getNextId(); @@ -465,6 +465,7 @@ class DDPClient extends EventEmitter{ observer.added = added || function(){}; observer.updated = updated || function(){}; observer.removed = removed || function(){}; + observer.changed = changed || function(){}; observer.stop = function() { self._removeObserver(observer); From d69ebf213a3c312a10f2d068c87062288dd8c3e3 Mon Sep 17 00:00:00 2001 From: Erwin Goossen Date: Sat, 17 Oct 2015 20:07:18 +0200 Subject: [PATCH 4/5] Had a mindfart while looking at the observe;-) --- index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 722a505..5732a51 100644 --- a/index.js +++ b/index.js @@ -446,10 +446,10 @@ class DDPClient extends EventEmitter{ /** * Adds an observer to a collection and returns the observer. * Observation can be stopped by calling the stop() method on the observer. - * Functions for added, updated, removed and changed can be added to the observer + * Functions for added, removed and changed can be added to the observer * afterward. */ - observe(name, added, updated, removed, changed) { + observe(name, added, changed, removed) { var self = this; var observer = {}; var id = self._getNextId(); @@ -463,9 +463,8 @@ class DDPClient extends EventEmitter{ Object.defineProperty(observer, "_id", { get: function() { return id; }}); observer.added = added || function(){}; - observer.updated = updated || function(){}; - observer.removed = removed || function(){}; observer.changed = changed || function(){}; + observer.updated = updated || function(){}; observer.stop = function() { self._removeObserver(observer); From 52ad01b9de9136d248c6d9da2599022dbed1ea41 Mon Sep 17 00:00:00 2001 From: Erwin Goossen Date: Mon, 19 Oct 2015 22:07:16 +0200 Subject: [PATCH 5/5] Renamed the wrong function --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 5732a51..9e45ae0 100644 --- a/index.js +++ b/index.js @@ -464,7 +464,7 @@ class DDPClient extends EventEmitter{ observer.added = added || function(){}; observer.changed = changed || function(){}; - observer.updated = updated || function(){}; + observer.removed = removed || function(){}; observer.stop = function() { self._removeObserver(observer);