sendgrid_ruby 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.
@@ -0,0 +1,319 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'smtpapi'
3
+ require 'json'
4
+
5
+ module SendgridRuby
6
+
7
+ class Email
8
+
9
+ def initialize()
10
+ @smtpapi = Smtpapi::Header.new
11
+ @cc_list = []
12
+ @bcc_list = []
13
+ @attachments = []
14
+ @headers = Hash.new
15
+ end
16
+
17
+ def remove_from_list(list, item, key_field = nil)
18
+ list.each do |value|
19
+ if key_field == nil
20
+ list.delete(value) if (value == item)
21
+ else
22
+ list.delete(value) if (value[key_field] == item)
23
+ end
24
+ end
25
+ list
26
+ end
27
+
28
+ def add_to(email, name=nil)
29
+ @smtpapi.add_to(email, name)
30
+ self
31
+ end
32
+
33
+ def set_tos(emails)
34
+ @smtpapi.set_tos(emails)
35
+ self
36
+ end
37
+
38
+ def get_tos
39
+ @smtpapi.to
40
+ end
41
+
42
+ def remove_to(email)
43
+ remove_from_list(@smtpapi.to, email)
44
+ self
45
+ end
46
+
47
+ def set_from(email)
48
+ @from = email
49
+ self
50
+ end
51
+
52
+ def get_from(as_array = false)
53
+ if as_array && name = @from_name
54
+ {@from => name}
55
+ else
56
+ @from
57
+ end
58
+ end
59
+
60
+ def set_reply_to(reply_to)
61
+ @reply_to = reply_to
62
+ self
63
+ end
64
+
65
+ def get_reply_to
66
+ @reply_to
67
+ end
68
+
69
+ def set_from_name(from_name)
70
+ @from_name = from_name
71
+ self
72
+ end
73
+
74
+ def get_from_name
75
+ @from_name
76
+ end
77
+
78
+ # def set_cc(email)
79
+ # @cc_list = [email]
80
+ # self
81
+ # end
82
+
83
+ # def set_ccs(email_list)
84
+ # @cc_list = email_list
85
+ # self
86
+ # end
87
+
88
+ # def add_cc(email)
89
+ # @cc_list.push(email)
90
+ # self
91
+ # end
92
+
93
+ # def remove_cc(email)
94
+ # @cc_list = remove_from_list(@cc_list, email)
95
+ # self
96
+ # end
97
+
98
+ # def get_ccs
99
+ # @cc_list
100
+ # end
101
+
102
+ # def set_bcc(email)
103
+ # @bcc_list = [email]
104
+ # self
105
+ # end
106
+
107
+ # def set_bccs(email_list)
108
+ # @bcc_list = email_list
109
+ # self
110
+ # end
111
+
112
+ # def add_bcc(email)
113
+ # @bcc_list.push(email)
114
+ # self
115
+ # end
116
+
117
+ # def remove_bcc(email)
118
+ # @bcc_list = remove_from_list(@bcc_list, email)
119
+ # self
120
+ # end
121
+
122
+ # def get_bccs
123
+ # @bcc_list
124
+ # end
125
+
126
+ def set_subject(subject)
127
+ @subject = subject
128
+ self
129
+ end
130
+
131
+ def get_subject
132
+ @subject
133
+ end
134
+
135
+ def set_text(text)
136
+ @text = text
137
+ self
138
+ end
139
+
140
+ def get_text
141
+ @text
142
+ end
143
+
144
+
145
+ def set_html(html)
146
+ @html = html
147
+ self
148
+ end
149
+
150
+ def get_html
151
+ @html
152
+ end
153
+
154
+ attr_accessor :smtpapi
155
+
156
+ def set_attachments(files)
157
+ files.each do |filename, file|
158
+ if file.is_a?(String)
159
+ add_attachment(file, filename)
160
+ else
161
+ add_attachment(filename)
162
+ end
163
+ end
164
+ self
165
+ end
166
+
167
+ def set_attachment(file, custom_filename=nil)
168
+ @attachments = [get_attachment_info(file, custom_filename)]
169
+ self
170
+ end
171
+
172
+ def add_attachment(file, custom_filename=nil)
173
+ @attachments.push(get_attachment_info(file, custom_filename))
174
+ self
175
+ end
176
+
177
+ def get_attachments()
178
+ @attachments
179
+ end
180
+
181
+ def remove_attachment(file)
182
+ @attachments = remove_from_list(@attachments, file, "file")
183
+ self
184
+ end
185
+
186
+ def get_attachment_info(file, custom_filename=nil)
187
+ dir, basename = File::split(file)
188
+ extname = File::extname(file)
189
+ filename = File::basename(file, extname)
190
+ info = {
191
+ 'dirname' => dir,
192
+ 'basename' => basename,
193
+ 'extension' => extname,
194
+ 'filename' => filename
195
+ }
196
+ info['file'] = file
197
+ info['custom_filename'] = custom_filename if !custom_filename.nil?
198
+ info
199
+ end
200
+
201
+ def set_categories(categories)
202
+ @smtpapi.set_categories(categories)
203
+ self
204
+ end
205
+
206
+ def set_category(category)
207
+ @smtpapi.set_category(category)
208
+ self
209
+ end
210
+
211
+ def add_category(category)
212
+ @smtpapi.add_category(category)
213
+ self
214
+ end
215
+
216
+ def remove_category(category)
217
+ @smtpapi.remove_category(category)
218
+ self
219
+ end
220
+
221
+ def set_substitutions(key_value_pairs)
222
+ @smtpapi.set_substitutions(key_value_pairs)
223
+ self
224
+ end
225
+
226
+ def add_substitution(from_value, to_values)
227
+ @smtpapi.add_substitution(from_value, to_values)
228
+ self
229
+ end
230
+
231
+ def set_sections(key_value_pairs)
232
+ @smtpapi.set_sections(key_value_pairs)
233
+ self
234
+ end
235
+
236
+ def add_section(from_value, to_value)
237
+ @smtpapi.add_section(from_value, to_value)
238
+ self
239
+ end
240
+
241
+ def set_unique_args(key_value_pairs)
242
+ @smtpapi.set_unique_args(key_value_pairs)
243
+ self
244
+ end
245
+
246
+ def add_unique_arg(key, value)
247
+ @smtpapi.add_unique_arg(key, value)
248
+ self
249
+ end
250
+
251
+ def set_filters(filter_settings)
252
+ @smtpapi.set_filters(filter_settings)
253
+ self
254
+ end
255
+
256
+ def add_filter(filter_name, parameter_name, parameter_value)
257
+ @smtpapi.add_filter(filter_name, parameter_name, parameter_value)
258
+ end
259
+
260
+ def get_headers()
261
+ @headers
262
+ end
263
+
264
+ def get_headers_json()
265
+ JSON.generate(@headers)
266
+ end
267
+
268
+ def set_headers(key_value_pairs)
269
+ @headers = key_value_pairs
270
+ self
271
+ end
272
+
273
+ def add_header(key, value)
274
+ @headers[key] = value
275
+ self
276
+ end
277
+
278
+ def remove_header(key)
279
+ @headers = remove_from_list(@headers, key)
280
+ self
281
+ end
282
+
283
+ def to_web_format()
284
+ web = {
285
+ 'to' => @to,
286
+ 'from' => get_from,
287
+ 'x-smtpapi' => @smtpapi.json_string,
288
+ 'subject' => @subject,
289
+ 'text' => @text,
290
+ 'html' => @html,
291
+ 'headers' => get_headers_json,
292
+ }
293
+
294
+ # web['cc'] = get_ccs if get_ccs
295
+ # web['bcc'] = get_bccs if get_bccs
296
+ web['fromname'] = @from_name if @from_name
297
+ web['replyto'] = @reply_to if @reply_to
298
+ web['to'] = @from if (@smtpapi.to && @smtpapi.to.length > 0)
299
+
300
+ if get_attachments
301
+ get_attachments.each do |f|
302
+
303
+ file = f['file']
304
+ extension = f['extension']
305
+ filename = f['filename']
306
+ full_filename = filename
307
+ full_filename = filename + extension if extension
308
+ full_filename = f['custom_filename'] if f['custom_filename']
309
+
310
+ contents = File.new(file, 'rb')
311
+
312
+ web["files[#{full_filename}]"] = contents
313
+ end
314
+ end
315
+ web
316
+ end
317
+
318
+ end
319
+ end
@@ -0,0 +1,3 @@
1
+ module SendgridRuby
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+ require "net/https"
4
+ require "rest-client"
5
+
6
+ module SendgridRuby
7
+ class Sendgrid
8
+
9
+ attr_accessor :debug_output
10
+
11
+ def initialize(username, password, options={"turn_off_ssl_verification" => false})
12
+ @username = username
13
+ @password = password
14
+ @options = options
15
+ @debug_output = false
16
+ end
17
+
18
+ def send(email)
19
+ form = email.to_web_format
20
+ form['api_user'] = @username
21
+ form['api_key'] = @password
22
+
23
+ RestClient.log = $stderr if @debug_output
24
+
25
+ response = RestClient.post 'https://api.sendgrid.com/api/mail.send.json', form, :content_type => :json
26
+
27
+ JSON.parse(response.body)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sendgrid_ruby/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sendgrid_ruby"
8
+ spec.version = SendgridRuby::VERSION
9
+ spec.authors = ["Wataru Sato"]
10
+ spec.email = ["awwa500@gmail.com"]
11
+ spec.summary = "Web API wrapper for SendGrid."
12
+ spec.description = "Web API wrapper for SendGrid."
13
+ spec.homepage = "https://github.com/sendgridjp/sendgrid-ruby"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "smtpapi"
22
+ spec.add_dependency "rest-client"
23
+ spec.add_development_dependency "bundler", "~> 1.5"
24
+ spec.add_development_dependency "rake"
25
+ end
data/test/file1.txt ADDED
@@ -0,0 +1 @@
1
+ こんにちは
data/test/file2.txt ADDED
@@ -0,0 +1 @@
1
+ こんにちは
data/test/file3.txt ADDED
@@ -0,0 +1 @@
1
+ こんにちは
data/test/gif ADDED
Binary file
data/test/gif.gif ADDED
Binary file