summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Kirkpatrick <tom@systemseed.com>2016-08-22 11:00:53 +0200
committerTom Kirkpatrick <tom@systemseed.com>2016-08-22 11:00:53 +0200
commitd448ecae0ba4ce60733d4729ada035fddc794410 (patch)
treeca22ada1dccb993bed9bef87cf17117a5af59ccf
parent439e1732a743098fe38b5b8d02b93ca03208b0d7 (diff)
downloadsendgrid-nodejs-d448ecae0ba4ce60733d4729ada035fddc794410.zip
sendgrid-nodejs-d448ecae0ba4ce60733d4729ada035fddc794410.tar.gz
sendgrid-nodejs-d448ecae0ba4ce60733d4729ada035fddc794410.tar.bz2
Make SendGrid a factory that enables multiple prototype instances
-rw-r--r--lib/sendgrid.js79
1 files changed, 42 insertions, 37 deletions
diff --git a/lib/sendgrid.js b/lib/sendgrid.js
index eb58f84..6681d28 100644
--- a/lib/sendgrid.js
+++ b/lib/sendgrid.js
@@ -64,55 +64,60 @@ function makeHeaders(apiKey, globalHeaders) {
* SendGrid allows for quick and easy access to the v3 Web API
*/
function SendGrid(apiKey, host, globalHeaders) {
+ return new SendGridInstance(apiKey, host, globalHeaders);
+}
+/**
+ * SendGrid allows for quick and easy access to the v3 Web API
+ */
+function SendGridInstance(apiKey, host, globalHeaders) {
//Create global request
- var globalRequest = getEmptyRequest({
+ this.globalRequest = getEmptyRequest({
host: host || 'api.sendgrid.com',
headers: makeHeaders(apiKey, globalHeaders),
});
//Initialize new client
- var client = new Client(globalRequest);
+ this.client = new Client(this.globalRequest);
+}
- //Interact with the API with this function
- SendGrid.API = function(request, callback) {
+//Interact with the API with this function
+SendGridInstance.prototype.API = function(request, callback) {
+ var self = this;
- //If no callback provided, we will return a promise
- if (!callback) {
- if (!SendGrid.Promise) {
- throw new SendGridError('Promise API not supported');
- }
- return new SendGrid.Promise(function(resolve, reject) {
- client.API(request, function(response) {
- if (isValidResponse(response)) {
- resolve(response);
- }
- else {
- var error = new SendGridError('Response error');
- error.response = response;
- reject(error);
- }
- });
- });
+ //If no callback provided, we will return a promise
+ if (!callback) {
+ if (!SendGrid.Promise) {
+ throw new SendGridError('Promise API not supported');
}
-
- //Use callback
- client.API(request, function(response) {
- if (isValidResponse(response)) {
- callback(null, response);
- }
- else {
- var error = new SendGridError('Response error');
- callback(error, response);
- }
+ return new SendGrid.Promise(function(resolve, reject) {
+ self.client.API(request, function(response) {
+ if (isValidResponse(response)) {
+ resolve(response);
+ }
+ else {
+ var error = new SendGridError('Response error');
+ error.response = response;
+ reject(error);
+ }
+ });
});
- };
+ }
- //Set requests
- SendGrid.emptyRequest = getEmptyRequest;
- SendGrid.globalRequest = globalRequest;
- return SendGrid;
-}
+ //Use callback
+ self.client.API(request, function(response) {
+ if (isValidResponse(response)) {
+ callback(null, response);
+ }
+ else {
+ var error = new SendGridError('Response error');
+ callback(error, response);
+ }
+ });
+};
+
+//Set requests
+SendGridInstance.prototype.emptyRequest = getEmptyRequest;
//Try to use native promises by default
if (typeof Promise !== 'undefined') {