text: 'use strict';
  
  /**
   * methods a collection must implement
   */
  
  var methods = [
    'find',
    'findOne',
    'update',
    'updateMany',
    'updateOne',
    'replaceOne',
    'remove',
    'count',
    'distinct',
    'findAndModify',
    'aggregate',
    'findStream',
    'deleteOne',
    'deleteMany'
  ];
  
  /**
   * Collection base class from which implementations inherit
   */
  
  function Collection() {}
  
  for (var i = 0, len = methods.length; i < len; ++i) {
    var method = methods[i];
    Collection.prototype[method] = notImplemented(method);
  }
  
  module.exports = exports = Collection;
  Collection.methods = methods;
  
  /**
   * creates a function which throws an implementation error
   */
  
  function notImplemented(method) {
    return function() {
      throw new Error('collection.' + method + ' not implemented');
    };
  }
  