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