From 48203263e3dd284926ee37c9caec64e811bf08e4 Mon Sep 17 00:00:00 2001 From: Naomi Seyfer Date: Fri, 21 Dec 2012 14:26:48 -0800 Subject: [PATCH] In the client, now all internal "abstract ddp" uses fieldName: undefined Instead of a cleared list. The wire format still has a cleared list. --- packages/livedata/livedata_connection.js | 23 ++++++++++++++++------- packages/minimongo/minimongo.js | 8 ++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/livedata/livedata_connection.js b/packages/livedata/livedata_connection.js index 2b184c5788..73dc5961cc 100644 --- a/packages/livedata/livedata_connection.js +++ b/packages/livedata/livedata_connection.js @@ -4,6 +4,20 @@ if (Meteor.isServer) { var Future = __meteor_bootstrap__.require(path.join('fibers', 'future')); } +var parseDDP = function (stringMessage) { + var msg = JSON.parse(stringMessage); + //massage msg to get it into "abstract ddp" rather than "wire ddp" format. + if (_.has(msg, 'cleared')) { + if (!_.has(msg, 'fields')) + msg.fields = {}; + _.each(msg.cleared, function (clearKey) { + msg.fields[clearKey] = undefined; + }); + delete msg.cleared; + } + return msg; +}; + // @param url {String|Object} URL to Meteor app, // or an object as a test hook (see code) // Options: @@ -174,7 +188,7 @@ Meteor._LivedataConnection = function (url, options) { self._stream.on('message', function (raw_msg) { try { - var msg = JSON.parse(raw_msg); + var msg = parseDDP(raw_msg); } catch (err) { Meteor._debug("discarding message with invalid JSON", raw_msg); return; @@ -992,12 +1006,7 @@ _.extend(Meteor._LivedataConnection.prototype, { throw new Error("It doesn't make sense to be changing something we don't think exists: " + msg.id); } - _.each(msg.fields, function (value, key) { - serverDoc.document[key] = value; - }); - _.each(msg.cleared, function (clearedKey) { - delete serverDoc.document[clearedKey]; - }); + LocalCollection._applyChanges(serverDoc.document, msg.fields); } else { self._pushUpdate(updates, msg.collection, msg); } diff --git a/packages/minimongo/minimongo.js b/packages/minimongo/minimongo.js index 6677e7819f..3c6942feca 100644 --- a/packages/minimongo/minimongo.js +++ b/packages/minimongo/minimongo.js @@ -29,6 +29,14 @@ LocalCollection = function () { this.paused = false; }; +LocalCollection._applyChanges = function (doc, changeFields) { + _.each(changeFields, function (value, key) { + if (value === undefined) + delete doc[key]; + else + doc[key] = value; + }); +}; // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1}