code: function(removing, adding) {
  
          var removeCnt, addCnt, hasDelta;
  
          if ('number' === typeof removing) removeCnt = removing;
          else if (removing) removeCnt = get(removing, 'length');
          else removeCnt = removing = -1;
  
          if ('number' === typeof adding) addCnt = adding;
          else if (adding) addCnt = get(adding,'length');
          else addCnt = adding = -1;
  
          hasDelta = addCnt<0 || removeCnt<0 || addCnt-removeCnt!==0;
  
          if (removing === -1) removing = null;
          if (adding   === -1) adding   = null;
  
          propertyWillChange(this, '[]');
          if (hasDelta) propertyWillChange(this, 'length');
          sendEvent(this, '@enumerable:before', [this, removing, adding]);
  
          return this;
        }
docs: Invoke this method just before the contents of your enumerable will
  change. You can either omit the parameters completely or pass the objects
  to be removed or added if available or just a count.
  
  @method enumerableContentWillChange
  @param {Ember.Enumerable|Number} removing An enumerable of the objects to
  be removed or the number of items to be removed.
  @param {Ember.Enumerable|Number} adding An enumerable of the objects to be
  added or the number of items to be added.
  @chainable