@@ -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