11'use strict' ;
2-
2+ var _ = require ( 'lodash' ) ;
33var transmission = require ( '../transmission' ) ;
44var configuration = require ( '../configuration' ) ;
55
6+ /**
7+ * Sendgrid compatibility constructor
8+ * Responsible for taking the api key and config options and
9+ * translating them into a format compatible with sparkpost's
10+ * configuration.setConfig function.
11+ *
12+ * @param username: dropped sendgrid username string
13+ * @param apiKey: api key string
14+ * @param options: optional additional options object
15+ */
616var sendgrid = function ( username , apiKey , options ) {
717 var configOptions = options ;
818 if ( configOptions === undefined ) {
@@ -14,6 +24,13 @@ var sendgrid = function(username, apiKey, options) {
1424 configuration . setConfig ( configOptions ) ;
1525} ;
1626
27+ /**
28+ * Private Method for translating a user's sendgrid config options
29+ * to a sparkpost compatible set by dropping unnecessary data
30+ *
31+ * @param payload: sendgrid formatted config options object
32+ * @returns object: config options with incompatible entries removed
33+ */
1734var translateConfig = function ( options ) {
1835 var translated = { } ;
1936 if ( options . host !== undefined ) {
@@ -28,21 +45,18 @@ var translateConfig = function(options) {
2845 return translated ;
2946} ;
3047
31- var mergeObjects = function ( obj1 , obj2 ) {
32- var merged = { } ;
33- for ( var key1 in obj1 ) {
34- merged [ key1 ] = obj1 [ key1 ] ;
35- }
36- for ( var key2 in obj2 ) {
37- merged [ key2 ] = obj2 [ key2 ] ;
38- }
39- return merged ;
40- } ;
41-
48+ /**
49+ * Private Method for translating a user's sendgrid substitutions and sections
50+ * to a consolidated sparkpost substitutionData object
51+ *
52+ * @param payload: sendgrid formatted object or sendgrid Email object to
53+ * be translated into a sparkpost payload
54+ * @returns object: substitutionData object as per sparkpost payload format
55+ */
4256var consolidateSubstitutionData = function ( payload ) {
4357 var substitutionData = { } ;
4458 if ( payload . sub !== undefined && payload . section !== undefined ) {
45- substitutionData = mergeObjects ( payload . sub , payload . section ) ;
59+ substitutionData = _ . merge ( payload . sub , payload . section ) ;
4660 } else if ( payload . sub !== undefined ) {
4761 substitutionData = payload . sub ;
4862 } else if ( payload . section !== undefined ) {
@@ -51,6 +65,14 @@ var consolidateSubstitutionData = function(payload) {
5165 return substitutionData ;
5266} ;
5367
68+ /**
69+ * Private Method for translating a user's sendgrid to and toname to a recipients
70+ * array that the transmissions "Class" can understand
71+ *
72+ * @param payload: sendgrid formatted object or sendgrid Email object to
73+ * be translated into a sparkpost payload
74+ * @returns array: recipients array as per sparkpost payload format
75+ */
5476var parseTo = function ( payload ) {
5577 var recipients = [ ] ;
5678 if ( typeof payload . to === 'string' ) {
@@ -70,6 +92,14 @@ var parseTo = function(payload){
7092 return recipients ;
7193} ;
7294
95+ /**
96+ * Private Method for translating a user's sendgrid payload to a format
97+ * that the transmissions "Class" can understand
98+ *
99+ * @param payload: sendgrid formatted object or sendgrid Email object to
100+ * be translated into a sparkpost payload
101+ * @returns object: translation from sendgrid payload to sparkpost payload
102+ */
73103var translatePayload = function ( payload ) {
74104 var sub = consolidateSubstitutionData ( payload )
75105 , input = {
@@ -97,6 +127,14 @@ var translatePayload = function(payload) {
97127 return input ;
98128} ;
99129
130+ /**
131+ * An exposed function of SendGridCompatibility that calls upon
132+ * private helper methods to translate an Email or inline object
133+ * and then pass that content to the transmissions send function.
134+ *
135+ * @param payload: sendgrid formatted object or sendgrid Email object to
136+ * be translated into a sparkpost payload and sent
137+ */
100138sendgrid . prototype . send = function ( payload , callback ) {
101139 var translated = translatePayload ( payload ) ;
102140 transmission . send ( translated , function ( err , res ) {
0 commit comments