code: function createPromisable(wrapped) {
  	return function (search, options, callback) {
  		var self = this;
  		var promisified = Promise.promisify(wrapped, { context: self });
  		if (_.isFunction(options)) {
  			callback = options;
  		}
  		if (!_.isFunction(callback)) {
  			return {
  				promise: function () {
  					return promisified(search, options);
  				},
  				send: function (cb) {
  					if (!_.isObject(options)) {
  						options = cb;
  					}
  					wrapped.apply(self, [search, options, cb]);
  				}
  			};
  		} else {
  			wrapped.apply(self, [search, options, callback]);
  		}
  	}
  }
docs: Decorate a method to enable calling `.promise()` on the returned value to get a Promise, when the method
  is initially called without a callback.
  @decorator
  @private