From f8bfb06001614646ecf63e89dcde303dd7b5de05 Mon Sep 17 00:00:00 2001 From: Naomi Seyfer Date: Wed, 30 Jan 2013 12:07:04 -0800 Subject: [PATCH] Unordered observe based on observeChanges now. --- packages/minimongo/minimongo.js | 28 ++++++++++++++++++++++++- packages/minimongo/package.js | 1 - packages/mongo-livedata/mongo_driver.js | 3 +-- packages/ordereddict/ordereddict.js | 1 + 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/packages/minimongo/minimongo.js b/packages/minimongo/minimongo.js index a6b33495df..125cb7fe58 100644 --- a/packages/minimongo/minimongo.js +++ b/packages/minimongo/minimongo.js @@ -203,7 +203,7 @@ _.extend(LocalCollection.Cursor.prototype, { }, _observeUnordered: function (options) { var self = this; - return self._observeInternal(false, options); + return LocalCollection._observeUnordered(self, options); }, observeChanges: function (callbacks) { var self = this; @@ -872,4 +872,30 @@ LocalCollection._makeChangedFields = function (newDoc, oldDoc) { return fields; }; +LocalCollection._observeUnordered = function (cursor, callbacks) { + var docs = {}; + return cursor.observeChanges({ + added: function (id, fields) { + var strId = LocalCollection._idStringify(id); + var doc = EJSON.clone(fields); + doc._id = id; + docs[strId] = doc; + callbacks.added(doc); + }, + changed: function (id, fields) { + var strId = LocalCollection._idStringify(id); + var doc = docs[strId]; + var oldDoc = EJSON.clone(docs[strId]); + // writes through to the doc set + LocalCollection._applyChanges(doc, fields); + callbacks.changed(doc, oldDoc); + }, + removed: function (id) { + var strId = LocalCollection._idStringify(id); + var doc = docs[strId]; + delete docs[strId]; + callbacks.removed(doc); + } + }); +}; })(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index d87d72dc29..fbd81d934c 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -9,7 +9,6 @@ Package.on_use(function (api, where) { // It would be sort of nice if minimongo didn't depend on // underscore, so we could ship it separately. api.use(['underscore', 'json', 'ejson', 'ordereddict'], where); - api.add_files([ 'minimongo.js', 'selector.js', diff --git a/packages/mongo-livedata/mongo_driver.js b/packages/mongo-livedata/mongo_driver.js index 0c13e0a9c6..90a69ea00d 100644 --- a/packages/mongo-livedata/mongo_driver.js +++ b/packages/mongo-livedata/mongo_driver.js @@ -354,8 +354,7 @@ Cursor.prototype.observe = function (callbacks) { Cursor.prototype._observeUnordered = function (callbacks) { var self = this; - return self._mongo._observe( - self._cursorDescription, false, callbacks); + return LocalCollection._observeUnordered(self, callbacks); }; Cursor.prototype.observeChanges = function (callbacks) { diff --git a/packages/ordereddict/ordereddict.js b/packages/ordereddict/ordereddict.js index 769e88672c..e2aa54e8d1 100644 --- a/packages/ordereddict/ordereddict.js +++ b/packages/ordereddict/ordereddict.js @@ -36,6 +36,7 @@ } if (self._first === null || self._first === elt.next) self._first = elt; + self._dict[key] = item; }, remove: function (key) { var self = this;