sendgrid_webapi 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +4 -0
  5. data/README.rdoc +389 -0
  6. data/Rakefile +5 -0
  7. data/lib/base.rb +41 -0
  8. data/lib/helper.rb +36 -0
  9. data/lib/middlewares/sendgrid_response.rb +42 -0
  10. data/lib/sendgrid_webapi.rb +5 -0
  11. data/lib/sub_user/apps.rb +31 -0
  12. data/lib/sub_user/auth.rb +10 -0
  13. data/lib/sub_user/bounces.rb +15 -0
  14. data/lib/sub_user/event_notification.rb +20 -0
  15. data/lib/sub_user/iframe.rb +8 -0
  16. data/lib/sub_user/invalid_emails.rb +15 -0
  17. data/lib/sub_user/ip_management.rb +23 -0
  18. data/lib/sub_user/limits.rb +35 -0
  19. data/lib/sub_user/management.rb +57 -0
  20. data/lib/sub_user/modules.rb +68 -0
  21. data/lib/sub_user/monitor_records.rb +35 -0
  22. data/lib/sub_user/parse.rb +20 -0
  23. data/lib/sub_user/spam.rb +15 -0
  24. data/lib/sub_user/stats.rb +8 -0
  25. data/lib/sub_user/unsubscribes.rb +21 -0
  26. data/lib/sub_user/white_label.rb +16 -0
  27. data/lib/subuser_client.rb +11 -0
  28. data/lib/web_api/blocks.rb +13 -0
  29. data/lib/web_api/bounces.rb +13 -0
  30. data/lib/web_api/event_notification.rb +18 -0
  31. data/lib/web_api/invalid_emails.rb +13 -0
  32. data/lib/web_api/mail.rb +8 -0
  33. data/lib/web_api/modules.rb +50 -0
  34. data/lib/web_api/parse.rb +18 -0
  35. data/lib/web_api/profile.rb +29 -0
  36. data/lib/web_api/spam.rb +13 -0
  37. data/lib/web_api/stats.rb +8 -0
  38. data/lib/web_api/unsubscribes.rb +18 -0
  39. data/lib/web_api/version.rb +3 -0
  40. data/lib/webapi_client.rb +12 -0
  41. data/sendgrid_webapi.gemspec +27 -0
  42. data/spec/cassettes/client/_modules/_block/should_get_block_emails.yml +48 -0
  43. data/spec/cassettes/client/_modules/_block/should_try_delete_not_existing_block_email.yml +49 -0
  44. data/spec/cassettes/client/_modules/_bounce/should_get_bounce_emails.yml +40 -0
  45. data/spec/cassettes/client/_modules/_bounce/should_try_delete_not_existing_bounce_email.yml +41 -0
  46. data/spec/cassettes/client/_modules/_event_notification/should_delete_event_notification_url.yml +49 -0
  47. data/spec/cassettes/client/_modules/_event_notification/should_get_event_notification_url.yml +49 -0
  48. data/spec/cassettes/client/_modules/_event_notification/should_set_event_notification_url.yml +49 -0
  49. data/spec/cassettes/client/_modules/_invalid_email/should_get_invalid_emails.yml +40 -0
  50. data/spec/cassettes/client/_modules/_invalid_email/should_try_delete_not_existing_invalid_emails.yml +41 -0
  51. data/spec/cassettes/client/_modules/_parse_email/should_delete_parse_email.yml +94 -0
  52. data/spec/cassettes/client/_modules/_parse_email/should_get_parse_email.yml +50 -0
  53. data/spec/cassettes/client/_modules/_parse_email/should_set_parse_email.yml +49 -0
  54. data/spec/cassettes/client/_modules/_profile/should_get_profile.yml +52 -0
  55. data/spec/cassettes/client/_modules/_profile/should_set_first_name.yml +144 -0
  56. data/spec/cassettes/client/_modules/_spam/should_get_spam_emails.yml +40 -0
  57. data/spec/cassettes/client/_modules/_spam/should_try_delete_not_existing_spam_emails.yml +41 -0
  58. data/spec/cassettes/client/_modules/_unsubscribe/should_add_unsubscribe_emails.yml +40 -0
  59. data/spec/cassettes/client/_modules/_unsubscribe/should_delete_unsubscribe_email.yml +40 -0
  60. data/spec/cassettes/client/_modules/_unsubscribe/should_get_unsubscribe_emails.yml +41 -0
  61. data/spec/cassettes/client/_modules/_unsubscribe/should_try_delete_not_existing_unsubscribe_emails.yml +41 -0
  62. data/spec/cassettes/helper/_create_sub_user_account/should_create_sub_user_account.yml +318 -0
  63. data/spec/cassettes/helper/_run_sendgrid_query/should_raise_with_unsucessfull_request.yml +46 -0
  64. data/spec/cassettes/helper/_run_sendgrid_query/should_run_sendgrid_request.yml +49 -0
  65. data/spec/cassettes/sub_user/_apps/should_activate_app.yml +49 -0
  66. data/spec/cassettes/sub_user/_apps/should_deactivate_app.yml +49 -0
  67. data/spec/cassettes/sub_user/_apps/should_get_current_setting_from_one_app.yml +50 -0
  68. data/spec/cassettes/sub_user/_apps/should_return_available_apps.yml +64 -0
  69. data/spec/cassettes/sub_user/_apps/should_set_current_app.yml +90 -0
  70. data/spec/cassettes/sub_user/_authentication/should_auth_a_sub_user.yml +49 -0
  71. data/spec/cassettes/sub_user/_authentication/should_return_error_with_a_bad_sub_user.yml +49 -0
  72. data/spec/cassettes/sub_user/_bounces/should_returns_bounce_emails.yml +48 -0
  73. data/spec/cassettes/sub_user/_bounces/should_tries_to_delete_unexisting_bounce_emails.yml +49 -0
  74. data/spec/cassettes/sub_user/_event_notification/should_add_event_notification_url.yml +49 -0
  75. data/spec/cassettes/sub_user/_event_notification/should_delete_event_notification_url.yml +49 -0
  76. data/spec/cassettes/sub_user/_event_notification/should_get_event_notification_url.yml +49 -0
  77. data/spec/cassettes/sub_user/_invalid_emails/should_return_invalid_emails.yml +48 -0
  78. data/spec/cassettes/sub_user/_invalid_emails/should_tries_to_delete_unexisting_invalid_mail.yml +49 -0
  79. data/spec/cassettes/sub_user/_ip_management/should_return_all_ips_available.yml +49 -0
  80. data/spec/cassettes/sub_user/_ip_management/should_show_ip_subuser.yml +49 -0
  81. data/spec/cassettes/sub_user/_limits/should_decrements_credits_for_a_sub_user.yml +95 -0
  82. data/spec/cassettes/sub_user/_limits/should_delete_all_limits_for_a_sub_user.yml +94 -0
  83. data/spec/cassettes/sub_user/_limits/should_increments_credits_for_a_sub_user.yml +95 -0
  84. data/spec/cassettes/sub_user/_limits/should_list_the_limits_for_a_sub_user.yml +49 -0
  85. data/spec/cassettes/sub_user/_limits/should_reset_all_limits_for_a_sub_user.yml +95 -0
  86. data/spec/cassettes/sub_user/_limits/should_returns_limits_for_a_sub_user.yml +49 -0
  87. data/spec/cassettes/sub_user/_limits/should_set_total_credits.yml +49 -0
  88. data/spec/cassettes/sub_user/_management/should_add_new_subuser.yml +49 -0
  89. data/spec/cassettes/sub_user/_management/should_disable_sub_user_for_send_email.yml +49 -0
  90. data/spec/cassettes/sub_user/_management/should_enable_sub_user_for_access_to_website.yml +49 -0
  91. data/spec/cassettes/sub_user/_management/should_enable_sub_user_for_send_email.yml +49 -0
  92. data/spec/cassettes/sub_user/_management/should_get_all_subusers.yml +54 -0
  93. data/spec/cassettes/sub_user/_management/should_update_sub_user.yml +49 -0
  94. data/spec/cassettes/sub_user/_monitor_records/should_add_existing_sub_user_to_monitor_record.yml +96 -0
  95. data/spec/cassettes/sub_user/_monitor_records/should_create_a_new_monitor_record.yml +96 -0
  96. data/spec/cassettes/sub_user/_monitor_records/should_delete_a_monitor_record.yml +94 -0
  97. data/spec/cassettes/sub_user/_monitor_records/should_edit_a_monitor_record.yml +96 -0
  98. data/spec/cassettes/sub_user/_monitor_records/should_remove_existing_sub_user_from_monitor_record.yml +96 -0
  99. data/spec/cassettes/sub_user/_parse_email/should_delete_parse_email.yml +94 -0
  100. data/spec/cassettes/sub_user/_parse_email/should_get_parse_email.yml +50 -0
  101. data/spec/cassettes/sub_user/_parse_email/should_set_parse_email.yml +49 -0
  102. data/spec/cassettes/sub_user/_spam/should_return_spam_mails.yml +48 -0
  103. data/spec/cassettes/sub_user/_spam/should_tries_to_delete_unexisting_spam_mail.yml +49 -0
  104. data/spec/cassettes/sub_user/_unsubscribes/should_add_bounce_email.yml +49 -0
  105. data/spec/cassettes/sub_user/_unsubscribes/should_delete_existing_bounce_email.yml +49 -0
  106. data/spec/cassettes/sub_user/_unsubscribes/should_delete_unexisting_bounce_email.yml +49 -0
  107. data/spec/cassettes/sub_user/_unsubscribes/should_returns_bounce_emails.yml +49 -0
  108. data/spec/client_spec.rb +132 -0
  109. data/spec/helper_spec.rb +47 -0
  110. data/spec/spec_helper.rb +13 -0
  111. data/spec/sub_user_spec.rb +270 -0
  112. metadata +290 -0
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ .rvmrc
4
+ Gemfile.lock
5
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format nested
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - 1.9.2
4
+
5
+ script: rake spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in send_grid.gemspec
4
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,389 @@
1
+ = SendGrid WEB API gem for Rails 3 {<img src="https://secure.travis-ci.org/kylejginavan/sendgrid_webapi.png"/>}[http://travis-ci.org/kylejginavan/sendgrid_webapi]
2
+
3
+ SendGrid WEB API gem allow you to retrieve information such as statistics, bounces, spam reports, unsubscribes, send email and other information.
4
+
5
+ == Rails 3 configuration
6
+
7
+ In your Gemfile:
8
+
9
+ gem 'sendgrid_webapi'
10
+
11
+ == Usage examples
12
+
13
+ === Creating client object:
14
+
15
+ client = SendGridWebApi::Client.new("user_name", "password")
16
+
17
+ == Modules
18
+
19
+ === Bounces
20
+ This module allows you to retrieve and delete email addresses that have bounced from emails that you've delivered.
21
+
22
+ client.bounces.get(options)
23
+
24
+ client.bounces.delete(:email => "email@example.com", :foor => "bar")
25
+
26
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapibounces
27
+
28
+ === Blocks
29
+ This module allows you to retrieve and delete email addresses that were blocked by their ISP. These emails are not suppressed and are just for information.
30
+
31
+ client.blocks.get(options)
32
+
33
+ client.blocks.delete(:email => "email@example.com", :foor => "bar")
34
+
35
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapiblocks
36
+
37
+ === Invalid Email
38
+ This module allows you to retrieve and delete email addresses that you've sent to that are invalid email addresses.
39
+
40
+ client.invalid_emails.get(options)
41
+
42
+ client.invalid_emails.delete(:email => "email@example.com", :foor => "bar")
43
+
44
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapiinvalidemails
45
+
46
+ === Spam Report
47
+ This module allows you to retrieve and delete email addresses that have marked your emails as SPAM.
48
+
49
+ client.spam.get(options)
50
+
51
+ client.spam.delete(:email => "email@example.com", :foor => "bar")
52
+
53
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapispamreports
54
+
55
+ === Unsubscribes
56
+ This module allows you to add, retrieve and delete email addresses that were unsubscribed from your emails.
57
+
58
+ client.unsubscribes.add(:email => "email@example.com", :foor => "bar")
59
+
60
+ client.unsubscribes.get(options)
61
+
62
+ client.unsubscribes.delete(:email => "email@example.com", :foor => "bar")
63
+
64
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapiunsubscribes
65
+
66
+ === Parse Email
67
+ This module allows you to add, edit, or delete your email parse settings.
68
+
69
+ client.parse_emails.add(:hostname => "www.example.com", :url => "www.domain.com/parse.php", :spam_check => 1)
70
+
71
+ client.parse_emails.get(options)
72
+
73
+ client.parse_emails.delete(:hostname => "www.example.com")
74
+
75
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapiparse
76
+
77
+ === Event Notification URL
78
+ This module allows you to add, edit, or delete an event notification URL for your account.
79
+
80
+ client.event_notification.set(:url => "http://www.yourposturlhere.com")
81
+
82
+ client.event_notification.get(options)
83
+
84
+ client.event_notification.delete(options)
85
+
86
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/event-notification-url
87
+
88
+
89
+ === Stats
90
+ This module allows you to retrieve statistical data on a range of metrics including requests, bounces, spam reports, categories, and others.
91
+
92
+ client.stats.get(options)
93
+
94
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/event-notification-url
95
+
96
+ === Profile
97
+ This module allows you to retrieve and update your profile information such as credentials and email address.
98
+
99
+ client.profile.get(options)
100
+
101
+ client.profile.set(options)
102
+
103
+ client.profile.set_password(:password => "foo", :confirm_password => "foo")
104
+
105
+ client.profile.set_username(:username => "yournewusername@domain.com")
106
+
107
+ client.profile.set_email(:email => "yournewusername@domain.com")
108
+
109
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/webapiprofile
110
+
111
+
112
+ === Mail
113
+ This module allows you to send email.
114
+
115
+ client.mail.send(:to => "test@test.com", :subject => "test", :text => "some body", :from => "test@example.com")
116
+
117
+ * options are available here: http://docs.sendgrid.com/documentation/api/web-api/mail/
118
+
119
+ == SubUser
120
+
121
+ === Creating client object:
122
+
123
+ client = SendGridWebApi::Client.new("user_name", "password")
124
+
125
+ client.sub_user
126
+
127
+
128
+ == Modules
129
+
130
+ === Management SubUsers
131
+ Retrieve/Create/Enable/Disable your subusers. Change a subuser email address and username.
132
+
133
+ Create a sub_user
134
+
135
+ client.sub_user.management.add(:username => "sub_user", :website => "example.com", :password => "somepass", :confirm_password => "somepass", :first_name => "homero", :last_name => "simpson", :address => "555 anystreet", :city => "any city",:state => "CA", :zip => "91234", :email => "sub_user@example.com", :country => "US", :phone => "555-555")
136
+
137
+ Get sub_users list
138
+
139
+ client.sub_user.management.get
140
+
141
+ This prevents them from sending out emails with SendGrid
142
+
143
+ client.sub_user.management.disable(:user => "sub_user")
144
+
145
+ Enable a subuser so they may start sending out emails again. This call will not enable website access
146
+
147
+ client.sub_user.management.enable(:user => "sub_user")
148
+
149
+ Allow a subuser to login to the SendGrid.com website
150
+
151
+ client.sub_user.management.website_enable(:user => "sub_user")
152
+
153
+ Disable a subuser to login to the SendGrid.com website
154
+
155
+ client.sub_user.management.website_disable(:user => "sub_user")
156
+
157
+ Allows you to update your subusers profile information
158
+
159
+ client.sub_user.management.update(:user => "sub_user", :first_name => "change_named")
160
+
161
+ client.sub_user.management.update_password(:user => "sub_user", :password => "somepassword", :confirm_password => "somepassword")
162
+
163
+ client.sub_user.management.update_username(:user => "sub_user", :username => "newusername")
164
+
165
+ client.sub_user.management.update_email(:user => "sub_user", :email => "newemail")
166
+
167
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/subusers/
168
+
169
+ === Bounces
170
+ This module allows you to manage bounce records of your subusers.
171
+
172
+ client.sub_user.bounces.get(:user => "sub_user")
173
+
174
+ client.sub_user.bounces.delete(:user => "sub_user", :email => "email@example.com")
175
+
176
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-subuser-api-v1/email-list-management/subuser-bounces/
177
+
178
+ === Invalid Email
179
+ This module allows you to manage invalid emails of your subusers.
180
+
181
+ client.sub_user.invalid_emails.get(:user => "sub_user")
182
+
183
+ client.sub_user.invalid_emails.delete(:user => "sub_user", :email => "email@example.com")
184
+
185
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/subuser-invalid-emails/
186
+
187
+ === Spam Report
188
+ This module allows you to manage spam reports of your subusers.
189
+
190
+ client.sub_user.spam.get(:user => "sub_user")
191
+
192
+ client.sub_user.spam.delete(:user => "sub_user", :email => "email@example.com")
193
+
194
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-subuser-api-v1/email-list-management/subuser-spam-reports/
195
+
196
+ === Unsubscribes
197
+ This module allows you to manage unsubscribes of your subusers.
198
+
199
+ client.sub_user.unsubscribes.add(:user => "sub_user", :email => "email@example.com")
200
+
201
+ client.sub_user.unsubscribes.get(:user => "sub_user")
202
+
203
+ client.sub_user.unsubscribes.delete(:user => "sub_user", :email => "email@example.com")
204
+
205
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-subuser-api-v1/email-list-management/subusers-unsubscribes/
206
+
207
+ === Parse Email
208
+ This module allows you to setup subusers parse settings
209
+
210
+ client.sub_user.parse_emails.add(:user => "sub_user", :hostname => "www.example.com", :url => "www.domain.com/parse.php", :spam_check => 1)
211
+
212
+ client.sub_user.parse_emails.get(:user => "sub_user")
213
+
214
+ client.sub_user.parse_emails.delete(:user => "sub_user", :hostname => "www.example.com")
215
+
216
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/parse-settings/
217
+
218
+ === Event Notification URL
219
+ This module allows you to manage subusers event notification url.
220
+
221
+ client.sub_user.event_notification.set(:user => "sub_user", :url => "http://www.yourposturlhere.com")
222
+
223
+ client.sub_user.event_notification.get(:user => "sub_user")
224
+
225
+ client.sub_user.event_notification.delete(:user => "sub_user", :url => "http://www.yourposturlhere.com")
226
+
227
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/event-notification-url/
228
+
229
+
230
+ === Stats
231
+ This module allows you to see statistics regarding your subusers.
232
+
233
+ client.sub_user.stats.get(:user => "sub_user")
234
+
235
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/statistics/
236
+
237
+ === Limits
238
+ This module allows you to manage the rate of emails your subusers are able to send
239
+
240
+ client.sub_user.limits.get(:user => "sub_user")
241
+
242
+ client.sub_user.limits.set_credits(:user => "sub_user", :credits=> "200", :period=> "daily")
243
+
244
+ client.sub_user.limits.reset(:user => "sub_user", :credits=> "400", :period=> "daily")
245
+
246
+ client.sub_user.limits.increment_credits(:user => "sub_user", :credits=> "400")
247
+
248
+ client.sub_user.limits.decrement_credits(:user => "sub_user", :credits=> "400")
249
+
250
+ To remove all limits from your sub_user
251
+
252
+ client.sub_user.limits.delete(:user => "sub_user")
253
+
254
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/account-limits/
255
+
256
+
257
+ === Monitor Records
258
+ Make sure your subusers arent sending out spam by getting a sample of their outgoing messages
259
+
260
+ client.sub_user.monitor_records.create(:name => "testmonitor", :frequency => 10000, :email => "test@test.com")
261
+
262
+ client.sub_user.monitor_records.edit(:name => "testmonitor", :new_frequency => 10)
263
+
264
+ client.sub_user.monitor_records.add_user(:user => "sub_user", :name => "testmonitor")
265
+
266
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/monitor-records/
267
+
268
+ === IP Management
269
+ List all IP addresses you have under your account and retrieve details about them
270
+
271
+ To obtain a complete list of all IP's and which are free, taken or available. See params in the link
272
+
273
+ client.sub_user.ip_management.get(:user => "sub_user")
274
+
275
+ To get the ip that is using your sub_user
276
+
277
+ client.sub_user.ip_management.usage_ip(:user => "sub_user")
278
+
279
+ To assign one ip to your sub_user
280
+
281
+ client.sub_user.ip_management.assign_ip(:user => "sub_user", :ip => ["IP1", "IP2"])
282
+
283
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/ip-management/
284
+
285
+ === WhiteLabel
286
+ Manage whitelabel settings for your subusers
287
+
288
+ To retrieve a list of all whitelabel domains
289
+
290
+ client.sub_user.whitelabel.get(:user => "sub_user")
291
+
292
+ To set a subusers whitelabel domain
293
+
294
+ client.sub_user.whitelabel.add(:user => "sub_user", :mail_domain => "email.sendgrid.com")
295
+
296
+
297
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/whitelabel/
298
+
299
+
300
+ === IFrame
301
+ Allow users to manage your subusers via iframe using our site
302
+
303
+ client.sub_user.iframe.get(:user => "sub_user")
304
+
305
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/automatic-login/
306
+
307
+
308
+ === Parse Email
309
+ This module allows you to setup subusers parse settings.
310
+
311
+ client.sub_user.parse_emails.add(:user => "sub_user", :hostname => "www.example.com", :url => "www.domain.com/parse.php", :spam_check => 1)
312
+
313
+ client.sub_user.parse_emails.get(:user => "sub_user")
314
+
315
+ client.sub_user.parse_emails.delete(:user => "sub_user", :hostname => "www.example.com")
316
+
317
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/parse-settings/
318
+
319
+
320
+ === Authentication
321
+ This module allows you to check subusers password to see if its valid.
322
+
323
+ client.sub_user.auth.login(:user => "sub_user", :password => "somepass").
324
+
325
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/authenticate-a-subuser/
326
+
327
+
328
+ === Apps
329
+ This module allows you to setup subusers app settings.
330
+
331
+ client.sub_user.apps.list(:user => "sub_user")
332
+
333
+ client.sub_user.apps.activate(:user => "sub_user", :name => "opentrack")
334
+
335
+ client.sub_user.apps.deactivate(:user => "sub_user", :name => "opentrack")
336
+
337
+ client.sub_user.apps.current_settings(:user => "sub_user", :name => "eventnotify")
338
+
339
+ client.sub_user.apps.customize(:user => "sub_user", :name => "eventnotify", :processed => "0", :dropped => "1", :deferred => "1", :delivered => "0", :bounce => "1", :click => "1", :open => "1", :unsubscribe => "1", :spamreport => "1", :url => "http://someurl.com/listener"))
340
+
341
+ * options are available here: http://docs.sendgrid.com/documentation/api/customer-subuser-api/customer-api/filter-apps/
342
+
343
+
344
+ == Helper
345
+
346
+ === Create Sub User
347
+ this helper allows you to create a sub_user and enable apps that you want, passing a array with the sub_user data
348
+
349
+ define the data
350
+
351
+ user_hash = {:website => "someurl.com", :password => "somepass", :confirm_password => "somepass",
352
+ :first_name => "home", :last_name => "simpson", :address => "555 anystreet", :city => "any city",
353
+ :state => "CA" , :zip => "91234", :email => "email@email.com", :country => "US", :phone => "555-555"}
354
+
355
+ apps = { :opentrack => {:name => "eventnotify", :processed => "0", :dropped => "1", :deferred => "1",
356
+ :delivered => "0", :bounce => "1", :click => "1", :open => "1", :unsubscribe => "1", :spamreport => "1",
357
+ :url => "https://agencieshq.com/sendgrid/v1/listener"},
358
+ :clicktrack => {:enable_text => "1"},
359
+ :opentrack => {}
360
+ }
361
+
362
+ users = {"username" => {:account => user_hash, :applications => apps, :assigned_ips => ["IP"]}}
363
+
364
+ call the helper
365
+
366
+ create_sub_user_account("sendgrid user", "sendgrid pass", users)
367
+
368
+ === Run SendGrid Query
369
+ this helper allows you run a sengrid request and raise if it doesn't return successfull
370
+
371
+ run_sendgrid_query("sendgrid user", "sendgrid pass") do
372
+ #some sendgrid request
373
+ @client.sub_user.apps.activate(:user => "user", :name => "twitter")
374
+ end
375
+
376
+ == HTTP Return codes
377
+
378
+ === 4xx
379
+
380
+ The API call had an error in the parameters. The gem will return ApiException raise.
381
+
382
+ === 5xx
383
+
384
+ The API call was unsuccessful. The gem will return ApiException raise.
385
+
386
+ == CONTRIBUTORS:
387
+
388
+ * Kyle J. Ginavan.
389
+ * Mauro Torres - http://github.com/chebyte
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'bundler'
2
+ require 'rspec/core/rake_task'
3
+ Bundler::GemHelper.install_tasks
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
data/lib/base.rb ADDED
@@ -0,0 +1,41 @@
1
+ module SendGridWebApi
2
+ autoload :Faraday, 'middlewares/sendgrid_response'
3
+
4
+ class Base
5
+ attr_accessor :api_user, :api_key
6
+
7
+ def initialize api_user, api_key
8
+ @api_user = api_user
9
+ @api_key = api_key
10
+ end
11
+
12
+ def make_request_url url, options
13
+ "#{url}?#{builder_options(options)}"
14
+ end
15
+
16
+ def builder_options options
17
+ options.merge!(:api_user => @api_user, :api_key => @api_key)
18
+ to_query(options)
19
+ end
20
+
21
+ def query_api url, options
22
+ session.get(make_request_url(url, options)).body
23
+ end
24
+
25
+ def query_post_api url, options
26
+ builder_options(options)
27
+ session.post(url, builder_options(options)).body
28
+ end
29
+
30
+ def to_query(options)
31
+ Faraday::Utils.build_nested_query(options)
32
+ end
33
+
34
+ def session
35
+ @connection ||= ::Faraday.new base_url do |conn|
36
+ conn.use Faraday::Response::SendGridWebApi
37
+ conn.adapter Faraday.default_adapter
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/helper.rb ADDED
@@ -0,0 +1,36 @@
1
+ module SendGridWebApi::Helper
2
+ extend self
3
+
4
+ def run_sendgrid_query(username, password)
5
+ @client = SendGridWebApi::Client.new(username, password)
6
+ result = yield
7
+ raise "it returns the following errors: #{result}" unless result.eql?({"message"=>"success"})
8
+ end
9
+
10
+ ###this accepts subuser array
11
+ def create_sub_user_account(username, password, users)
12
+ users.each do |user, data|
13
+ #load users
14
+ run_sendgrid_query(username, password) do
15
+ @client.sub_user.management.add(data[:account].merge!(:username => user))
16
+ end
17
+
18
+ #active user for send email
19
+ run_sendgrid_query(username, password){@client.sub_user.management.enable(:user => user)}
20
+
21
+ #assign ip
22
+ unless data[:assigned_ips].empty?
23
+ run_sendgrid_query(username, password){@client.sub_user.ip_management.assign_ip :user => user, :ip => data[:assigned_ips]}
24
+ end
25
+ #load apps
26
+ unless data[:applications].empty?
27
+ data[:applications].each do |app_name, options|
28
+ run_sendgrid_query(username, password){@client.sub_user.apps.activate(:user => user, :name => app_name)}
29
+ unless options.empty?
30
+ run_sendgrid_query(username, password){@client.sub_user.apps.customize(options.merge!(:user => user, :name => app_name))}
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ require 'json' unless defined?(JSON)
2
+
3
+ #api exception
4
+ class ApiException < StandardError;end
5
+ class AuthenticationError < StandardError;end
6
+
7
+ module Faraday
8
+ class Response::SendGridWebApi < Response::Middleware
9
+
10
+ def error_message(result)
11
+ if result[/^[a-z ]+$/i]
12
+ error_msg = result
13
+ else
14
+ error_msg = JSON.parse(result)["error"] || JSON.parse(result)["errors"]
15
+ end
16
+ error_msg.to_s
17
+ end
18
+
19
+ def parse_body(body)
20
+ JSON.parse(body)
21
+ end
22
+
23
+ def check_status(env)
24
+ status = env[:status].to_s
25
+ if status == "403" || status == "401"
26
+ raise AuthenticationError.new(error_message(env[:body]))
27
+ elsif status =~ /^5/
28
+ raise ApiException.new("The API call was unsuccessful. You should retry later.")
29
+ elsif status =~ /^4/
30
+ raise ApiException.new(error_message(env[:body]))
31
+ end
32
+ end
33
+
34
+ def call(env)
35
+ @app.call(env).on_complete do
36
+ check_status(env)
37
+ env[:body] = parse_body(env[:body])
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,5 @@
1
+ require 'faraday'
2
+ require 'base'
3
+ require 'helper'
4
+ require 'webapi_client'
5
+ require 'subuser_client'
@@ -0,0 +1,31 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class App < SendGridWebApi::SubUser
3
+ APP_URL = "apiv2/customer.apps.json"
4
+
5
+ def list options = {}
6
+ options.merge!({:task => "getavailable"}) unless options[:task]
7
+ query_api(APP_URL, options)
8
+ end
9
+
10
+ def activate options = {}
11
+ options.merge!({:task => "activate"}) unless options[:task]
12
+ query_api(APP_URL, options)
13
+ end
14
+
15
+ def deactivate options = {}
16
+ options.merge!({:task => "deactivate"}) unless options[:task]
17
+ query_api(APP_URL, options)
18
+ end
19
+
20
+ def current_settings options = {}
21
+ options.merge!({:task => "getsettings"}) unless options[:task]
22
+ query_api(APP_URL, options)
23
+ end
24
+
25
+ def customize options = {}
26
+ options.merge!({:task => "setup"}) unless options[:task]
27
+ query_post_api(APP_URL, options)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class Auth < SendGridWebApi::SubUser
3
+
4
+ def login options = {}
5
+ auth_url = "apiv2/customer.auth.json"
6
+ query_api(auth_url, options)
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class Bounce < SendGridWebApi::SubUser
3
+ BOUNCE_URL = "api/user.bounces.json"
4
+
5
+ def get options = {}
6
+ options.merge!({:task => "get"}) unless options[:task]
7
+ query_api(BOUNCE_URL, options)
8
+ end
9
+
10
+ def delete options = {}
11
+ options.merge!({:task => "delete"}) unless options[:task]
12
+ query_api(BOUNCE_URL, options)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class EventNotification < SendGridWebApi::SubUser
3
+ EVENT_URL = "apiv2/customer.eventposturl.json"
4
+
5
+ def get options = {}
6
+ options.merge!({:task => "get"}) unless options[:task]
7
+ query_api(EVENT_URL, options)
8
+ end
9
+
10
+ def set options = {}
11
+ options.merge!({:task => "set"}) unless options[:task]
12
+ query_api(EVENT_URL, options)
13
+ end
14
+
15
+ def delete options = {}
16
+ options.merge!({:task => "delete"}) unless options[:task]
17
+ query_api(EVENT_URL, options)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class Iframe < SendGridWebApi::SubUser
3
+ def get options = {}
4
+ iframe_url = "apiv2/customer.geturl.json"
5
+ query_api(iframe_url, options)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class InvalidEmail < SendGridWebApi::SubUser
3
+ INVALID_EMAILS_URL = "apiv2/customer.invalidemails.json"
4
+
5
+ def get options = {}
6
+ options.merge!({:task => "get"}) unless options[:task]
7
+ query_api(INVALID_EMAILS_URL, options)
8
+ end
9
+
10
+ def delete options = {}
11
+ options.merge!({:task => "delete"}) unless options[:task]
12
+ query_api(INVALID_EMAILS_URL, options)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ module SendGridWebApi::SubUserModules
2
+ class IpManagement < SendGridWebApi::SubUser
3
+ def get options = {}
4
+ options.merge!({:list => "all"}) unless options[:list]
5
+ ip_management_get_url = "apiv2/customer.ip.json"
6
+ query_api(ip_management_get_url, options)
7
+ end
8
+
9
+ def usage_ip options = {}
10
+ options.merge!({:task => "list"}) unless options[:task]
11
+ ip_management_get_url = "apiv2/customer.sendip.json"
12
+ query_api(ip_management_get_url, options)
13
+ end
14
+
15
+ def assign_ip options = {}
16
+ options.merge!({:task => "append"}) unless options[:task]
17
+ options.merge!({:set => "specify"}) unless options[:set]
18
+ ip_management_get_url = "apiv2/customer.sendip.json"
19
+ query_api(ip_management_get_url, options)
20
+ end
21
+
22
+ end
23
+ end