sendgrid-ruby 1.0.0.alpha.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env_sample +3 -0
- data/.gitignore +2 -0
- data/.travis.yml +2 -2
- data/Gemfile +3 -0
- data/README.md +28 -96
- data/example.rb +32 -0
- data/lib/{sendgrid_ruby.rb → sendgrid-ruby.rb} +0 -0
- data/lib/sendgrid/client.rb +4 -5
- data/lib/sendgrid/mail.rb +10 -4
- data/lib/sendgrid/version.rb +1 -1
- data/sendgrid-ruby.gemspec +1 -0
- data/spec/lib/sendgrid/client_spec.rb +1 -1
- data/spec/lib/sendgrid_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +21 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe36a0b285a30dfac2804d6f3ac46d3ee0562a67
|
4
|
+
data.tar.gz: 1dab6a58bc0f677a75cce07a459afa925561db3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a21dacb775797d79fc03f3b21eef8dff075cce772e14f7a7de4c29c79deb1274ce0dc471e435bc5543d7cb2d7aa700be8528cfbc459011cc0607867ed9b45be
|
7
|
+
data.tar.gz: bc714d2321f8d349b6388025f0f669113f5437ebd06a336b294bbc36096e3c9d6933b5e795f30c811216979961e7da2e8d4f7ac3a5002dd6574c9367b3de95ab
|
data/.env_sample
ADDED
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -12,9 +12,9 @@ notifications:
|
|
12
12
|
Build %{build_number}</a> on branch <i>%{branch}</i> by %{author}: <strong>%{message}</strong>
|
13
13
|
<a href="https://github.com/sendgrid/docs/commits/%{commit}">View on GitHub</a>'
|
14
14
|
format: html
|
15
|
-
notify:
|
15
|
+
notify: false
|
16
16
|
before_script:
|
17
17
|
- bundle install
|
18
18
|
script:
|
19
|
-
- rubocop --fail-level=
|
19
|
+
- rubocop --fail-level=E
|
20
20
|
- rake
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,7 @@ And then execute:
|
|
17
17
|
|
18
18
|
$ bundle
|
19
19
|
|
20
|
-
Or install it yourself
|
20
|
+
Or install it yourself using:
|
21
21
|
|
22
22
|
$ gem install sendgrid-ruby
|
23
23
|
|
@@ -36,6 +36,11 @@ client = SendGrid::Client.new do |c|
|
|
36
36
|
c.api_user = 'SENDGRID_USERNAME'
|
37
37
|
c.api_key = 'SENDGRID_PASSWORD'
|
38
38
|
end
|
39
|
+
|
40
|
+
# or as a block with the API key only #
|
41
|
+
client = SendGrid::Client.new do |c|
|
42
|
+
c.api_key = 'SENDGRID_APIKEY'
|
43
|
+
end
|
39
44
|
```
|
40
45
|
|
41
46
|
Create a new Mail object and send:
|
@@ -51,7 +56,7 @@ puts client.send(mail)
|
|
51
56
|
# {"message":"success"}
|
52
57
|
```
|
53
58
|
|
54
|
-
You can also create a
|
59
|
+
You can also create a Mail object with a hash:
|
55
60
|
```ruby
|
56
61
|
client.send(SendGrid::Mail.new(to: 'example@example.com', from: 'taco@cat.limo', subject: 'Hello world!', text: 'Hi there!', html: '<b>Hi there!</b>'))
|
57
62
|
|
@@ -60,7 +65,7 @@ client.send(SendGrid::Mail.new(to: 'example@example.com', from: 'taco@cat.limo',
|
|
60
65
|
|
61
66
|
#### Attachments
|
62
67
|
|
63
|
-
Attachments can be added to a
|
68
|
+
Attachments can be added to a Mail object with the `add_attachment` method. The first parameter is the path to the file, the second (optional) parameter is the desired name of the file. If a file name is not provided, it will use the original filename.
|
64
69
|
```ruby
|
65
70
|
mail.add_attachment('/tmp/report.pdf', 'july_report.pdf')
|
66
71
|
```
|
@@ -165,108 +170,35 @@ mail.html = '<html><body>Stuff in here, yo!</body></html>'
|
|
165
170
|
|
166
171
|
## Using SendGrid's X-SMTPAPI Header
|
167
172
|
|
168
|
-
To utilize the X-SMTPAPI header, we have directly integrated the [smtpapi-ruby](https://github.com/SendGridJP/smtpapi-ruby) gem.
|
169
|
-
|
170
|
-
#### add_to
|
171
|
-
|
172
|
-
You can directly generate an x-smtpapi add_to header instead of using to *:to* param. ***Please note, this will override all params.***
|
173
|
-
|
174
|
-
```ruby
|
175
|
-
mail = SendGrid::Mail.new
|
176
|
-
mail.smtpapi.add_to('me@rbin.codes')
|
177
|
-
mail.smtpapi.add_to('eddiez@otheremail.com')
|
178
|
-
```
|
179
|
-
|
180
|
-
#### set_tos
|
181
|
-
|
182
|
-
```ruby
|
183
|
-
mail.smtpapi.set_tos(['rbin@cat.codes', 'eddie@taco.bell'])
|
184
|
-
```
|
185
|
-
|
186
|
-
#### add_substitution
|
187
173
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
```
|
193
|
-
|
194
|
-
#### set_substitutions
|
174
|
+
<blockquote>
|
175
|
+
To utilize the X-SMTPAPI header, we have directly integrated the <a href="https://github.com/SendGridJP/smtpapi-ruby">SendGridJP/smtpapi-ruby</a> gem.
|
176
|
+
For more information, view our <a href=https://sendgrid.com/docs/API_Reference/SMTP_API/index.html>SMTPAPI docs page</a>.
|
177
|
+
</blockquote>
|
195
178
|
|
196
179
|
```ruby
|
197
|
-
mail = SendGrid::Mail.new
|
198
|
-
mail.smtpapi.set_substitutions({'keep' => 'secret'}) # sub = {keep: ['secret']}
|
199
|
-
```
|
200
180
|
|
201
|
-
|
181
|
+
header = Smtpapi::Header.new
|
182
|
+
header.add_to(['john.doe@example.com', 'jane.doe@example.com'])
|
183
|
+
header.add_substitution('keep', ['secret']) # sub = {keep: ['secret']}
|
184
|
+
header.add_substitution('other', ['one', 'two']) # sub = {keep: ['secret'], other: ['one', 'two']}
|
185
|
+
header.add_unique_arg("unique_code", "8675309")
|
186
|
+
header.add_category("Newsletter")
|
187
|
+
header.add_filter('templates', 'enable', 1) # necessary for each time the template engine is used
|
188
|
+
header.add_filter('templates', 'template_id', '1234-5678-9100-abcd')
|
189
|
+
header.set_ip_pool("marketing_ip_pool")
|
190
|
+
mail.smtpapi = header
|
202
191
|
|
203
|
-
```ruby
|
204
|
-
mail = SendGrid::Mail.new
|
205
|
-
mail.smtpapi.add_unique_arg('cat', 'dogs')
|
206
192
|
```
|
193
|
+
## Testing ##
|
207
194
|
|
208
|
-
|
195
|
+
`bundle exec rake test`
|
209
196
|
|
210
|
-
|
211
|
-
mail = SendGrid::Mail.new
|
212
|
-
mail.smtpapi.set_unique_args({'cow' => 'chicken'})
|
213
|
-
mail.smtpapi.set_unique_args({'dad' => 'proud'})
|
214
|
-
```
|
197
|
+
## Deploying ##
|
215
198
|
|
216
|
-
|
217
|
-
|
218
|
-
```ruby
|
219
|
-
mail = SendGrid::Mail.new
|
220
|
-
mail.smtpapi.add_category('tactics') # category = ['tactics']
|
221
|
-
mail.smtpapi.add_category('advanced') # category = ['tactics', 'advanced']
|
222
|
-
```
|
223
|
-
|
224
|
-
#### set_categories
|
225
|
-
|
226
|
-
```ruby
|
227
|
-
mail = SendGrid::Mail.new
|
228
|
-
mail.smtpapi.set_categories(['tactics', 'advanced']) # category = ['tactics', 'advanced']
|
229
|
-
```
|
230
|
-
|
231
|
-
#### add_section
|
232
|
-
|
233
|
-
```ruby
|
234
|
-
mail = SendGrid::Mail.new
|
235
|
-
mail.smtpapi.add_section('-charge-', 'This ship is useless.'])
|
236
|
-
mail.smtpapi.add_section('-bomber-', 'Only for sad vikings.'])
|
237
|
-
```
|
238
|
-
|
239
|
-
#### set_sections
|
240
|
-
|
241
|
-
```ruby
|
242
|
-
mail = SendGrid::Mail.new
|
243
|
-
mail.smtpapi.set_sections({'-charge-' => 'This ship is useless.'})
|
244
|
-
```
|
245
|
-
|
246
|
-
#### add_filter
|
247
|
-
|
248
|
-
```ruby
|
249
|
-
mail = SendGrid::Mail.new
|
250
|
-
mail.smtpapi.add_filter('footer', 'enable', 1)
|
251
|
-
mail.smtpapi.add_filter('footer', 'text/html', '<strong>boo</strong>')
|
252
|
-
```
|
253
|
-
|
254
|
-
#### set_filters
|
255
|
-
|
256
|
-
```ruby
|
257
|
-
mail = SendGrid::Mail.new
|
258
|
-
filter = {
|
259
|
-
'footer' => {
|
260
|
-
'setting' => {
|
261
|
-
'enable' => 1,
|
262
|
-
"text/plain" => 'You can haz footers!'
|
263
|
-
}
|
264
|
-
}
|
265
|
-
}
|
266
|
-
mail.smtpapi.set_filters(filter)
|
267
|
-
```
|
199
|
+
`rake release`
|
268
200
|
|
269
|
-
## Contributing
|
201
|
+
## Contributing ##
|
270
202
|
|
271
203
|
1. Fork it ( https://github.com/[my-github-username]/sendgrid-ruby/fork )
|
272
204
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
@@ -274,4 +206,4 @@ mail.smtpapi.set_filters(filter)
|
|
274
206
|
4. Push to the branch (`git push origin my-new-feature`)
|
275
207
|
5. Create a new Pull Request
|
276
208
|
|
277
|
-
***Hit up [@rbin](http://twitter.com/rbin) or [@
|
209
|
+
***Hit up [@rbin](http://twitter.com/rbin) or [@sendgrid](http://twitter.com/sendgrid) on Twitter with any issues.***
|
data/example.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# test using: ruby example.rb
|
2
|
+
# using ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
|
3
|
+
# attachment is sent but only a corrupted 1k file
|
4
|
+
|
5
|
+
require_relative "lib/sendgrid-ruby.rb"
|
6
|
+
|
7
|
+
require 'dotenv'
|
8
|
+
Dotenv.load
|
9
|
+
|
10
|
+
# sendgrid_username = ENV['SENDGRID_USERNAME']
|
11
|
+
# sendgrid_password = ENV['SENDGRID_PASSWORD']
|
12
|
+
sendgrid_apikey = ENV['SENDGRID_APIKEY']
|
13
|
+
|
14
|
+
# client = SendGrid::Client.new(api_user: sendgrid_username, api_key: sendgrid_password)
|
15
|
+
|
16
|
+
client = SendGrid::Client.new do |c|
|
17
|
+
# c.api_user = sendgrid_username
|
18
|
+
c.api_key = sendgrid_apikey
|
19
|
+
end
|
20
|
+
|
21
|
+
mail = SendGrid::Mail.new do |m|
|
22
|
+
m.to = 'elmer.thomas@sendgrid.com'
|
23
|
+
m.from = 'elmer@thinkingserious.com'
|
24
|
+
m.subject = 'Hello world!'
|
25
|
+
m.text = 'I heard you like pineapple.'
|
26
|
+
end
|
27
|
+
mail.add_attachment('/tmp/report.pdf', 'july_report.pdf')
|
28
|
+
result = client.send(mail)
|
29
|
+
puts result.code
|
30
|
+
puts result.body
|
31
|
+
|
32
|
+
# puts client.send(SendGrid::Mail.new(to: 'elmer.thomas@sendgrid.com', from: 'elmer@thinkingserious.com', subject: 'Hello world!', text: 'Hi there, testing from Ruby!', html: '<b>Hi there, testing from Ruby!</b>'))
|
File without changes
|
data/lib/sendgrid/client.rb
CHANGED
@@ -24,9 +24,8 @@ module SendGrid
|
|
24
24
|
def send(mail)
|
25
25
|
res = conn.post do |req|
|
26
26
|
payload = mail.to_h
|
27
|
-
|
28
27
|
req.url(endpoint)
|
29
|
-
|
28
|
+
|
30
29
|
# Check if using username + password or API key
|
31
30
|
if api_user
|
32
31
|
# Username + password
|
@@ -35,12 +34,12 @@ module SendGrid
|
|
35
34
|
# API key
|
36
35
|
req.headers['Authorization'] = "Bearer #{api_key}"
|
37
36
|
end
|
38
|
-
|
37
|
+
|
39
38
|
req.body = payload
|
40
39
|
end
|
41
|
-
|
40
|
+
|
42
41
|
fail SendGrid::Exception, res.body if raise_exceptions? && res.status != 200
|
43
|
-
|
42
|
+
|
44
43
|
SendGrid::Response.new(code: res.status, headers: res.headers, body: res.body)
|
45
44
|
end
|
46
45
|
|
data/lib/sendgrid/mail.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'smtpapi'
|
3
|
+
require 'mimemagic'
|
3
4
|
|
4
5
|
module SendGrid
|
5
6
|
class Mail
|
@@ -89,7 +90,8 @@ module SendGrid
|
|
89
90
|
end
|
90
91
|
|
91
92
|
def add_attachment(path, name = nil)
|
92
|
-
|
93
|
+
mime_type = MimeMagic.by_path(path)
|
94
|
+
file = Faraday::UploadIO.new(path, mime_type)
|
93
95
|
name ||= File.basename(file)
|
94
96
|
attachments << {file: file, name: name}
|
95
97
|
end
|
@@ -121,18 +123,22 @@ module SendGrid
|
|
121
123
|
:text => text,
|
122
124
|
:html => html,
|
123
125
|
:'x-smtpapi' => smtpapi.to_json,
|
124
|
-
:files => ({} unless attachments.empty?)
|
126
|
+
:files => ({":default"=>"0"} unless attachments.empty?)
|
127
|
+
# If I don't define a default value, I get a Nil error when
|
128
|
+
# in attachments.each do |file|
|
129
|
+
#:files => ({} unless attachments.empty?)
|
125
130
|
}.reject {|_, v| v.nil? || v.empty?}
|
126
131
|
|
127
132
|
payload.delete(:'x-smtpapi') if payload[:'x-smtpapi'] == '{}'
|
128
133
|
|
129
|
-
payload[:to] = payload[:from] unless payload[:to].nil? && smtpapi.to.empty?
|
134
|
+
payload[:to] = payload[:from] unless (not payload[:to].nil?) && smtpapi.to.empty?
|
130
135
|
|
131
136
|
return payload if attachments.empty?
|
132
|
-
|
137
|
+
|
133
138
|
attachments.each do |file|
|
134
139
|
payload[:files][file[:name]] = file[:file]
|
135
140
|
end
|
141
|
+
payload[:files].delete(":default")
|
136
142
|
payload
|
137
143
|
end
|
138
144
|
# rubocop:enable Style/HashSyntax
|
data/lib/sendgrid/version.rb
CHANGED
data/sendgrid-ruby.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'smtpapi', '~> 0.1'
|
22
22
|
spec.add_dependency 'faraday', '~> 0.9'
|
23
|
+
spec.add_dependency 'mimemagic'
|
23
24
|
spec.add_development_dependency 'rake'
|
24
25
|
spec.add_development_dependency 'rspec'
|
25
26
|
spec.add_development_dependency 'rspec-nc'
|
@@ -57,7 +57,7 @@ describe 'SendGrid::Client' do
|
|
57
57
|
client.send(mail)
|
58
58
|
|
59
59
|
expect(WebMock).to have_requested(:post, 'https://api.sendgrid.com/api/mail.send.json')
|
60
|
-
.with(body: 'api_key=abc123&api_user=foobar')
|
60
|
+
.with(body: 'api_key=abc123&api_user=foobar&to=')
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'should raise a SendGrid::Exception if status is not 200' do
|
data/spec/lib/sendgrid_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require_relative '../lib/
|
1
|
+
require_relative '../lib/sendgrid-ruby'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendgrid-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robin Johnson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: smtpapi
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0.9'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: mimemagic
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: rake
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,6 +199,7 @@ executables: []
|
|
185
199
|
extensions: []
|
186
200
|
extra_rdoc_files: []
|
187
201
|
files:
|
202
|
+
- ".env_sample"
|
188
203
|
- ".gitignore"
|
189
204
|
- ".rspec"
|
190
205
|
- ".rubocop.yml"
|
@@ -194,12 +209,13 @@ files:
|
|
194
209
|
- LICENSE.txt
|
195
210
|
- README.md
|
196
211
|
- Rakefile
|
212
|
+
- example.rb
|
213
|
+
- lib/sendgrid-ruby.rb
|
197
214
|
- lib/sendgrid/client.rb
|
198
215
|
- lib/sendgrid/exceptions.rb
|
199
216
|
- lib/sendgrid/mail.rb
|
200
217
|
- lib/sendgrid/response.rb
|
201
218
|
- lib/sendgrid/version.rb
|
202
|
-
- lib/sendgrid_ruby.rb
|
203
219
|
- sendgrid-ruby.gemspec
|
204
220
|
- spec/lib/sendgrid/client_spec.rb
|
205
221
|
- spec/lib/sendgrid/mail_spec.rb
|
@@ -220,9 +236,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
220
236
|
version: '0'
|
221
237
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
238
|
requirements:
|
223
|
-
- - "
|
239
|
+
- - ">="
|
224
240
|
- !ruby/object:Gem::Version
|
225
|
-
version:
|
241
|
+
version: '0'
|
226
242
|
requirements: []
|
227
243
|
rubyforge_project:
|
228
244
|
rubygems_version: 2.4.5
|