mailgunner 2.6.0 → 3.2.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,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailgunner
4
+ class Struct
5
+ def initialize(hash = nil)
6
+ @hash = hash || {}
7
+ end
8
+
9
+ def [](key)
10
+ @hash[key.to_s]
11
+ end
12
+
13
+ def []=(key, value)
14
+ @hash[key] = value
15
+ end
16
+
17
+ def to_h
18
+ @hash
19
+ end
20
+
21
+ def ==(other)
22
+ other.is_a?(self.class) && other.to_h == @hash
23
+ end
24
+
25
+ def respond_to_missing?(name, include_all)
26
+ @hash.key?(name.to_s)
27
+ end
28
+
29
+ def method_missing(name, *args)
30
+ return @hash[name.to_s] if @hash.key?(name.to_s)
31
+
32
+ super
33
+ end
34
+
35
+ def pretty_print(q)
36
+ q.object_address_group(self) do
37
+ q.seplist(@hash, lambda { q.text ',' }) do |key, value|
38
+ q.breakable
39
+ q.text key.to_s
40
+ q.text '='
41
+ q.group(1) {
42
+ q.breakable ''
43
+ q.pp value
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Mailgunner
2
- VERSION = '2.6.0'
2
+ VERSION = '3.2.1'
3
3
  end
@@ -7,21 +7,16 @@ Gem::Specification.new do |s|
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ['Tim Craft']
9
9
  s.email = ['mail@timcraft.com']
10
- s.homepage = 'http://github.com/readysteady/mailgunner'
10
+ s.homepage = 'https://github.com/readysteady/mailgunner'
11
11
  s.description = 'Ruby client for the Mailgun API'
12
12
  s.summary = 'Ruby client for the Mailgun API'
13
- s.files = Dir.glob('{lib,spec}/**/*') + %w(LICENSE.txt README.md mailgunner.gemspec)
14
- s.required_ruby_version = '>= 1.9.3'
15
- s.add_development_dependency('rake', '>= 12')
16
- s.add_development_dependency('webmock', '~> 3')
17
- s.add_development_dependency('mail', '~> 2')
18
- s.add_development_dependency('actionmailer', '~> 5')
19
- s.add_development_dependency('mocha', '~> 1')
13
+ s.files = Dir.glob('lib/**/*.rb') + %w(CHANGES.md LICENSE.txt README.md mailgunner.gemspec)
14
+ s.required_ruby_version = '>= 2.5.0'
20
15
  s.require_path = 'lib'
21
16
  s.metadata = {
22
17
  'homepage' => 'https://github.com/readysteady/mailgunner',
23
18
  'source_code_uri' => 'https://github.com/readysteady/mailgunner',
24
19
  'bug_tracker_uri' => 'https://github.com/readysteady/mailgunner/issues',
25
- 'changelog_uri' => 'https://github.com/readysteady/mailgunner/blob/master/CHANGES.md'
20
+ 'changelog_uri' => 'https://github.com/readysteady/mailgunner/blob/main/CHANGES.md'
26
21
  }
27
22
  end
metadata CHANGED
@@ -1,85 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailgunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Craft
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-16 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '12'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '12'
27
- - !ruby/object:Gem::Dependency
28
- name: webmock
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '3'
41
- - !ruby/object:Gem::Dependency
42
- name: mail
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2'
55
- - !ruby/object:Gem::Dependency
56
- name: actionmailer
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '5'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '5'
69
- - !ruby/object:Gem::Dependency
70
- name: mocha
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1'
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
+ dependencies: []
83
13
  description: Ruby client for the Mailgun API
84
14
  email:
85
15
  - mail@timcraft.com
@@ -87,6 +17,7 @@ executables: []
87
17
  extensions: []
88
18
  extra_rdoc_files: []
89
19
  files:
20
+ - CHANGES.md
90
21
  - LICENSE.txt
91
22
  - README.md
92
23
  - lib/mailgunner.rb
@@ -102,22 +33,23 @@ files:
102
33
  - lib/mailgunner/client/suppressions.rb
103
34
  - lib/mailgunner/client/tags.rb
104
35
  - lib/mailgunner/client/webhooks.rb
36
+ - lib/mailgunner/config.rb
105
37
  - lib/mailgunner/delivery_method.rb
106
38
  - lib/mailgunner/errors.rb
39
+ - lib/mailgunner/params.rb
107
40
  - lib/mailgunner/railtie.rb
41
+ - lib/mailgunner/struct.rb
108
42
  - lib/mailgunner/version.rb
109
43
  - mailgunner.gemspec
110
- - spec/mailgunner_delivery_method_spec.rb
111
- - spec/mailgunner_spec.rb
112
- homepage: http://github.com/readysteady/mailgunner
44
+ homepage: https://github.com/readysteady/mailgunner
113
45
  licenses:
114
46
  - LGPL-3.0
115
47
  metadata:
116
48
  homepage: https://github.com/readysteady/mailgunner
117
49
  source_code_uri: https://github.com/readysteady/mailgunner
118
50
  bug_tracker_uri: https://github.com/readysteady/mailgunner/issues
119
- changelog_uri: https://github.com/readysteady/mailgunner/blob/master/CHANGES.md
120
- post_install_message:
51
+ changelog_uri: https://github.com/readysteady/mailgunner/blob/main/CHANGES.md
52
+ post_install_message:
121
53
  rdoc_options: []
122
54
  require_paths:
123
55
  - lib
@@ -125,16 +57,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
57
  requirements:
126
58
  - - ">="
127
59
  - !ruby/object:Gem::Version
128
- version: 1.9.3
60
+ version: 2.5.0
129
61
  required_rubygems_version: !ruby/object:Gem::Requirement
130
62
  requirements:
131
63
  - - ">="
132
64
  - !ruby/object:Gem::Version
133
65
  version: '0'
134
66
  requirements: []
135
- rubyforge_project:
136
- rubygems_version: 2.7.6
137
- signing_key:
67
+ rubygems_version: 3.1.4
68
+ signing_key:
138
69
  specification_version: 4
139
70
  summary: Ruby client for the Mailgun API
140
71
  test_files: []
@@ -1,37 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'webmock/minitest'
3
- require 'action_mailer'
4
- require 'mailgunner'
5
- require 'mailgunner/delivery_method'
6
-
7
- class ExampleMailer < ActionMailer::Base
8
- default from: 'testing@localhost'
9
-
10
- def registration_confirmation(user)
11
- mail to: user[:email], subject: 'Welcome!', body: 'Hello!'
12
- end
13
- end
14
-
15
- describe 'Mailgunner::DeliveryMethod' do
16
- before do
17
- @api_key = 'xxx'
18
-
19
- @domain = 'samples.mailgun.org'
20
-
21
- @base_url = 'https://api.mailgun.net/v3'
22
-
23
- @auth = ['api', @api_key]
24
-
25
- @address = 'user@example.com'
26
-
27
- ActionMailer::Base.delivery_method = :mailgun
28
-
29
- ActionMailer::Base.mailgun_settings = {api_key: @api_key, domain: @domain}
30
- end
31
-
32
- it 'delivers the mail to mailgun in mime format' do
33
- stub_request(:post, "#@base_url/#@domain/messages.mime").with(basic_auth: @auth)
34
-
35
- ExampleMailer.registration_confirmation(email: @address).deliver_now
36
- end
37
- end
@@ -1,747 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'webmock/minitest'
3
- require 'mocha/setup'
4
- require 'mailgunner'
5
- require 'json'
6
- require 'mail'
7
-
8
- describe 'Mailgunner::Client' do
9
- before do
10
- @domain = 'samples.mailgun.org'
11
-
12
- @api_key = 'xxx'
13
-
14
- @base_url = 'https://@api.mailgun.net/v3'
15
-
16
- @json_response_object = {'key' => 'value'}
17
-
18
- @client = Mailgunner::Client.new(domain: @domain, api_key: @api_key)
19
-
20
- @address = 'user@example.com'
21
-
22
- @encoded_address = 'user%40example.com'
23
-
24
- @login = 'bob.bar'
25
-
26
- @id = 'idxxx'
27
- end
28
-
29
- def stub(http_method, url, body: nil, headers: nil)
30
- headers ||= {}
31
- headers['User-Agent'] = /\ARuby\/\d+\.\d+\.\d+ Mailgunner\/\d+\.\d+\.\d+\z/
32
-
33
- params = {basic_auth: ['api', @api_key]}
34
- params[:headers] = headers
35
- params[:body] = body if body
36
-
37
- response_headers = {'Content-Type' => 'application/json;charset=utf-8'}
38
- response_body = '{"key":"value"}'
39
-
40
- stub_request(http_method, url).with(params).to_return(headers: response_headers, body: response_body)
41
- end
42
-
43
- describe 'http method' do
44
- it 'returns a net http object' do
45
- @client.http.must_be_instance_of(Net::HTTP)
46
- end
47
- end
48
-
49
- describe 'http object' do
50
- it 'uses ssl' do
51
- @client.http.use_ssl?.must_equal(true)
52
- end
53
-
54
- it 'uses the address from the api_host option' do
55
- api_host = 'api.eu.mailgun.net'
56
-
57
- @client = Mailgunner::Client.new(api_key: @api_key, api_host: api_host)
58
-
59
- @client.http.address.must_equal(api_host)
60
- end
61
- end
62
-
63
- describe 'domain method' do
64
- it 'returns the value passed to the constructor' do
65
- @client.domain.must_equal(@domain)
66
- end
67
-
68
- it 'defaults to the domain in the MAILGUN_SMTP_LOGIN environment variable' do
69
- ENV['MAILGUN_SMTP_LOGIN'] = 'postmaster@samples.mailgun.org'
70
-
71
- Mailgunner::Client.new(api_key: @api_key).domain.must_equal(@domain)
72
-
73
- ENV.delete('MAILGUN_SMTP_LOGIN')
74
- end
75
- end
76
-
77
- describe 'api_key method' do
78
- it 'returns the value passed to the constructor' do
79
- @client.api_key.must_equal(@api_key)
80
- end
81
-
82
- it 'defaults to the value of MAILGUN_API_KEY environment variable' do
83
- ENV['MAILGUN_API_KEY'] = @api_key
84
-
85
- Mailgunner::Client.new(domain: @domain).api_key.must_equal(@api_key)
86
-
87
- ENV.delete('MAILGUN_API_KEY')
88
- end
89
- end
90
-
91
- describe 'validate_address method' do
92
- it 'calls the address validate resource with the given email address and returns the response object' do
93
- stub(:get, "#@base_url/address/validate?address=#@encoded_address")
94
-
95
- @client.validate_address(@address).must_equal(@json_response_object)
96
- end
97
- end
98
-
99
- describe 'parse_addresses method' do
100
- it 'calls the address parse resource with the given email addresses and returns the response object' do
101
- stub(:get, "#@base_url/address/parse?addresses=bob%40example.com%2Ceve%40example.com")
102
-
103
- @client.parse_addresses(['bob@example.com', 'eve@example.com']).must_equal(@json_response_object)
104
- end
105
- end
106
-
107
- describe 'get_message method' do
108
- it 'fetches the domain message resource with the given id and returns the response object' do
109
- stub(:get, "#@base_url/domains/#@domain/messages/#@id")
110
-
111
- @client.get_message(@id).must_equal(@json_response_object)
112
- end
113
- end
114
-
115
- describe 'get_mime_message method' do
116
- it 'fetches the domain message resource with the given key and returns the response object' do
117
- stub(:get, "#@base_url/domains/#@domain/messages/#@id", headers: {'Accept' => 'message/rfc2822'})
118
-
119
- @client.get_mime_message(@id).must_equal(@json_response_object)
120
- end
121
- end
122
-
123
- describe 'send_message method' do
124
- it 'posts to the domain messages resource and returns the response object' do
125
- stub(:post, "#@base_url/#@domain/messages", body: "to=#@encoded_address")
126
-
127
- @client.send_message({to: @address}).must_equal(@json_response_object)
128
- end
129
-
130
- it 'raises an exception if the domain is not provided' do
131
- @client = Mailgunner::Client.new(api_key: @api_key)
132
-
133
- exception = proc { @client.send_message({}) }.must_raise(Mailgunner::Error)
134
- exception.message.must_include('No domain provided')
135
- end
136
-
137
- it 'encodes the message attributes as multipart form data when sending attachments' do
138
- # TODO
139
- end
140
- end
141
-
142
- describe 'send_mime method' do
143
- before do
144
- @mail = Mail.new({
145
- to: 'alice@example.com',
146
- from: 'bob@example.com',
147
- subject: 'Test email',
148
- body: 'This is a test email'
149
- })
150
- end
151
-
152
- it 'posts to the domain messages resource and returns the response object' do
153
- stub(:post, "#@base_url/#@domain/messages.mime")
154
-
155
- @client.send_mime(@mail).must_equal(@json_response_object)
156
- end
157
-
158
- it 'includes all recipients of the message' do
159
- @mail.cc = 'carol@example.com'
160
- @mail.bcc = 'dave@example.com'
161
-
162
- stub(:post, "#@base_url/#@domain/messages.mime")
163
-
164
- recipients = 'alice@example.com,carol@example.com,dave@example.com'
165
-
166
- Net::HTTP::Post.any_instance.expects(:set_form).with(includes(['to', recipients]), 'multipart/form-data')
167
-
168
- @client.send_mime(@mail)
169
- end
170
- end
171
-
172
- describe 'delete_message method' do
173
- it 'deletes the domain message resource with the given key and returns the response object' do
174
- stub(:delete, "#@base_url/domains/#@domain/messages/#@id")
175
-
176
- @client.delete_message(@id).must_equal(@json_response_object)
177
- end
178
- end
179
-
180
- describe 'get_domains method' do
181
- it 'fetches the domains resource and returns the response object' do
182
- stub(:get, "#@base_url/domains")
183
-
184
- @client.get_domains.must_equal(@json_response_object)
185
- end
186
- end
187
-
188
- describe 'get_domain method' do
189
- it 'fetches the domain resource and returns the response object' do
190
- stub(:get, "#@base_url/domains/#@domain")
191
-
192
- @client.get_domain(@domain).must_equal(@json_response_object)
193
- end
194
- end
195
-
196
- describe 'add_domain method' do
197
- it 'posts to the domains resource and returns the response object' do
198
- stub(:post, "#@base_url/domains", body: "name=#@domain")
199
-
200
- @client.add_domain({name: @domain}).must_equal(@json_response_object)
201
- end
202
- end
203
-
204
- describe 'delete_domain method' do
205
- it 'deletes the domain resource with the given name and returns the response object' do
206
- stub(:delete, "#@base_url/domains/#@domain")
207
-
208
- @client.delete_domain(@domain).must_equal(@json_response_object)
209
- end
210
- end
211
-
212
- describe 'get_credentials method' do
213
- it 'fetches the domain credentials resource and returns the response object' do
214
- stub(:get, "#@base_url/domains/#@domain/credentials")
215
-
216
- @client.get_credentials.must_equal(@json_response_object)
217
- end
218
- end
219
-
220
- describe 'add_credentials method' do
221
- it 'posts to the domain credentials resource and returns the response object' do
222
- stub(:post, "#@base_url/domains/#@domain/credentials", body: "login=#@login")
223
-
224
- @client.add_credentials(login: @login).must_equal(@json_response_object)
225
- end
226
- end
227
-
228
- describe 'update_credentials method' do
229
- it 'updates the domain credentials resource with the given login and returns the response object' do
230
- stub(:put, "#@base_url/domains/#@domain/credentials/#@login", body: 'password=secret')
231
-
232
- @client.update_credentials(@login, {password: 'secret'}).must_equal(@json_response_object)
233
- end
234
- end
235
-
236
- describe 'delete_credentials method' do
237
- it 'deletes the domain credentials resource with the given login and returns the response object' do
238
- stub(:delete, "#@base_url/domains/#@domain/credentials/#@login")
239
-
240
- @client.delete_credentials(@login).must_equal(@json_response_object)
241
- end
242
- end
243
-
244
- describe 'get_connection_settings method' do
245
- it 'fetches the domain connection settings resource and returns the response object' do
246
- stub(:get, "#@base_url/domains/#@domain/connection")
247
-
248
- @client.get_connection_settings.must_equal(@json_response_object)
249
- end
250
- end
251
-
252
- describe 'update_connection_settings method' do
253
- it 'updates the domain connection settings resource and returns the response object' do
254
- stub(:put, "#@base_url/domains/#@domain/connection", body: 'require_tls=true')
255
-
256
- @client.update_connection_settings({require_tls: true}).must_equal(@json_response_object)
257
- end
258
- end
259
-
260
- describe 'get_unsubscribes method' do
261
- it 'fetches the domain unsubscribes resource and returns the response object' do
262
- stub(:get, "#@base_url/#@domain/unsubscribes")
263
-
264
- @client.get_unsubscribes.must_equal(@json_response_object)
265
- end
266
-
267
- it 'encodes skip and limit parameters' do
268
- stub(:get, "#@base_url/#@domain/unsubscribes?skip=1&limit=2")
269
-
270
- @client.get_unsubscribes(skip: 1, limit: 2)
271
- end
272
- end
273
-
274
- describe 'get_unsubscribe method' do
275
- it 'fetches the unsubscribe resource with the given address and returns the response object' do
276
- stub(:get, "#@base_url/#@domain/unsubscribes/#@encoded_address")
277
-
278
- @client.get_unsubscribe(@address).must_equal(@json_response_object)
279
- end
280
- end
281
-
282
- describe 'delete_unsubscribe method' do
283
- it 'deletes the domain unsubscribe resource with the given address and returns the response object' do
284
- stub(:delete, "#@base_url/#@domain/unsubscribes/#@encoded_address")
285
-
286
- @client.delete_unsubscribe(@address).must_equal(@json_response_object)
287
- end
288
- end
289
-
290
- describe 'add_unsubscribe method' do
291
- it 'posts to the domain unsubscribes resource and returns the response object' do
292
- stub(:post, "#@base_url/#@domain/unsubscribes", body: "address=#@encoded_address")
293
-
294
- @client.add_unsubscribe({address: @address}).must_equal(@json_response_object)
295
- end
296
- end
297
-
298
- describe 'get_complaints method' do
299
- it 'fetches the domain complaints resource and returns the response object' do
300
- stub(:get, "#@base_url/#@domain/complaints")
301
-
302
- @client.get_complaints.must_equal(@json_response_object)
303
- end
304
-
305
- it 'encodes skip and limit parameters' do
306
- stub(:get, "#@base_url/#@domain/complaints?skip=1&limit=2")
307
-
308
- @client.get_complaints(skip: 1, limit: 2)
309
- end
310
- end
311
-
312
- describe 'get_complaint method' do
313
- it 'fetches the complaint resource with the given address and returns the response object' do
314
- stub(:get, "#@base_url/#@domain/complaints/#@encoded_address")
315
-
316
- @client.get_complaint(@address).must_equal(@json_response_object)
317
- end
318
- end
319
-
320
- describe 'add_complaint method' do
321
- it 'posts to the domain complaints resource and returns the response object' do
322
- stub(:post, "#@base_url/#@domain/complaints", body: "address=#@encoded_address")
323
-
324
- @client.add_complaint({address: @address}).must_equal(@json_response_object)
325
- end
326
- end
327
-
328
- describe 'delete_complaint method' do
329
- it 'deletes the domain complaint resource with the given address and returns the response object' do
330
- stub(:delete, "#@base_url/#@domain/complaints/#@encoded_address")
331
-
332
- @client.delete_complaint(@address).must_equal(@json_response_object)
333
- end
334
- end
335
-
336
- describe 'get_bounces method' do
337
- it 'fetches the domain bounces resource and returns the response object' do
338
- stub(:get, "#@base_url/#@domain/bounces")
339
-
340
- @client.get_bounces.must_equal(@json_response_object)
341
- end
342
-
343
- it 'encodes skip and limit parameters' do
344
- stub(:get, "#@base_url/#@domain/bounces?skip=1&limit=2")
345
-
346
- @client.get_bounces(skip: 1, limit: 2)
347
- end
348
- end
349
-
350
- describe 'get_bounce method' do
351
- it 'fetches the bounce resource with the given address and returns the response object' do
352
- stub(:get, "#@base_url/#@domain/bounces/#@encoded_address")
353
-
354
- @client.get_bounce(@address).must_equal(@json_response_object)
355
- end
356
- end
357
-
358
- describe 'add_bounce method' do
359
- it 'posts to the domain bounces resource and returns the response object' do
360
- stub(:post, "#@base_url/#@domain/bounces", body: "address=#@encoded_address")
361
-
362
- @client.add_bounce({address: @address}).must_equal(@json_response_object)
363
- end
364
- end
365
-
366
- describe 'delete_bounce method' do
367
- it 'deletes the domain bounce resource with the given address and returns the response object' do
368
- stub(:delete, "#@base_url/#@domain/bounces/#@encoded_address")
369
-
370
- @client.delete_bounce(@address).must_equal(@json_response_object)
371
- end
372
- end
373
-
374
- describe 'delete_bounces method' do
375
- it 'deletes the domain bounces resource and returns the response object' do
376
- stub(:delete, "#@base_url/#@domain/bounces")
377
-
378
- @client.delete_bounces.must_equal(@json_response_object)
379
- end
380
- end
381
-
382
- describe 'get_stats method' do
383
- before do
384
- Kernel.stubs(:warn)
385
- end
386
-
387
- it 'fetches the domain stats resource and returns the response object' do
388
- stub(:get, "#@base_url/#@domain/stats")
389
-
390
- @client.get_stats.must_equal(@json_response_object)
391
- end
392
-
393
- it 'encodes skip and limit parameters' do
394
- stub(:get, "#@base_url/#@domain/stats?skip=1&limit=2")
395
-
396
- @client.get_stats(skip: 1, limit: 2)
397
- end
398
-
399
- it 'encodes an event parameter with multiple values' do
400
- WebMock::Config.instance.query_values_notation = :flat_array
401
-
402
- stub(:get, "#@base_url/#@domain/stats?event=opened&event=sent")
403
-
404
- @client.get_stats(event: %w(sent opened))
405
-
406
- WebMock::Config.instance.query_values_notation = nil
407
- end
408
-
409
- it 'emits a deprecation warning' do
410
- stub(:get, "#@base_url/#@domain/stats")
411
-
412
- Kernel.expects(:warn).with(regexp_matches(/Mailgunner::Client#get_stats is deprecated/))
413
-
414
- @client.get_stats
415
- end
416
- end
417
-
418
- describe 'get_total_stats method' do
419
- it 'fetches the domain total stats resource and returns the response object' do
420
- stub(:get, "#@base_url/#@domain/stats/total?event=delivered")
421
-
422
- @client.get_total_stats(event: 'delivered').must_equal(@json_response_object)
423
- end
424
-
425
- it 'encodes optional parameters' do
426
- stub(:get, "#@base_url/#@domain/stats/total?event=delivered&resolution=hour")
427
-
428
- @client.get_total_stats(event: 'delivered', resolution: 'hour')
429
- end
430
-
431
- it 'encodes an event parameter with multiple values' do
432
- WebMock::Config.instance.query_values_notation = :flat_array
433
-
434
- stub(:get, "#@base_url/#@domain/stats/total?event=delivered&event=accepted")
435
-
436
- @client.get_total_stats(event: %w(accepted delivered))
437
-
438
- WebMock::Config.instance.query_values_notation = nil
439
- end
440
- end
441
-
442
- describe 'get_events method' do
443
- it 'fetches the domain events resource and returns the response object' do
444
- stub(:get, "#@base_url/#@domain/events")
445
-
446
- @client.get_events.must_equal(@json_response_object)
447
- end
448
-
449
- it 'encodes optional parameters' do
450
- stub(:get, "#@base_url/#@domain/events?event=accepted&limit=10")
451
-
452
- @client.get_events(event: 'accepted', limit: 10)
453
- end
454
- end
455
-
456
- describe 'get_tags method' do
457
- it 'fetches the domain tags resource and returns the response object' do
458
- stub(:get, "#@base_url/#@domain/tags")
459
-
460
- @client.get_tags.must_equal(@json_response_object)
461
- end
462
-
463
- it 'encodes optional limit parameter' do
464
- stub(:get, "#@base_url/#@domain/tags?limit=2")
465
-
466
- @client.get_tags(limit: 2)
467
- end
468
- end
469
-
470
- describe 'get_tag method' do
471
- it 'fetches the domain tag resource with the given id and returns the response object' do
472
- stub(:get, "#@base_url/#@domain/tags/#@id")
473
-
474
- @client.get_tag(@id).must_equal(@json_response_object)
475
- end
476
- end
477
-
478
- describe 'update_tag method' do
479
- it 'updates the domain tag resource with the given id and returns the response object' do
480
- stub(:put, "#@base_url/#@domain/tags/#@id", body: 'description=Tag+description')
481
-
482
- @client.update_tag(@id, {description: 'Tag description'}).must_equal(@json_response_object)
483
- end
484
- end
485
-
486
- describe 'get_tag_stats method' do
487
- it 'fetches the domain tag stats resource with the given id and returns the response object' do
488
- stub(:get, "#@base_url/#@domain/tags/#@id/stats?event=accepted")
489
-
490
- @client.get_tag_stats(@id, event: 'accepted').must_equal(@json_response_object)
491
- end
492
- end
493
-
494
- describe 'delete_tag method' do
495
- it 'deletes the domain tag resource with the given id and returns the response object' do
496
- stub(:delete, "#@base_url/#@domain/tags/#@id")
497
-
498
- @client.delete_tag(@id).must_equal(@json_response_object)
499
- end
500
- end
501
-
502
- describe 'get_routes method' do
503
- it 'fetches the routes resource and returns the response object' do
504
- stub(:get, "#@base_url/routes")
505
-
506
- @client.get_routes.must_equal(@json_response_object)
507
- end
508
-
509
- it 'encodes skip and limit parameters' do
510
- stub(:get, "#@base_url/routes?skip=1&limit=2")
511
-
512
- @client.get_routes(skip: 1, limit: 2)
513
- end
514
- end
515
-
516
- describe 'get_route method' do
517
- it 'fetches the route resource with the given id and returns the response object' do
518
- stub(:get, "#@base_url/routes/#@id")
519
-
520
- @client.get_route(@id).must_equal(@json_response_object)
521
- end
522
- end
523
-
524
- describe 'add_route method' do
525
- it 'posts to the routes resource and returns the response object' do
526
- stub(:post, "#@base_url/routes", body: 'description=Example+route&priority=1')
527
-
528
- @client.add_route({description: 'Example route', priority: 1}).must_equal(@json_response_object)
529
- end
530
- end
531
-
532
- describe 'update_route method' do
533
- it 'updates the route resource with the given id and returns the response object' do
534
- stub(:put, "#@base_url/routes/#@id", body: 'priority=10')
535
-
536
- @client.update_route(@id, {priority: 10}).must_equal(@json_response_object)
537
- end
538
- end
539
-
540
- describe 'delete_route method' do
541
- it 'deletes the route resource with the given id and returns the response object' do
542
- stub(:delete, "#@base_url/routes/#@id")
543
-
544
- @client.delete_route(@id).must_equal(@json_response_object)
545
- end
546
- end
547
-
548
- describe 'get_webhooks method' do
549
- it 'fetches the domain webhooks resource and returns the response object' do
550
- stub(:get, "#@base_url/domains/#@domain/webhooks")
551
-
552
- @client.get_webhooks.must_equal(@json_response_object)
553
- end
554
- end
555
-
556
- describe 'get_webhook method' do
557
- it 'fetches the domain webhook resource with the given id and returns the response object' do
558
- stub(:get, "#@base_url/domains/#@domain/webhooks/#@id")
559
-
560
- @client.get_webhook(@id).must_equal(@json_response_object)
561
- end
562
- end
563
-
564
- describe 'add_webhook method' do
565
- it 'posts to the domain webhooks resource and returns the response object' do
566
- attributes = {id: @id, url: 'http://example.com/webhook'}
567
-
568
- stub(:post, "#@base_url/domains/#@domain/webhooks", body: attributes)
569
-
570
- @client.add_webhook(attributes).must_equal(@json_response_object)
571
- end
572
- end
573
-
574
- describe 'update_webhook method' do
575
- it 'updates the domain webhook resource with the given id and returns the response object' do
576
- attributes = {url: 'http://example.com/webhook'}
577
-
578
- stub(:put, "#@base_url/domains/#@domain/webhooks/#@id", body: attributes)
579
-
580
- @client.update_webhook(@id, attributes).must_equal(@json_response_object)
581
- end
582
- end
583
-
584
- describe 'delete_webhook method' do
585
- it 'deletes the domain webhook resource with the given address and returns the response object' do
586
- stub(:delete, "#@base_url/domains/#@domain/webhooks/#@id")
587
-
588
- @client.delete_webhook(@id).must_equal(@json_response_object)
589
- end
590
- end
591
-
592
- describe 'get_all_ips method' do
593
- it 'fetches the ips resource and returns the response object' do
594
- stub(:get, "#@base_url/ips")
595
-
596
- @client.get_all_ips.must_equal(@json_response_object)
597
- end
598
- end
599
-
600
- describe 'get_ip method' do
601
- it 'fetches the ip resource with the given address and returns the response object' do
602
- address = '127.0.0.1'
603
-
604
- stub(:get, "#@base_url/ips/#{address}")
605
-
606
- @client.get_ip(address).must_equal(@json_response_object)
607
- end
608
- end
609
-
610
- describe 'get_ips method' do
611
- it 'fetches the domain ips resource and returns the response object' do
612
- stub(:get, "#@base_url/domains/#@domain/ips")
613
-
614
- @client.get_ips.must_equal(@json_response_object)
615
- end
616
- end
617
-
618
- describe 'add_ip method' do
619
- it 'posts to the domain ips resource and returns the response object' do
620
- address = '127.0.0.1'
621
-
622
- stub(:post, "#@base_url/domains/#@domain/ips", body: {ip: address})
623
-
624
- @client.add_ip(address).must_equal(@json_response_object)
625
- end
626
- end
627
-
628
- describe 'delete_ip method' do
629
- it 'deletes the domain ip resource with the given address and returns the response object' do
630
- address = '127.0.0.1'
631
-
632
- stub(:delete, "#@base_url/domains/#@domain/ips/#{address}")
633
-
634
- @client.delete_ip(address).must_equal(@json_response_object)
635
- end
636
- end
637
-
638
- describe 'get_lists method' do
639
- it 'fetches the lists resource and returns the response object' do
640
- stub(:get, "#@base_url/lists")
641
-
642
- @client.get_lists.must_equal(@json_response_object)
643
- end
644
-
645
- it 'encodes skip and limit parameters' do
646
- stub(:get, "#@base_url/lists?skip=1&limit=2")
647
-
648
- @client.get_lists(skip: 1, limit: 2)
649
- end
650
- end
651
-
652
- describe 'get_list method' do
653
- it 'fetches the list resource with the given address and returns the response object' do
654
- stub(:get, "#@base_url/lists/developers%40mailgun.net")
655
-
656
- @client.get_list('developers@mailgun.net').must_equal(@json_response_object)
657
- end
658
- end
659
-
660
- describe 'add_list method' do
661
- it 'posts to the lists resource and returns the response object' do
662
- stub(:post, "#@base_url/lists", body: 'address=developers%40mailgun.net')
663
-
664
- @client.add_list({address: 'developers@mailgun.net'}).must_equal(@json_response_object)
665
- end
666
- end
667
-
668
- describe 'update_list method' do
669
- it 'updates the list resource and returns the response object' do
670
- stub(:put, "#@base_url/lists/developers%40mailgun.net", body: 'name=Example+list')
671
-
672
- @client.update_list('developers@mailgun.net', {name: 'Example list'}).must_equal(@json_response_object)
673
- end
674
- end
675
-
676
- describe 'delete_list method' do
677
- it 'deletes the list resource with the given address and returns the response object' do
678
- stub(:delete, "#@base_url/lists/developers%40mailgun.net")
679
-
680
- @client.delete_list('developers@mailgun.net').must_equal(@json_response_object)
681
- end
682
- end
683
-
684
- describe 'get_list_members method' do
685
- it 'fetches the list members resource and returns the response object' do
686
- stub(:get, "#@base_url/lists/developers%40mailgun.net/members")
687
-
688
- @client.get_list_members('developers@mailgun.net').must_equal(@json_response_object)
689
- end
690
-
691
- it 'encodes skip and limit parameters' do
692
- stub(:get, "#@base_url/lists/developers%40mailgun.net/members?skip=1&limit=2")
693
-
694
- @client.get_list_members('developers@mailgun.net', skip: 1, limit: 2)
695
- end
696
- end
697
-
698
- describe 'get_list_member method' do
699
- it 'fetches the list member resource with the given address and returns the response object' do
700
- stub(:get, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
701
-
702
- @client.get_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
703
- end
704
- end
705
-
706
- describe 'add_list_member method' do
707
- it 'posts to the list members resource and returns the response object' do
708
- stub(:post, "#@base_url/lists/developers%40mailgun.net/members", body: "address=#@encoded_address")
709
-
710
- @client.add_list_member('developers@mailgun.net', {address: @address}).must_equal(@json_response_object)
711
- end
712
- end
713
-
714
- describe 'update_list_member method' do
715
- it 'updates the list member resource with the given address and returns the response object' do
716
- stub(:put, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address", body: 'subscribed=no')
717
-
718
- @client.update_list_member('developers@mailgun.net', @address, {subscribed: 'no'}).must_equal(@json_response_object)
719
- end
720
- end
721
-
722
- describe 'delete_list_member method' do
723
- it 'deletes the list member resource with the given address and returns the response object' do
724
- stub(:delete, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
725
-
726
- @client.delete_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
727
- end
728
- end
729
-
730
- it 'raises an exception for authentication errors' do
731
- stub_request(:any, /api\.mailgun\.net/).to_return(status: 401)
732
-
733
- proc { @client.get_message(@id) }.must_raise(Mailgunner::AuthenticationError)
734
- end
735
-
736
- it 'raises an exception for client errors' do
737
- stub_request(:any, /api\.mailgun\.net/).to_return(status: 400)
738
-
739
- proc { @client.get_message(@id) }.must_raise(Mailgunner::ClientError)
740
- end
741
-
742
- it 'raises an exception for server errors' do
743
- stub_request(:any, /api\.mailgun\.net/).to_return(status: 500)
744
-
745
- proc { @client.get_message(@id) }.must_raise(Mailgunner::ServerError)
746
- end
747
- end