code: function (method, path, data) {
    var query = {
      format: 'json'
      , auth_token: this.key
    }
  
    // Merge data into query string variables.
    if (method === 'GET' && typeof data === 'object') {
      for (var i in data) query[i] = data[i]
    }
  
    // Build options object.
    var options = {
      host: 'api.hipchat.com'
      , port: 443
      , path: path + '?' + qstring.stringify(query)
      , method: method
      , headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }
  
    // Make sure we set the content length where needed.
    if (method !== 'GET') {
      if (typeof data === 'object' || typeof data === 'string') {
        if (typeof data !== 'string') {
          data = qstring.stringify(data)
        }
        options.headers['Content-Length'] = data.length
      }
    }
  
    var cb = cbMaker(arguments[arguments.length - 1])
  
    // Build request handler.
    var req = https.request(options, function (res) {
      var body = []
      res.setEncoding('utf8')
      res.on('data', body.push.bind(body))
      res.on('end', function () {
        body = body.join('')
        try {
          body = JSON.parse(body)
        } catch (e) {}
  
        if (res.statusCode === 200) {
          cb(null, body)
        } else {
          cb({
            code: res.statusCode
            , message: body
          })
        }
      })
    })
  
    // Handle errors
    req.on('error', cb)
  
    // Send data, if supplied, and we aren't using GET method.
    if (method !== 'GET') {
      if (typeof data === 'object' || typeof data === 'string') {
        if (typeof data !== 'string') {
          data = qstring.stringify(data)
        }
        req.write(data)
      }
    }
  
    // Run request.
    req.end()
  }
docs: *************
  *
  Other    *
  *
  ************* Generic request handler for all API sections.