code: function(url, method = 'get', body = undefined) {
  		var deferred = Q.defer();
  		let self = this;
  
  		try {
  			let req = undefined;
  
  			// Create request object
  			switch (method.toLowerCase().trim()) {
  				case 'post': {
  					req = request.post(url).send(body);
  					break;
  				}
  				case 'patch': {
  					req = request.patch(url).send(body);
  					break;
  				}
  				case 'put': {
  					req = request.put(url).send(body);
  					break;
  				}
  				case 'delete': {
  					req = request.delete(url);
  					break;
  				}
  				case 'get': {
  					req = request.get(url);
  					break;
  				}
  				default: {
  					throw new Error(`Unsupported HTTP verb: ${method}`);
  				}
  			}
  
  			self.requestCount++;
  
  			// Set standard stuff and handle response
  			req
  				.set('Authorization', 'token ' + config.token)
  				.then(function(res) {
  					self.logRequestSuccess(res);
  					deferred.resolve({
  						body: res.body,
  						headers: res.headers
  					});
  				}, 
  				function(err) {
  					// TODO: handle rate limiting (github sends a 403, not a 429)
  					// https://developer.github.com/v3/#rate-limiting
  					log.error(err);
  					deferred.reject(err);
  				});
  		} catch(err) {
  			log.error(err);
  			deferred.reject(err);
  		}
  
  		return deferred.promise;
  	}
docs: Returns an object with additional information about the request/response