sendgrid4r 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 568b1050de08f8eca17e627d9a39b1b8e23225a9
4
+ data.tar.gz: b38ba6b0a6745268940558d8416ac29be5365d00
5
+ SHA512:
6
+ metadata.gz: 29e018b98d2356945f6a003fbdf768a04886a65cee01402c0ba14e6023d414ca05af0c3acec11ed7947607ac1a3533d764b8999fe14fce0e186e4284e5e70df2
7
+ data.tar.gz: 9c841443a41546dfa7f77bfd1c3b82f37c93170672467958fe2cfbb0b6c96e62695cad154d38c7423baebc3ae0076680c4243cc3693d20dc3d5958121738e820
data/.env.example ADDED
@@ -0,0 +1,2 @@
1
+ SENDGRID_USERNAME=sendgrid username
2
+ SENDGRID_PASSWORD=sendgrid_password
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ .env
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ # - "1.9.3"
4
+ # - "2.0.0"
5
+ - "2.1.0"
6
+ before_script:
7
+ - bundle install
8
+ script:
9
+ - rspec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sendgrid4r.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 awwa500@gmail.com
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,324 @@
1
+ # Sendgrid4r
2
+
3
+ This gem allows you to quickly and easily access to SendGrid Web API v3 for Ruby.
4
+ See [api reference](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) for more detail
5
+
6
+ [![Build Status](https://travis-ci.org/awwa/sendgrid_template_engine_ruby.svg?branch=master)](https://travis-ci.org/awwa/sendgrid_template_engine_ruby.svg?branch=master)
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'sendgrid4r'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install sendgrid4r
21
+
22
+ ## Usage
23
+
24
+ ### Create a client instance
25
+
26
+ Create a SendGrid::Client instance for API call.
27
+
28
+ ```Ruby
29
+ require "sendgrid4r"
30
+ client = Sendgrid4r::Client.new("user", "pass")
31
+ ```
32
+
33
+ ----
34
+ ### Advanced Suppression Manager
35
+
36
+ #### Groups
37
+
38
+ ##### GET
39
+ Get all groups.
40
+ ```Ruby
41
+ groups = client.get_groups
42
+ groups.each{|group|
43
+ puts group.id # => 100
44
+ puts group.name # => "Newsletters"
45
+ puts group.description # => "Our monthly newsletter."
46
+ puts group.last_email_sent_at # => "2014-09-04 01:34:43"
47
+ puts group.unsubscribes # => 400
48
+ }
49
+ ```
50
+
51
+ ##### GET
52
+ Get the suppression group.
53
+ ```Ruby
54
+ group = client.get_group(100)
55
+ puts group.id # => 100
56
+ puts group.name # => "Newsletters"
57
+ puts group.description # => "Our monthly newsletter."
58
+ puts group.last_email_sent_at # => "2014-09-04 01:34:43"
59
+ puts group.unsubscribes # => 400
60
+ ```
61
+
62
+ ##### POST
63
+ Create a suppression group.
64
+ ```Ruby
65
+ new_group = client.post_group("group_name", "group_desc")
66
+ ```
67
+
68
+ ##### PATCH
69
+ Edit the suppression group.
70
+ ```Ruby
71
+ new_group.name = "group_edit"
72
+ new_group.description = "group_desc_edit"
73
+ client.patch_group(new_group.id, new_group)
74
+ ```
75
+
76
+ ##### DELETE
77
+ Delete the suppression group.
78
+ ```Ruby
79
+ client.delete_group(100)
80
+ ```
81
+
82
+ #### Suppressions
83
+
84
+ ##### POST
85
+ Add recipient emails to the suppressions list for a given group.
86
+ ```Ruby
87
+ emails = client.post_suppressed_emails(group.id, ["email1@address.com", "email2@address.com", "email3@address.com"])
88
+ ```
89
+
90
+ ##### GET
91
+ Get suppressions associated with a recipient email.
92
+ ```Ruby
93
+ suppressions = client.get_suppressions("email@address.com")
94
+ suppressions.each{|suppression|
95
+ puts suppression.id # => 1
96
+ puts suppression.name # => "Weekly Newsletter"
97
+ puts suppression.description # => "The weekly newsletter"
98
+ puts suppression.suppressed # => true/false
99
+ }
100
+ ```
101
+
102
+ ##### GET
103
+ Retrieve suppressed emails for a group.
104
+ ```Ruby
105
+ emails = client.get_suppressed_emails(group.id)
106
+ emails.each{|email|
107
+ puts email
108
+ }
109
+ ```
110
+
111
+ ##### DELETE
112
+ Delete a recipient email from the suppressions list for a given group.
113
+ ```Ruby
114
+ client.delete_group(group.id)
115
+ ```
116
+
117
+ #### Global Suppressions
118
+
119
+ ##### POST
120
+ Add recipient emails to the global suppression group.
121
+ ```Ruby
122
+ emails = client.post_global_suppressed_emails(["email1@address.com", "email2@address.com", "email3@address.com"])
123
+ ```
124
+
125
+ ##### GET
126
+ Check if an address is in the global suppressions group.
127
+ ```Ruby
128
+ email1 = client.get_global_suppressed_email("email1@address.com")
129
+ ```
130
+
131
+ ##### DELETE
132
+ Delete a recipient email from the global suppressions group.
133
+ ```Ruby
134
+ client.delete_global_suppressed_email("email1@address.com")
135
+ ```
136
+
137
+ ----
138
+ ### IP Management
139
+
140
+ #### IP Addresses
141
+
142
+ ##### GET
143
+ See a list of all IPs and the IPs warm up status.
144
+ ```Ruby
145
+ ips = client.get_ips
146
+ ips.each{|ip|
147
+ puts ip.ip # => "xxx.xxx.xxx.xxx"
148
+ puts ip.warmup # => true/false
149
+ puts ip.start_date # => 1409616000
150
+ }
151
+ ```
152
+
153
+ #### IP Warmup
154
+
155
+ ##### GET
156
+ Get all IPs that are currently warming up.
157
+ ```Ruby
158
+ warmup_ips = client.get_warmup_ips
159
+ warmup_ips.each{|warmup_ip|
160
+ puts warmup_ip.ip # => "xxx.xxx.xxx.xxx"
161
+ puts warmup_ip.start_date # => 1409616000
162
+ }
163
+ ```
164
+
165
+ ##### GET
166
+ Get warmup status for a particular IP.
167
+ ```Ruby
168
+ warmup_ip = client.get_warmup_ip("xxx.xxx.xxx.xxx")
169
+ puts warmup_ip.ip # => "xxx.xxx.xxx.xxx"
170
+ puts warmup_ip.start_date # => 1409616000
171
+ ```
172
+
173
+ ##### POST
174
+ Add an IP to warmup.
175
+ ```Ruby
176
+ client.post_warmup_ip("xxx.xxx.xxx.xxx")
177
+ ```
178
+
179
+ ##### DELETE
180
+ Remove an IP from warmup.
181
+ ```Ruby
182
+ client.delete_warmup_ip("xxx.xxx.xxx.xxx")
183
+ ```
184
+
185
+ ----
186
+ ### Settings
187
+
188
+ #### Enforced TLS
189
+
190
+ ##### GET
191
+ Get the current Enforced TLS settings.
192
+ ```Ruby
193
+ enforced_tls = client.get_enforced_tls
194
+ puts enforced_tls.require_tls # => true/false
195
+ puts enforced_tls.require_valid_cert # => true/false
196
+ ```
197
+
198
+ ##### PATCH
199
+ Change the Enforced TLS settings.
200
+ ```Ruby
201
+ enforced_tls = client.get_enforced_tls
202
+ enforced_tls.require_tls = true
203
+ enforced_tls.require_valid_cert = true
204
+ client.patch_enforced_tls(enforced_tls)
205
+ ```
206
+
207
+ ----
208
+ ### Template Engine
209
+
210
+ #### Templates
211
+
212
+ ##### GET
213
+ Retrieve all templates.
214
+ ```Ruby
215
+ templates = client.get_templates
216
+ templates.each {|template|
217
+ puts template.id
218
+ puts template.name
219
+ template.versions.each {|ver|
220
+ puts ver.id
221
+ puts ver.template_id
222
+ puts ver.active
223
+ puts ver.name
224
+ puts ver.updated_at
225
+ }
226
+ }
227
+ ```
228
+
229
+ ##### GET
230
+ Retrieve a single template
231
+ ```Ruby
232
+ template = client.get_template(template_id)
233
+ puts template.id
234
+ puts template.name
235
+ template.versions.each {|ver|
236
+ puts ver.id
237
+ puts ver.template_id
238
+ puts ver.active
239
+ puts ver.name
240
+ puts ver.updated_at
241
+ }
242
+ ```
243
+
244
+ ##### POST
245
+ Create a template
246
+ ```Ruby
247
+ client.post_template("new_template_name")
248
+ ```
249
+
250
+ ##### PATCH
251
+ Edit a template.
252
+ ```Ruby
253
+ client.patch_template(template_id, "edit_template_name")
254
+ ```
255
+
256
+ ##### DELETE
257
+ Delete a template.
258
+ ```Ruby
259
+ client.delete_template(template_id)
260
+ ```
261
+
262
+ #### Versions
263
+
264
+ ##### GET
265
+ Retrieve a specific version of template.
266
+ ```Ruby
267
+ ver = client.get_version(template_id, version_id)
268
+ puts ver.id
269
+ puts ver.template_id
270
+ puts ver.active
271
+ puts ver.name
272
+ puts ver.html_content
273
+ puts ver.plain_content
274
+ puts ver.subject
275
+ puts ver.update_at
276
+ ```
277
+
278
+ ##### POST
279
+ Create a new version
280
+ ```Ruby
281
+ factory = SendGrid4r::VersionFactory.new
282
+ ver1 = factory.create("version1_name")
283
+ ver1 = client.post_version(template_id, ver1)
284
+ puts ver1.name # => "version1_name"
285
+ puts ver1.subject # => "<%subject%>"
286
+ puts ver1.html_content # => "<%body%>"
287
+ puts ver1.plain_content # => "<%body%>"
288
+ puts ver1.active # => 1
289
+
290
+ ver2 = factory.create("version2_name", "<%subject%> ver2", "<%body%> ver2", "<%body%> ver2", 1)
291
+ ver2 = client.post_version(template_id, ver2)
292
+ ```
293
+
294
+ ##### POST
295
+ Activate a version.
296
+ ```Ruby
297
+ client.activate_version(template_id, version_id)
298
+ ```
299
+
300
+ ##### PATCH
301
+ Edit a version.
302
+ ```Ruby
303
+ edit_ver = client.get_version(template_id, version_id)
304
+ edit_ver.name = "edit_version"
305
+ edit_ver.subject = "edit<%subject%>edit"
306
+ edit_ver.html_content = "edit<%body%>edit"
307
+ edit_ver.plain_content = "edit<%body%>edit"
308
+ edit_ver.active = 0
309
+ client.patch_version(template_id, version_id, edit_ver)
310
+ ```
311
+
312
+ ##### DELETE
313
+ Delete a version.
314
+ ```Ruby
315
+ client.delete_version(template_id, version_id)
316
+ ```
317
+
318
+ ## Contributing
319
+
320
+ 1. Fork it ( https://github.com/[my-github-username]/sendgrid4r/fork )
321
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
322
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
323
+ 4. Push to the branch (`git push origin my-new-feature`)
324
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/auth.rb ADDED
@@ -0,0 +1,18 @@
1
+ module SendGrid4r
2
+ class Auth
3
+
4
+ def initialize(username, password)
5
+ @username = username
6
+ @password = password
7
+ end
8
+
9
+ def get_username
10
+ @username
11
+ end
12
+
13
+ def get_password
14
+ @password
15
+ end
16
+
17
+ end
18
+ end
data/lib/client.rb ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require "auth"
5
+ require "sendgrid4r/rest/api"
6
+ require "sendgrid4r/factory/version_factory"
7
+
8
+ module SendGrid4r
9
+
10
+ class Client
11
+
12
+ include SendGrid4r::REST::API
13
+
14
+ BASE_URL = "https://api.sendgrid.com/v3"
15
+
16
+ def initialize(username, password)
17
+ @auth = Auth.new(username, password)
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,15 @@
1
+ module SendGrid4r
2
+ class VersionFactory
3
+
4
+ def create(name, subject = "<%subject%>", html_content = "<%body%>", plain_content = "<%body%>", active = 1)
5
+ ver = SendGrid4r::REST::Templates::Version.new()
6
+ ver.name = name
7
+ ver.subject = subject
8
+ ver.html_content = html_content
9
+ ver.plain_content = plain_content
10
+ ver.active = active
11
+ ver
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ require "sendgrid4r/rest/templates"
2
+ require "sendgrid4r/rest/versions"
3
+ require "sendgrid4r/rest/groups"
4
+ require "sendgrid4r/rest/suppressions"
5
+ require "sendgrid4r/rest/global_suppressions"
6
+ require "sendgrid4r/rest/enforced_tls"
7
+ require "sendgrid4r/rest/ip_addresses"
8
+ require "sendgrid4r/rest/warmup"
9
+
10
+ module SendGrid4r
11
+ module REST
12
+ module API
13
+ include SendGrid4r::REST::Templates
14
+ include SendGrid4r::REST::Templates::Versions
15
+ include SendGrid4r::REST::Asm::Groups
16
+ include SendGrid4r::REST::Asm::Suppressions
17
+ include SendGrid4r::REST::Asm::GlobalSuppressions
18
+ include SendGrid4r::REST::Settings::EnforcedTls
19
+ include SendGrid4r::REST::Ips::IpAddresses
20
+ include SendGrid4r::REST::Ips::Warmup
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require "sendgrid4r/rest/request"
5
+
6
+ module SendGrid4r
7
+ module REST
8
+ module Settings
9
+ module EnforcedTls
10
+
11
+ include SendGrid4r::REST::Request
12
+
13
+ def get_enforced_tls
14
+ response = get(@auth, "#{SendGrid4r::Client::BASE_URL}/user/settings/enforced_tls")
15
+ EnforcedTls.create(response)
16
+ end
17
+
18
+ def patch_enforced_tls(params)
19
+ response = patch(@auth, "#{SendGrid4r::Client::BASE_URL}/user/settings/enforced_tls", params.to_hash)
20
+ EnforcedTls.create(response)
21
+ end
22
+
23
+ class EnforcedTls
24
+
25
+ attr_accessor :require_tls, :require_valid_cert
26
+
27
+ def self.create(value)
28
+ obj = EnforcedTls.new
29
+ obj.require_tls = value["require_tls"]
30
+ obj.require_valid_cert = value["require_valid_cert"]
31
+ obj
32
+ end
33
+
34
+ def to_hash
35
+ hash = Hash.new
36
+ hash["require_tls"] = @require_tls if @require_tls != nil
37
+ hash["require_valid_cert"] = @require_valid_cert if @require_valid_cert != nil
38
+ hash
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require "sendgrid4r/rest/request"
5
+
6
+ module SendGrid4r
7
+ module REST
8
+ module Asm
9
+ module GlobalSuppressions
10
+
11
+ include SendGrid4r::REST::Request
12
+
13
+ def post_global_suppressed_emails(recipient_emails)
14
+ params = Hash.new
15
+ params["recipient_emails"] = recipient_emails
16
+ response = post(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/suppressions/global", params.to_hash)
17
+ recipient_emails = response["recipient_emails"]
18
+ recipient_emails
19
+ end
20
+
21
+ def get_global_suppressed_email(email_address)
22
+ response = get(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/suppressions/global/#{email_address}")
23
+ email_address = response["recipient_email"]
24
+ email_address
25
+ end
26
+
27
+ def delete_global_suppressed_email(email_address)
28
+ delete(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/suppressions/global/#{email_address}")
29
+ end
30
+
31
+ end
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require "sendgrid4r/rest/request"
5
+
6
+ module SendGrid4r
7
+ module REST
8
+ module Asm
9
+ module Groups
10
+
11
+ include SendGrid4r::REST::Request
12
+
13
+ def get_groups
14
+ response = get(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/groups")
15
+ groups = Array.new
16
+ response.each{|grp|
17
+ group = Group.create(grp)
18
+ groups.push(group)
19
+ } if response.length != 0
20
+ groups
21
+ end
22
+
23
+ def get_group(group_id)
24
+ Group.create(get(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/groups/#{group_id}"))
25
+ end
26
+
27
+ def post_group(name, description)
28
+ params = Hash.new
29
+ params["name"] = name
30
+ params["description"] = description
31
+ Group.create(post(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/groups", params))
32
+ end
33
+
34
+ def patch_group(group_id, group)
35
+ Group.create(patch(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/groups/#{group_id}", group.to_hash))
36
+ end
37
+
38
+ def delete_group(group_id)
39
+ delete(@auth, "#{SendGrid4r::Client::BASE_URL}/asm/groups/#{group_id}")
40
+ end
41
+
42
+ class Group
43
+
44
+ attr_accessor :id, :name, :description, :last_email_sent_at, :unsubscribes
45
+
46
+ def self.create(value)
47
+ obj = Group.new
48
+ obj.id = value["id"]
49
+ obj.name = value["name"]
50
+ obj.description = value["description"]
51
+ obj.last_email_sent_at = value["last_email_sent_at"]
52
+ obj.unsubscribes = value["unsubscribes"]
53
+ obj
54
+ end
55
+
56
+ def to_hash
57
+ hash = {
58
+ "name" => @name,
59
+ "description" => @description,
60
+ }
61
+ hash
62
+ end
63
+
64
+ end
65
+ end
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,46 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require "sendgrid4r/rest/request"
5
+
6
+ module SendGrid4r
7
+ module REST
8
+ module Ips
9
+ module IpAddresses
10
+
11
+ include SendGrid4r::REST::Request
12
+
13
+ def get_ips
14
+ response = get(@auth, "#{SendGrid4r::Client::BASE_URL}/ips")
15
+ ips = Array.new
16
+ response.each{|ip|
17
+ ip_address = IpAddress.create(ip)
18
+ ips.push(ip_address)
19
+ } if response.length > 0
20
+ ips
21
+ end
22
+
23
+ class IpAddress
24
+
25
+ attr_accessor :ip, :pools, :warmup, :start_date
26
+
27
+ def self.create(value)
28
+ obj = IpAddress.new
29
+ obj.ip = value["ip"]
30
+ obj.pools = []
31
+ # TODO Implements if ip pools GA
32
+ # value["pools"].each{|pool|
33
+ # ver = Pool.create(pool)
34
+ # obj.pools.push(ver)
35
+ # }
36
+ obj.warmup = value["warmup"]
37
+ obj.start_date = value["start_date"]
38
+ obj
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+ end