Commit f9e9bd76 authored by Pedro Henrique de Assis's avatar Pedro Henrique de Assis
Browse files

Exposing the whole request interface

parent 12ba8c18
Loading
Loading
Loading
Loading
+62 −11
Original line number Diff line number Diff line
var Promise = require('bluebird'),
    request = require('request');

function rp(options) {
var statusCodes = {
    'GET' : [200],
    'HEAD' : [200],
@@ -9,6 +8,8 @@ function rp(options) {
    'POST' : [200, 201],
    'DELETE' : [200, 201]
}, c = {simple: true}, i;

function rp(options) {
    if (typeof options === 'string') {
        c.uri = options;
        c.method = 'GET';
@@ -26,7 +27,7 @@ function rp(options) {
            if (error) {
                reject(error);
            } else if (c.simple && (statusCodes[c.method].indexOf(response.statusCode) === -1)) {
                reject(response.statusCode);
                reject(response);
            } else {
                if (c.transform && typeof c.transform === 'function') {
                    resolve(c.transform(body));
@@ -38,6 +39,56 @@ function rp(options) {
    });
}

module.exports = function (a) {
    if (a) return rp(a);
var wrapMethods = [
    'post',
    'put',
    'patch',
    'head',
    'del',
    'get'
];

var methodNameLookup = {
    'post'  : 'POST',
    'put'   : 'PUT',
    'patch' : 'PATCH',
    'head'  : 'HEAD',
    'del'   : 'DELETE',
    'get'   : 'GET'
};

Object.keys(request).filter(function(key){
    return typeof(request[key]) === "function" && !wrapMethods.indexOf(key) +1;
}).forEach(function(key){
    rp[key] = request[key].bind(request);
});

Object.keys(request).filter(function(key){
    return typeof(request[key]) === "function" && wrapMethods.indexOf(key) +1;
}).forEach(function(key){
    rp[key] = function(){
        var args = Array.prototype.slice.call(arguments, 0);
        return new Promise(function (resolve, reject) {
            var method = methodNameLookup[key];
            var params = request.initParams.apply(request, args);
            params.options.method = method;
            request(params, function (error, response, body) {
                if (error) {
                    reject(error);
                } else if (statusCodes[method].indexOf(response.statusCode) === -1) {
                    reject(response);
                } else {
                    if (params.transform && typeof params.transform === 'function') {
                        resolve(params.transform(body));
                    } else {
                        resolve(body);
                    }
                }
            });
        });
    }
});



module.exports = rp;