Skip to content

Commit 23fdf26

Browse files
authored
Implement promise support (#154)
* added promise support to base object * updated sendingDomains for promise support * updated inboundDomains for promise support * updated messageEvents for promise support * updated recipientLists for promise support * updated relayWebhooks for promise support * updated subaccounts for promise support * updated suppressionList for promise support * updated templates for promise support * updated transmissions for promise support * updated webhooks for promise support * Replaced bluebird with native promise support for PR #154 * removed dependency for bluebird * replaced bluebird on spec tests
1 parent 0564e25 commit 23fdf26

25 files changed

+273
-249
lines changed

.jshintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"node" : true,
33
"es3" : false,
4+
"esnext" : true,
45
"strict" : true,
56
"curly" : true,
67
"eqeqeq" : true,

lib/Promise.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict';
2+
3+
/**
4+
* asCallback method mimics bluebird and allows
5+
* promise object to handle an optional nodeback
6+
*
7+
* @param cb {Function}
8+
* @return Promise
9+
*
10+
* @example
11+
* function eitherOr(options, callback) {
12+
* return promiseThingy(options).asCallback(callback);
13+
* }
14+
*/
15+
Promise.prototype.asCallback = function(cb) {
16+
if (typeof cb !== 'function') {
17+
cb = noop;
18+
}
19+
20+
return this.then((result) => {
21+
cb(null, result);
22+
return this;
23+
}).catch((err) => {
24+
cb(err);
25+
return this;
26+
});
27+
};
28+
29+
function noop() {}
30+
31+
module.exports = Promise;

lib/inboundDomains.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
'use strict';
22

3-
var api = 'inbound-domains';
3+
var api = 'inbound-domains'
4+
/* global -Promise */
5+
, Promise = require('./Promise');
46

57
module.exports = function(client) {
68
var inboundDomains = {
79
all: function(callback) {
810
var options = {
911
uri: api
1012
};
11-
client.get(options, callback);
13+
return client.get(options).asCallback(callback);
1214
},
1315
find: function(domain, callback) {
1416
if(typeof domain === 'function') {
@@ -17,14 +19,13 @@ module.exports = function(client) {
1719
}
1820

1921
if(!domain) {
20-
callback(new Error('domain is required'));
21-
return;
22+
return Promise.reject(new Error('domain is required')).asCallback(callback);
2223
}
2324

2425
var options = {
2526
uri: api + '/' + domain
2627
};
27-
client.get(options, callback);
28+
return client.get(options).asCallback(callback);
2829
},
2930
create: function(domain, callback) {
3031
if(typeof domain === 'function') {
@@ -33,8 +34,7 @@ module.exports = function(client) {
3334
}
3435

3536
if(!domain) {
36-
callback(new Error('domain is required'));
37-
return;
37+
return Promise.reject(new Error('domain is required')).asCallback(callback);
3838
}
3939

4040
var options = {
@@ -43,7 +43,7 @@ module.exports = function(client) {
4343
domain: domain
4444
}
4545
};
46-
client.post(options, callback);
46+
return client.post(options, callback).asCallback(callback);
4747
},
4848
delete: function(domain, callback) {
4949
if (typeof domain === 'function') {
@@ -52,14 +52,13 @@ module.exports = function(client) {
5252
}
5353

5454
if (!domain) {
55-
callback(new Error('domain is required'));
56-
return;
55+
return Promise.reject(new Error('domain is required')).asCallback(callback);
5756
}
5857

5958
var options = {
6059
uri: api + '/' + domain
6160
};
62-
client.delete(options, callback);
61+
return client.delete(options).asCallback(callback);
6362
}
6463
};
6564

lib/messageEvents.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ module.exports = function (client) {
3131
uri: api
3232
, qs: parameters
3333
};
34-
client.get(options, callback);
34+
return client.get(options).asCallback(callback);
3535
}
3636
};
3737
};

lib/recipientLists.js

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'use strict';
22

33
var api = 'recipient-lists'
4+
/* global -Promise */
5+
, Promise = require('./Promise')
46
, toApiFormat = require('./toApiFormat');
57

68
module.exports = function(client) {
@@ -9,14 +11,13 @@ module.exports = function(client) {
911
var reqOpts = {
1012
uri: api
1113
};
12-
client.get(reqOpts, callback);
14+
return client.get(reqOpts).asCallback(callback);
1315
},
1416
find: function(options, callback) {
1517
options = options || {};
1618

1719
if(!options.id) {
18-
callback(new Error('id is required'));
19-
return;
20+
return Promise.reject(new Error('id is required')).asCallback(callback);
2021
}
2122

2223
var reqOpts = {
@@ -28,14 +29,13 @@ module.exports = function(client) {
2829
reqOpts.qs.show_recipients = options.show_recipients;
2930
}
3031

31-
client.get(reqOpts, callback);
32+
return client.get(reqOpts).asCallback(callback);
3233
},
3334
create: function(options, callback) {
3435
options = options || {};
3536

3637
if(!options.recipients) {
37-
callback(new Error('recipients list is required'));
38-
return;
38+
return Promise.reject(new Error('recipients list is required')).asCallback(callback);
3939
}
4040

4141
var reqOpts = {
@@ -50,14 +50,13 @@ module.exports = function(client) {
5050

5151
reqOpts.json = toApiFormat(options);
5252

53-
client.post(reqOpts, callback);
53+
return client.post(reqOpts).asCallback(callback);
5454
},
5555
update: function(options, callback) {
5656
options = options || {};
5757

5858
if(!options.id) {
59-
callback(new Error('recipients list id is required'));
60-
return;
59+
return Promise.reject(new Error('recipients list id is required')).asCallback(callback);
6160
}
6261

6362
var reqOpts = {
@@ -72,25 +71,23 @@ module.exports = function(client) {
7271

7372
reqOpts.json = toApiFormat(options);
7473

75-
client.put(reqOpts, callback);
76-
}
77-
};
74+
return client.put(reqOpts, callback).asCallback(callback);
75+
},
76+
delete: function(id, callback) {
77+
if (typeof id === 'function') {
78+
callback = id;
79+
id = null;
80+
}
7881

79-
recipientLists['delete'] = function(id, callback) {
80-
if (typeof id === 'function') {
81-
callback = id;
82-
id = null;
83-
}
82+
if (!id) {
83+
return Promise.reject(new Error('id is required')).asCallback(callback);
84+
}
8485

85-
if (!id) {
86-
callback(new Error('id is required'));
87-
return;
86+
var reqOpts = {
87+
uri: api + '/' + id
88+
};
89+
return client.delete(reqOpts).asCallback(callback);
8890
}
89-
90-
var reqOpts = {
91-
uri: api + '/' + id
92-
};
93-
client['delete'](reqOpts, callback);
9491
};
9592

9693
return recipientLists;

lib/relayWebhooks.js

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'use strict';
22

3-
var api = 'relay-webhooks';
3+
var api = 'relay-webhooks'
4+
/* global -Promise */
5+
, Promise = require('./Promise');
46

57
var toApiFormat = function(input) {
68
var model = {
@@ -23,7 +25,7 @@ module.exports = function(client) {
2325
var reqOpts = {
2426
uri: api
2527
};
26-
client.get(reqOpts, callback);
28+
return client.get(reqOpts).asCallback(callback);
2729
},
2830
find: function(relayWebhookId, callback) {
2931
if(typeof relayWebhookId === 'function') {
@@ -32,14 +34,13 @@ module.exports = function(client) {
3234
}
3335

3436
if(!relayWebhookId) {
35-
callback(new Error('relayWebhookId is required'));
36-
return;
37+
return Promise.reject(new Error('relayWebhookId is required')).asCallback(callback);
3738
}
3839

3940
var options = {
4041
uri: api + '/' + relayWebhookId
4142
};
42-
client.get(options, callback);
43+
return client.get(options).asCallback(callback);
4344
},
4445
create: function(options, callback) {
4546
if(typeof options === 'function') {
@@ -48,25 +49,22 @@ module.exports = function(client) {
4849
}
4950

5051
if(!options) {
51-
callback(new Error('options are required'));
52-
return;
52+
return Promise.reject(new Error('options are required')).asCallback(callback);
5353
}
5454

5555
if(!options.target) {
56-
callback(new Error('target is required in options'));
57-
return;
56+
return Promise.reject(new Error('target is required in options')).asCallback(callback);
5857
}
5958

6059
if(!options.domain) {
61-
callback(new Error('domain is required in options'));
62-
return;
60+
return Promise.reject(new Error('domain is required in options')).asCallback(callback);
6361
}
6462

6563
var reqOpts = {
6664
uri: api
6765
, json: toApiFormat(options)
6866
};
69-
client.post(reqOpts, callback);
67+
return client.post(reqOpts).asCallback(callback);
7068
},
7169
update: function(options, callback) {
7270
if(typeof options === 'function') {
@@ -75,21 +73,19 @@ module.exports = function(client) {
7573
}
7674

7775
if(!options) {
78-
callback(new Error('options are required'));
79-
return;
76+
return Promise.reject(new Error('options are required')).asCallback(callback);
8077
}
8178

8279
if(!options.relayWebhookId) {
83-
callback(new Error('relayWebhookId is required in options'));
84-
return;
80+
return Promise.reject(new Error('relayWebhookId is required in options')).asCallback(callback);
8581
}
8682

8783
var relayWebhookId = options.relayWebhookId;
8884
var reqOpts = {
8985
uri: api + '/' + relayWebhookId
9086
, json: toApiFormat(options)
9187
};
92-
client.put(reqOpts, callback);
88+
return client.put(reqOpts).asCallback(callback);
9389
},
9490
delete: function(relayWebhookId, callback) {
9591
if (typeof relayWebhookId === 'function') {
@@ -98,15 +94,14 @@ module.exports = function(client) {
9894
}
9995

10096
if (!relayWebhookId) {
101-
callback(new Error('relayWebhookId is required'));
102-
return;
97+
return Promise.reject(new Error('relayWebhookId is required')).asCallback(callback);
10398
}
10499

105100
var options = {
106101
uri: api + '/' + relayWebhookId
107102
};
108103

109-
client.delete(options, callback);
104+
client.delete(options, callback).asCallback(callback);
110105
}
111106
};
112107

0 commit comments

Comments
 (0)