You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							98 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							98 lines
						
					
					
						
							2.9 KiB
						
					
					
				var _ = require('underscore');
 | 
						|
 | 
						|
/**
 | 
						|
 Every REST client call (get, put, post, delete[, create, update]) shares this common signature.
 | 
						|
 This function returns an object which groks this signature from an arguments array:
 | 
						|
 | 
						|
 get({
 | 
						|
		Some:'parameter'
 | 
						|
	}, function(err, data, response) {
 | 
						|
		console.log(err); //The error object from "request" module
 | 
						|
		console.log(data); //The JSON-parsed response from Twilio
 | 
						|
		console.log(response); //The node http.ClientResponse object from "request"
 | 
						|
	});
 | 
						|
 | 
						|
 - or -
 | 
						|
 | 
						|
 get({
 | 
						|
		Some:'parameter'
 | 
						|
	});
 | 
						|
 | 
						|
 - or -
 | 
						|
 | 
						|
 get(function(err, data) {
 | 
						|
 | 
						|
	});
 | 
						|
 */
 | 
						|
function process(args) {
 | 
						|
    var params = (typeof args[0] !== 'function') ? args[0] : {},
 | 
						|
        twilioParams = {},
 | 
						|
        callback = (typeof args[0] === 'function') ? args[0] : args[1];
 | 
						|
 | 
						|
    //"Twilify" any request parameters
 | 
						|
    for (var key in params) {
 | 
						|
        if (params.hasOwnProperty(key)) {
 | 
						|
            //assume first letter in variable name needs uppercasing, otherwise assume fine
 | 
						|
            var twilioKey = key.charAt(0).toUpperCase() + key.slice(1);
 | 
						|
            twilioParams[twilioKey] = params[key];
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return {
 | 
						|
        twilioParams:twilioParams,
 | 
						|
        callback:callback
 | 
						|
    };
 | 
						|
};
 | 
						|
 | 
						|
//Generate a Twilio HTTP client call
 | 
						|
var generate = function (client, method, url) {
 | 
						|
    return function () {
 | 
						|
        var args = process(arguments),
 | 
						|
            requestArgs = {
 | 
						|
                url:url,
 | 
						|
                method:method
 | 
						|
            };
 | 
						|
 | 
						|
        //Send parameters, if supplied
 | 
						|
        if (args.twilioParams && method === 'GET') {
 | 
						|
            requestArgs.qs = args.twilioParams;
 | 
						|
        } else if (args.twilioParams) {
 | 
						|
            requestArgs.form = args.twilioParams;
 | 
						|
        }
 | 
						|
 | 
						|
        //make request
 | 
						|
        return client.request(requestArgs, args.callback);
 | 
						|
    };
 | 
						|
};
 | 
						|
 | 
						|
//generate several rest functions on a given object
 | 
						|
generate.restFunctions = function (object, client, methods, resource) {
 | 
						|
    for (var i = 0, l = methods.length; i < l; i++) {
 | 
						|
        var method = methods[i];
 | 
						|
 | 
						|
        //can be either a string indicating an HTTP method to generate,
 | 
						|
        //or an object mapping a function name to an HTTP verb
 | 
						|
        if (typeof method === 'string') {
 | 
						|
            if (method === 'GET') {
 | 
						|
                object.get = object.list = generate(client, method, resource);
 | 
						|
            } else if (method === 'POST') {
 | 
						|
                object.post = generate(client, method, resource);
 | 
						|
            } else if (method === 'PUT') {
 | 
						|
                object.put = generate(client, method, resource);
 | 
						|
            } else if (method === 'DELETE') {
 | 
						|
                object.delete = generate(client, method, resource);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            //Create an alias for the given method name to a REST function
 | 
						|
            for (var key in method) {
 | 
						|
            	// fixed issue for null Properties.
 | 
						|
                if(method.hasOwnProperty(key))
 | 
						|
                    object[key] = object[method[key].toLowerCase()];
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
module.exports = generate;
 |