Created
September 25, 2014 14:26
-
-
Save Janpot/16a0496b55a2614f3757 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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