code: function wrapQueryMethod(method) {
    Druid.prototype[method] = function(query, callback) {
      if (!this.ready) {
        var self = this
          , onready
          , onerror
  
        onready = function() {
          self.removeListener('error', onerror)
          self[method](query, callback)
        }
  
        onerror = function(err) {
          self.removeListener('ready', onready)
          callback(err)
        }
  
        this.once('ready', onready)
        this.once('error', onerror)
  
        return
      }
  
      var ds = query.dataSource()
  
      if (!this.dataSources.hasOwnProperty(ds)) {
        callback(new DruidError('No node serves data source: ' + ds))
      }
      else {
        var node = getLessLoaded(this, ds)
  
        node[method](query, callback)
      }
    }
  }
docs: Create method which has same-named method in {@link Client}. Wrapper does:
  
  1. Checks if Druid instance is ready.
  2. Gets suitable node (using given query).
  3. Passes query & callback to this method