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; |