Skip to content

Instantly share code, notes, and snippets.

@Janpot
Created September 25, 2014 14:26
Show Gist options
  • Save Janpot/16a0496b55a2614f3757 to your computer and use it in GitHub Desktop.
Save Janpot/16a0496b55a2614f3757 to your computer and use it in GitHub Desktop.
var Promise = require('bluebird'),
_request = require('request'),
extend = require('extend');
function merge(obj1, obj2) {
// the resulting object will have all (deep) properties of obj1 and obj2
// obj2 has precendence over obj1
return extend(true, {}, obj1, obj2);
}
function normalizeOptions(options) {
var optionsObj = null;
if (typeof options === 'string') {
optionsObj = {
uri: options
};
} else {
optionsObj = options;
}
return optionsObj;
}
var jar = _request.jar.bind(_request),
cookie = _request.cookie.bind(_request);
function init(makeRequest) {
function request(options) {
var optionsObj = normalizeOptions(options);
return makeRequest(optionsObj)
.spread(function (res) {
return res;
});
}
function makeMethod(method) {
var methodOptions = { method: method };
return function (options) {
var optionsObj = normalizeOptions(options),
requestOptions = merge(methodOptions, optionsObj);
return request(requestOptions);
}
}
function wrap(middleware) {
var newMakeRequest = function (options) {
return middleware(makeRequest, options);
}
return init(newMakeRequest);
}
function makeDefaults(defaults) {
return wrap(function (makeRequest, options) {
var defaultedOptions = merge(defaults, options);
return makeRequest(defaultedOptions);
});
}
request.get = makeMethod('GET');
request.head = makeMethod('HEAD');
request.put = makeMethod('PUT');
request.post = makeMethod('POST');
request.del = makeMethod('DELETE');
request.patch = makeMethod('PATCH');
request.wrap = wrap;
request.jar = jar;
request.cookie = cookie;
request.defaults = makeDefaults;
return request;
}
module.exports = init(Promise.promisify(_request));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment