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
			| 
								 
											3 years ago
										 
									 | 
							
								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;
							 |