mailgunner 2.4.0 → 2.5.0
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.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -6
- data/README.md +19 -12
- data/lib/mailgunner.rb +40 -22
- data/lib/mailgunner/delivery_method.rb +15 -3
- data/lib/mailgunner/errors.rb +15 -0
- data/lib/mailgunner/version.rb +1 -1
- data/mailgunner.gemspec +5 -5
- data/spec/mailgunner_delivery_method_spec.rb +4 -14
- data/spec/mailgunner_spec.rb +167 -96
- metadata +16 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d953d49216e0419f517316128a12974aefc63ce7
|
4
|
+
data.tar.gz: 23857d5d6ddf925bb6d07a5f20c5069afe80d0e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b4c452b40c78d8d569efdc93ce24d0980616546e69fedde804721331ff47d536f93ceba3341c6f0ff7854a4a7957979e21121ba766980f29d01a876f2a0a5d5
|
7
|
+
data.tar.gz: 6e531aa0c226284e539f5e5b9128e30ef9c3fcd21da511dbacc95ec2c8c8b6ebe0ec41ef2d60469a2510a5b10355a3a91b17ce3c73a1842d10a79acb1fd441ae
|
data/LICENSE.txt
CHANGED
@@ -1,9 +1,4 @@
|
|
1
|
-
Copyright (c) TIMCRAFT
|
1
|
+
Copyright (c) 2012-2018 TIMCRAFT
|
2
2
|
|
3
3
|
This is an Open Source project licensed under the terms of the LGPLv3 license.
|
4
4
|
Please see <http://www.gnu.org/licenses/lgpl-3.0.html> for license text.
|
5
|
-
|
6
|
-
This code is distributed in the hope that it will be useful,
|
7
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
8
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
9
|
-
GNU Lesser General Public License for more details.
|
data/README.md
CHANGED
@@ -1,18 +1,17 @@
|
|
1
|
-
mailgunner
|
2
|
-
|
1
|
+
# mailgunner
|
2
|
+
|
3
|
+
[](https://badge.fury.io/rb/mailgunner) [](https://travis-ci.org/timcraft/mailgunner)
|
3
4
|
|
4
5
|
|
5
6
|
Ruby client for the [Mailgun API](http://documentation.mailgun.net/api_reference.html).
|
6
7
|
|
7
8
|
|
8
|
-
Installation
|
9
|
-
------------
|
9
|
+
## Installation
|
10
10
|
|
11
11
|
$ gem install mailgunner
|
12
12
|
|
13
13
|
|
14
|
-
Quick start
|
15
|
-
-----------
|
14
|
+
## Quick start
|
16
15
|
|
17
16
|
```ruby
|
18
17
|
require 'mailgunner'
|
@@ -26,8 +25,7 @@ response = mailgun.get_stats(limit: 5)
|
|
26
25
|
```
|
27
26
|
|
28
27
|
|
29
|
-
Storing the API key
|
30
|
-
-------------------
|
28
|
+
## Storing the API key
|
31
29
|
|
32
30
|
Best practice for storing credentials for external services is to use environment
|
33
31
|
variables, as described by [12factor.net/config](http://www.12factor.net/config).
|
@@ -36,8 +34,7 @@ from the MAILGUN_API_KEY and MAILGUN_SMTP_LOGIN environment variables. These wil
|
|
36
34
|
exist if you are using Mailgun on Heroku, or you can set them manually.
|
37
35
|
|
38
36
|
|
39
|
-
ActionMailer integration
|
40
|
-
------------------------
|
37
|
+
## ActionMailer integration
|
41
38
|
|
42
39
|
Mailgunner integrates with [ActionMailer](https://rubygems.org/gems/actionmailer).
|
43
40
|
If you are using Rails, you can use Mailgunner to send mail via Mailgun by adding
|
@@ -47,11 +44,21 @@ the following line to `config/environments/production.rb`:
|
|
47
44
|
config.action_mailer.delivery_method = :mailgun
|
48
45
|
````
|
49
46
|
|
47
|
+
If for some reason you can't set the required ENV variables, you can configure Mailgunner
|
48
|
+
through ActionMailer settings:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
config.action_mailer.mailgun_settings = {
|
52
|
+
domain: 'test.com'
|
53
|
+
api_key: 'your-api-key'
|
54
|
+
}
|
55
|
+
|
56
|
+
```
|
57
|
+
|
50
58
|
Outside of Rails you can set `ActionMailer::Base.delivery_method` directly.
|
51
59
|
|
52
60
|
|
53
|
-
Email validation
|
54
|
-
----------------
|
61
|
+
## Email validation
|
55
62
|
|
56
63
|
If you only need to use Mailgun's [email address validation service](http://documentation.mailgun.com/api-email-validation.html),
|
57
64
|
you can instead use your Mailgun public key to authenticate like this:
|
data/lib/mailgunner.rb
CHANGED
@@ -2,18 +2,11 @@ require 'net/http'
|
|
2
2
|
require 'json'
|
3
3
|
require 'cgi'
|
4
4
|
require 'mailgunner/version'
|
5
|
+
require 'mailgunner/errors'
|
5
6
|
require 'mailgunner/delivery_method' if defined?(Mail)
|
6
7
|
require 'mailgunner/railtie' if defined?(Rails)
|
7
8
|
|
8
9
|
module Mailgunner
|
9
|
-
class Error < StandardError; end
|
10
|
-
|
11
|
-
module NoDomainProvided
|
12
|
-
def self.to_s
|
13
|
-
raise Error, 'No domain provided'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
10
|
class Client
|
18
11
|
attr_accessor :domain, :api_key, :http
|
19
12
|
|
@@ -211,6 +204,26 @@ module Mailgunner
|
|
211
204
|
delete("/v3/routes/#{escape id}")
|
212
205
|
end
|
213
206
|
|
207
|
+
def get_webhooks
|
208
|
+
get("/v3/domains/#{escape @domain}/webhooks")
|
209
|
+
end
|
210
|
+
|
211
|
+
def get_webhook(id)
|
212
|
+
get("/v3/domains/#{escape @domain}/webhooks/#{escape id}")
|
213
|
+
end
|
214
|
+
|
215
|
+
def add_webhook(attributes = {})
|
216
|
+
post("/v3/domains/#{escape @domain}/webhooks", attributes)
|
217
|
+
end
|
218
|
+
|
219
|
+
def update_webhook(id, attributes = {})
|
220
|
+
put("/v3/domains/#{escape @domain}/webhooks/#{escape id}", attributes)
|
221
|
+
end
|
222
|
+
|
223
|
+
def delete_webhook(id)
|
224
|
+
delete("/v3/domains/#{escape @domain}/webhooks/#{escape id}")
|
225
|
+
end
|
226
|
+
|
214
227
|
def get_campaigns(params = {})
|
215
228
|
get("/v3/#{escape @domain}/campaigns", params)
|
216
229
|
end
|
@@ -333,31 +346,36 @@ module Mailgunner
|
|
333
346
|
end
|
334
347
|
|
335
348
|
def parse(response)
|
336
|
-
|
337
|
-
|
349
|
+
case response
|
350
|
+
when Net::HTTPSuccess
|
351
|
+
parse_success(response)
|
352
|
+
when Net::HTTPUnauthorized
|
353
|
+
raise AuthenticationError, "HTTP #{response.code}"
|
354
|
+
when Net::HTTPClientError
|
355
|
+
raise ClientError, "HTTP #{response.code}"
|
356
|
+
when Net::HTTPServerError
|
357
|
+
raise ServerError, "HTTP #{response.code}"
|
338
358
|
else
|
339
|
-
|
340
|
-
raise Error, "HTTP #{response.code}: #{JSON.parse(response.body).fetch('message')}"
|
341
|
-
else
|
342
|
-
raise Error, "HTTP #{response.code}"
|
343
|
-
end
|
359
|
+
raise Error, "HTTP #{response.code}"
|
344
360
|
end
|
345
361
|
end
|
346
362
|
|
363
|
+
def parse_success(response)
|
364
|
+
return JSON.parse(response.body) if json?(response)
|
365
|
+
|
366
|
+
response.body
|
367
|
+
end
|
368
|
+
|
347
369
|
def json?(response)
|
348
370
|
content_type = response['Content-Type']
|
349
371
|
|
350
372
|
content_type && content_type.split(';').first == 'application/json'
|
351
373
|
end
|
352
374
|
|
353
|
-
def request_uri(path,
|
354
|
-
return path if
|
355
|
-
|
356
|
-
query_params = hash.map do |key, values|
|
357
|
-
Array(values).map { |value| "#{escape(key)}=#{escape(value)}" }
|
358
|
-
end
|
375
|
+
def request_uri(path, params)
|
376
|
+
return path if params.empty?
|
359
377
|
|
360
|
-
path + '?' +
|
378
|
+
path + '?' + params.flat_map { |k, vs| Array(vs).map { |v| "#{escape(k)}=#{escape(v)}" } }.join('&')
|
361
379
|
end
|
362
380
|
|
363
381
|
def escape(component)
|
@@ -2,8 +2,6 @@ require 'mail/check_delivery_params'
|
|
2
2
|
|
3
3
|
module Mailgunner
|
4
4
|
class DeliveryMethod
|
5
|
-
include Mail::CheckDeliveryParams
|
6
|
-
|
7
5
|
attr_accessor :settings
|
8
6
|
|
9
7
|
def initialize(values)
|
@@ -11,10 +9,24 @@ module Mailgunner
|
|
11
9
|
end
|
12
10
|
|
13
11
|
def deliver!(mail)
|
14
|
-
|
12
|
+
check(mail)
|
15
13
|
|
16
14
|
@client.send_mime(mail)
|
17
15
|
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
if Mail::CheckDeliveryParams.respond_to?(:check) # mail v2.6.6+
|
20
|
+
def check(mail)
|
21
|
+
Mail::CheckDeliveryParams.check(mail)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
include Mail::CheckDeliveryParams
|
25
|
+
|
26
|
+
def check(mail)
|
27
|
+
check_delivery_params(mail)
|
28
|
+
end
|
29
|
+
end
|
18
30
|
end
|
19
31
|
|
20
32
|
if defined?(ActionMailer)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Mailgunner
|
2
|
+
class Error < StandardError; end
|
3
|
+
|
4
|
+
class ClientError < Error; end
|
5
|
+
|
6
|
+
class AuthenticationError < ClientError; end
|
7
|
+
|
8
|
+
class ServerError < Error; end
|
9
|
+
|
10
|
+
module NoDomainProvided
|
11
|
+
def self.to_s
|
12
|
+
raise Error, 'No domain provided'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/mailgunner/version.rb
CHANGED
data/mailgunner.gemspec
CHANGED
@@ -12,10 +12,10 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = 'Ruby client for the Mailgun API'
|
13
13
|
s.files = Dir.glob('{lib,spec}/**/*') + %w(LICENSE.txt README.md mailgunner.gemspec)
|
14
14
|
s.required_ruby_version = '>= 1.9.3'
|
15
|
-
s.add_development_dependency('rake', '
|
16
|
-
s.add_development_dependency('webmock', '~>
|
17
|
-
s.add_development_dependency('mail', '~> 2
|
18
|
-
s.add_development_dependency('actionmailer', '~>
|
19
|
-
s.add_development_dependency('mocha', '~> 1
|
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')
|
20
20
|
s.require_path = 'lib'
|
21
21
|
end
|
@@ -18,7 +18,9 @@ describe 'Mailgunner::DeliveryMethod' do
|
|
18
18
|
|
19
19
|
@domain = 'samples.mailgun.org'
|
20
20
|
|
21
|
-
@base_url =
|
21
|
+
@base_url = 'https://api.mailgun.net/v3'
|
22
|
+
|
23
|
+
@auth = ['api', @api_key]
|
22
24
|
|
23
25
|
@address = 'user@example.com'
|
24
26
|
|
@@ -28,20 +30,8 @@ describe 'Mailgunner::DeliveryMethod' do
|
|
28
30
|
end
|
29
31
|
|
30
32
|
it 'delivers the mail to mailgun in mime format' do
|
31
|
-
stub_request(:post, "#@base_url/#@domain/messages.mime")
|
33
|
+
stub_request(:post, "#@base_url/#@domain/messages.mime").with(basic_auth: @auth)
|
32
34
|
|
33
35
|
ExampleMailer.registration_confirmation(email: @address).deliver_now
|
34
36
|
end
|
35
|
-
|
36
|
-
it 'raises an exception if the api returns an error' do
|
37
|
-
stub_request(:post, "#@base_url/#@domain/messages.mime").to_return({
|
38
|
-
status: 403,
|
39
|
-
headers: {'Content-Type' => 'application/json'},
|
40
|
-
body: '{"message": "Invalid API key"}'
|
41
|
-
})
|
42
|
-
|
43
|
-
exception = proc { ExampleMailer.registration_confirmation(email: @address).deliver_now }.must_raise(Mailgunner::Error)
|
44
|
-
|
45
|
-
exception.message.must_include('Invalid API key')
|
46
|
-
end
|
47
37
|
end
|
data/spec/mailgunner_spec.rb
CHANGED
@@ -5,17 +5,13 @@ require 'mailgunner'
|
|
5
5
|
require 'json'
|
6
6
|
require 'mail'
|
7
7
|
|
8
|
-
WebMock::Config.instance.query_values_notation = :flat_array
|
9
|
-
|
10
8
|
describe 'Mailgunner::Client' do
|
11
9
|
before do
|
12
10
|
@domain = 'samples.mailgun.org'
|
13
11
|
|
14
12
|
@api_key = 'xxx'
|
15
13
|
|
16
|
-
@base_url =
|
17
|
-
|
18
|
-
@json_response = {headers: {'Content-Type' => 'application/json;charset=utf-8'}, body: '{"key":"value"}'}
|
14
|
+
@base_url = 'https://@api.mailgun.net/v3'
|
19
15
|
|
20
16
|
@json_response_object = {'key' => 'value'}
|
21
17
|
|
@@ -30,6 +26,20 @@ describe 'Mailgunner::Client' do
|
|
30
26
|
@id = 'idxxx'
|
31
27
|
end
|
32
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
|
+
|
33
43
|
describe 'http method' do
|
34
44
|
it 'returns a net http object that uses ssl' do
|
35
45
|
@client.http.must_be_instance_of(Net::HTTP)
|
@@ -68,7 +78,7 @@ describe 'Mailgunner::Client' do
|
|
68
78
|
|
69
79
|
describe 'validate_address method' do
|
70
80
|
it 'calls the address validate resource with the given email address and returns the response object' do
|
71
|
-
|
81
|
+
stub(:get, "#@base_url/address/validate?address=#@encoded_address")
|
72
82
|
|
73
83
|
@client.validate_address(@address).must_equal(@json_response_object)
|
74
84
|
end
|
@@ -76,7 +86,7 @@ describe 'Mailgunner::Client' do
|
|
76
86
|
|
77
87
|
describe 'parse_addresses method' do
|
78
88
|
it 'calls the address parse resource with the given email addresses and returns the response object' do
|
79
|
-
|
89
|
+
stub(:get, "#@base_url/address/parse?addresses=bob%40example.com%2Ceve%40example.com")
|
80
90
|
|
81
91
|
@client.parse_addresses(['bob@example.com', 'eve@example.com']).must_equal(@json_response_object)
|
82
92
|
end
|
@@ -84,7 +94,7 @@ describe 'Mailgunner::Client' do
|
|
84
94
|
|
85
95
|
describe 'get_message method' do
|
86
96
|
it 'fetches the domain message resource with the given id and returns the response object' do
|
87
|
-
|
97
|
+
stub(:get, "#@base_url/domains/#@domain/messages/#@id")
|
88
98
|
|
89
99
|
@client.get_message(@id).must_equal(@json_response_object)
|
90
100
|
end
|
@@ -92,8 +102,7 @@ describe 'Mailgunner::Client' do
|
|
92
102
|
|
93
103
|
describe 'get_mime_message method' do
|
94
104
|
it 'fetches the domain message resource with the given key and returns the response object' do
|
95
|
-
|
96
|
-
with(headers: {'Accept' => 'message/rfc2822'}).to_return(@json_response)
|
105
|
+
stub(:get, "#@base_url/domains/#@domain/messages/#@id", headers: {'Accept' => 'message/rfc2822'})
|
97
106
|
|
98
107
|
@client.get_mime_message(@id).must_equal(@json_response_object)
|
99
108
|
end
|
@@ -101,7 +110,7 @@ describe 'Mailgunner::Client' do
|
|
101
110
|
|
102
111
|
describe 'send_message method' do
|
103
112
|
it 'posts to the domain messages resource and returns the response object' do
|
104
|
-
|
113
|
+
stub(:post, "#@base_url/#@domain/messages", body: "to=#@encoded_address")
|
105
114
|
|
106
115
|
@client.send_message({to: @address}).must_equal(@json_response_object)
|
107
116
|
end
|
@@ -129,7 +138,7 @@ describe 'Mailgunner::Client' do
|
|
129
138
|
end
|
130
139
|
|
131
140
|
it 'posts to the domain messages resource and returns the response object' do
|
132
|
-
|
141
|
+
stub(:post, "#@base_url/#@domain/messages.mime")
|
133
142
|
|
134
143
|
@client.send_mime(@mail).must_equal(@json_response_object)
|
135
144
|
end
|
@@ -138,7 +147,7 @@ describe 'Mailgunner::Client' do
|
|
138
147
|
@mail.cc = 'carol@example.com'
|
139
148
|
@mail.bcc = 'dave@example.com'
|
140
149
|
|
141
|
-
|
150
|
+
stub(:post, "#@base_url/#@domain/messages.mime")
|
142
151
|
|
143
152
|
recipients = 'alice@example.com,carol@example.com,dave@example.com'
|
144
153
|
|
@@ -150,7 +159,7 @@ describe 'Mailgunner::Client' do
|
|
150
159
|
|
151
160
|
describe 'delete_message method' do
|
152
161
|
it 'deletes the domain message resource with the given key and returns the response object' do
|
153
|
-
|
162
|
+
stub(:delete, "#@base_url/domains/#@domain/messages/#@id")
|
154
163
|
|
155
164
|
@client.delete_message(@id).must_equal(@json_response_object)
|
156
165
|
end
|
@@ -158,7 +167,7 @@ describe 'Mailgunner::Client' do
|
|
158
167
|
|
159
168
|
describe 'get_domains method' do
|
160
169
|
it 'fetches the domains resource and returns the response object' do
|
161
|
-
|
170
|
+
stub(:get, "#@base_url/domains")
|
162
171
|
|
163
172
|
@client.get_domains.must_equal(@json_response_object)
|
164
173
|
end
|
@@ -166,7 +175,7 @@ describe 'Mailgunner::Client' do
|
|
166
175
|
|
167
176
|
describe 'get_domain method' do
|
168
177
|
it 'fetches the domain resource and returns the response object' do
|
169
|
-
|
178
|
+
stub(:get, "#@base_url/domains/#@domain")
|
170
179
|
|
171
180
|
@client.get_domain(@domain).must_equal(@json_response_object)
|
172
181
|
end
|
@@ -174,7 +183,7 @@ describe 'Mailgunner::Client' do
|
|
174
183
|
|
175
184
|
describe 'add_domain method' do
|
176
185
|
it 'posts to the domains resource and returns the response object' do
|
177
|
-
|
186
|
+
stub(:post, "#@base_url/domains", body: "name=#@domain")
|
178
187
|
|
179
188
|
@client.add_domain({name: @domain}).must_equal(@json_response_object)
|
180
189
|
end
|
@@ -182,7 +191,7 @@ describe 'Mailgunner::Client' do
|
|
182
191
|
|
183
192
|
describe 'delete_domain method' do
|
184
193
|
it 'deletes the domain resource with the given name and returns the response object' do
|
185
|
-
|
194
|
+
stub(:delete, "#@base_url/domains/#@domain")
|
186
195
|
|
187
196
|
@client.delete_domain(@domain).must_equal(@json_response_object)
|
188
197
|
end
|
@@ -190,7 +199,7 @@ describe 'Mailgunner::Client' do
|
|
190
199
|
|
191
200
|
describe 'get_credentials method' do
|
192
201
|
it 'fetches the domain credentials resource and returns the response object' do
|
193
|
-
|
202
|
+
stub(:get, "#@base_url/domains/#@domain/credentials")
|
194
203
|
|
195
204
|
@client.get_credentials.must_equal(@json_response_object)
|
196
205
|
end
|
@@ -198,7 +207,7 @@ describe 'Mailgunner::Client' do
|
|
198
207
|
|
199
208
|
describe 'add_credentials method' do
|
200
209
|
it 'posts to the domain credentials resource and returns the response object' do
|
201
|
-
|
210
|
+
stub(:post, "#@base_url/domains/#@domain/credentials", body: "login=#@login")
|
202
211
|
|
203
212
|
@client.add_credentials(login: @login).must_equal(@json_response_object)
|
204
213
|
end
|
@@ -206,7 +215,7 @@ describe 'Mailgunner::Client' do
|
|
206
215
|
|
207
216
|
describe 'update_credentials method' do
|
208
217
|
it 'updates the domain credentials resource with the given login and returns the response object' do
|
209
|
-
|
218
|
+
stub(:put, "#@base_url/domains/#@domain/credentials/#@login", body: 'password=secret')
|
210
219
|
|
211
220
|
@client.update_credentials(@login, {password: 'secret'}).must_equal(@json_response_object)
|
212
221
|
end
|
@@ -214,7 +223,7 @@ describe 'Mailgunner::Client' do
|
|
214
223
|
|
215
224
|
describe 'delete_credentials method' do
|
216
225
|
it 'deletes the domain credentials resource with the given login and returns the response object' do
|
217
|
-
|
226
|
+
stub(:delete, "#@base_url/domains/#@domain/credentials/#@login")
|
218
227
|
|
219
228
|
@client.delete_credentials(@login).must_equal(@json_response_object)
|
220
229
|
end
|
@@ -222,7 +231,7 @@ describe 'Mailgunner::Client' do
|
|
222
231
|
|
223
232
|
describe 'get_connection_settings method' do
|
224
233
|
it 'fetches the domain connection settings resource and returns the response object' do
|
225
|
-
|
234
|
+
stub(:get, "#@base_url/domains/#@domain/connection")
|
226
235
|
|
227
236
|
@client.get_connection_settings.must_equal(@json_response_object)
|
228
237
|
end
|
@@ -230,7 +239,7 @@ describe 'Mailgunner::Client' do
|
|
230
239
|
|
231
240
|
describe 'update_connection_settings method' do
|
232
241
|
it 'updates the domain connection settings resource and returns the response object' do
|
233
|
-
|
242
|
+
stub(:put, "#@base_url/domains/#@domain/connection", body: 'require_tls=true')
|
234
243
|
|
235
244
|
@client.update_connection_settings({require_tls: true}).must_equal(@json_response_object)
|
236
245
|
end
|
@@ -238,13 +247,13 @@ describe 'Mailgunner::Client' do
|
|
238
247
|
|
239
248
|
describe 'get_unsubscribes method' do
|
240
249
|
it 'fetches the domain unsubscribes resource and returns the response object' do
|
241
|
-
|
250
|
+
stub(:get, "#@base_url/#@domain/unsubscribes")
|
242
251
|
|
243
252
|
@client.get_unsubscribes.must_equal(@json_response_object)
|
244
253
|
end
|
245
254
|
|
246
255
|
it 'encodes skip and limit parameters' do
|
247
|
-
|
256
|
+
stub(:get, "#@base_url/#@domain/unsubscribes?skip=1&limit=2")
|
248
257
|
|
249
258
|
@client.get_unsubscribes(skip: 1, limit: 2)
|
250
259
|
end
|
@@ -252,7 +261,7 @@ describe 'Mailgunner::Client' do
|
|
252
261
|
|
253
262
|
describe 'get_unsubscribe method' do
|
254
263
|
it 'fetches the unsubscribe resource with the given address and returns the response object' do
|
255
|
-
|
264
|
+
stub(:get, "#@base_url/#@domain/unsubscribes/#@encoded_address")
|
256
265
|
|
257
266
|
@client.get_unsubscribe(@address).must_equal(@json_response_object)
|
258
267
|
end
|
@@ -260,7 +269,7 @@ describe 'Mailgunner::Client' do
|
|
260
269
|
|
261
270
|
describe 'delete_unsubscribe method' do
|
262
271
|
it 'deletes the domain unsubscribe resource with the given address and returns the response object' do
|
263
|
-
|
272
|
+
stub(:delete, "#@base_url/#@domain/unsubscribes/#@encoded_address")
|
264
273
|
|
265
274
|
@client.delete_unsubscribe(@address).must_equal(@json_response_object)
|
266
275
|
end
|
@@ -268,7 +277,7 @@ describe 'Mailgunner::Client' do
|
|
268
277
|
|
269
278
|
describe 'add_unsubscribe method' do
|
270
279
|
it 'posts to the domain unsubscribes resource and returns the response object' do
|
271
|
-
|
280
|
+
stub(:post, "#@base_url/#@domain/unsubscribes", body: "address=#@encoded_address")
|
272
281
|
|
273
282
|
@client.add_unsubscribe({address: @address}).must_equal(@json_response_object)
|
274
283
|
end
|
@@ -276,13 +285,13 @@ describe 'Mailgunner::Client' do
|
|
276
285
|
|
277
286
|
describe 'get_complaints method' do
|
278
287
|
it 'fetches the domain complaints resource and returns the response object' do
|
279
|
-
|
288
|
+
stub(:get, "#@base_url/#@domain/complaints")
|
280
289
|
|
281
290
|
@client.get_complaints.must_equal(@json_response_object)
|
282
291
|
end
|
283
292
|
|
284
293
|
it 'encodes skip and limit parameters' do
|
285
|
-
|
294
|
+
stub(:get, "#@base_url/#@domain/complaints?skip=1&limit=2")
|
286
295
|
|
287
296
|
@client.get_complaints(skip: 1, limit: 2)
|
288
297
|
end
|
@@ -290,7 +299,7 @@ describe 'Mailgunner::Client' do
|
|
290
299
|
|
291
300
|
describe 'get_complaint method' do
|
292
301
|
it 'fetches the complaint resource with the given address and returns the response object' do
|
293
|
-
|
302
|
+
stub(:get, "#@base_url/#@domain/complaints/#@encoded_address")
|
294
303
|
|
295
304
|
@client.get_complaint(@address).must_equal(@json_response_object)
|
296
305
|
end
|
@@ -298,7 +307,7 @@ describe 'Mailgunner::Client' do
|
|
298
307
|
|
299
308
|
describe 'add_complaint method' do
|
300
309
|
it 'posts to the domain complaints resource and returns the response object' do
|
301
|
-
|
310
|
+
stub(:post, "#@base_url/#@domain/complaints", body: "address=#@encoded_address")
|
302
311
|
|
303
312
|
@client.add_complaint({address: @address}).must_equal(@json_response_object)
|
304
313
|
end
|
@@ -306,7 +315,7 @@ describe 'Mailgunner::Client' do
|
|
306
315
|
|
307
316
|
describe 'delete_complaint method' do
|
308
317
|
it 'deletes the domain complaint resource with the given address and returns the response object' do
|
309
|
-
|
318
|
+
stub(:delete, "#@base_url/#@domain/complaints/#@encoded_address")
|
310
319
|
|
311
320
|
@client.delete_complaint(@address).must_equal(@json_response_object)
|
312
321
|
end
|
@@ -314,13 +323,13 @@ describe 'Mailgunner::Client' do
|
|
314
323
|
|
315
324
|
describe 'get_bounces method' do
|
316
325
|
it 'fetches the domain bounces resource and returns the response object' do
|
317
|
-
|
326
|
+
stub(:get, "#@base_url/#@domain/bounces")
|
318
327
|
|
319
328
|
@client.get_bounces.must_equal(@json_response_object)
|
320
329
|
end
|
321
330
|
|
322
331
|
it 'encodes skip and limit parameters' do
|
323
|
-
|
332
|
+
stub(:get, "#@base_url/#@domain/bounces?skip=1&limit=2")
|
324
333
|
|
325
334
|
@client.get_bounces(skip: 1, limit: 2)
|
326
335
|
end
|
@@ -328,7 +337,7 @@ describe 'Mailgunner::Client' do
|
|
328
337
|
|
329
338
|
describe 'get_bounce method' do
|
330
339
|
it 'fetches the bounce resource with the given address and returns the response object' do
|
331
|
-
|
340
|
+
stub(:get, "#@base_url/#@domain/bounces/#@encoded_address")
|
332
341
|
|
333
342
|
@client.get_bounce(@address).must_equal(@json_response_object)
|
334
343
|
end
|
@@ -336,7 +345,7 @@ describe 'Mailgunner::Client' do
|
|
336
345
|
|
337
346
|
describe 'add_bounce method' do
|
338
347
|
it 'posts to the domain bounces resource and returns the response object' do
|
339
|
-
|
348
|
+
stub(:post, "#@base_url/#@domain/bounces", body: "address=#@encoded_address")
|
340
349
|
|
341
350
|
@client.add_bounce({address: @address}).must_equal(@json_response_object)
|
342
351
|
end
|
@@ -344,7 +353,7 @@ describe 'Mailgunner::Client' do
|
|
344
353
|
|
345
354
|
describe 'delete_bounce method' do
|
346
355
|
it 'deletes the domain bounce resource with the given address and returns the response object' do
|
347
|
-
|
356
|
+
stub(:delete, "#@base_url/#@domain/bounces/#@encoded_address")
|
348
357
|
|
349
358
|
@client.delete_bounce(@address).must_equal(@json_response_object)
|
350
359
|
end
|
@@ -352,7 +361,7 @@ describe 'Mailgunner::Client' do
|
|
352
361
|
|
353
362
|
describe 'delete_bounces method' do
|
354
363
|
it 'deletes the domain bounces resource and returns the response object' do
|
355
|
-
|
364
|
+
stub(:delete, "#@base_url/#@domain/bounces")
|
356
365
|
|
357
366
|
@client.delete_bounces.must_equal(@json_response_object)
|
358
367
|
end
|
@@ -364,25 +373,29 @@ describe 'Mailgunner::Client' do
|
|
364
373
|
end
|
365
374
|
|
366
375
|
it 'fetches the domain stats resource and returns the response object' do
|
367
|
-
|
376
|
+
stub(:get, "#@base_url/#@domain/stats")
|
368
377
|
|
369
378
|
@client.get_stats.must_equal(@json_response_object)
|
370
379
|
end
|
371
380
|
|
372
381
|
it 'encodes skip and limit parameters' do
|
373
|
-
|
382
|
+
stub(:get, "#@base_url/#@domain/stats?skip=1&limit=2")
|
374
383
|
|
375
384
|
@client.get_stats(skip: 1, limit: 2)
|
376
385
|
end
|
377
386
|
|
378
387
|
it 'encodes an event parameter with multiple values' do
|
379
|
-
|
388
|
+
WebMock::Config.instance.query_values_notation = :flat_array
|
389
|
+
|
390
|
+
stub(:get, "#@base_url/#@domain/stats?event=opened&event=sent")
|
380
391
|
|
381
392
|
@client.get_stats(event: %w(sent opened))
|
393
|
+
|
394
|
+
WebMock::Config.instance.query_values_notation = nil
|
382
395
|
end
|
383
396
|
|
384
397
|
it 'emits a deprecation warning' do
|
385
|
-
|
398
|
+
stub(:get, "#@base_url/#@domain/stats")
|
386
399
|
|
387
400
|
Kernel.expects(:warn).with(regexp_matches(/Mailgunner::Client#get_stats is deprecated/))
|
388
401
|
|
@@ -392,33 +405,37 @@ describe 'Mailgunner::Client' do
|
|
392
405
|
|
393
406
|
describe 'get_total_stats method' do
|
394
407
|
it 'fetches the domain total stats resource and returns the response object' do
|
395
|
-
|
408
|
+
stub(:get, "#@base_url/#@domain/stats/total?event=delivered")
|
396
409
|
|
397
410
|
@client.get_total_stats(event: 'delivered').must_equal(@json_response_object)
|
398
411
|
end
|
399
412
|
|
400
413
|
it 'encodes optional parameters' do
|
401
|
-
|
414
|
+
stub(:get, "#@base_url/#@domain/stats/total?event=delivered&resolution=hour")
|
402
415
|
|
403
416
|
@client.get_total_stats(event: 'delivered', resolution: 'hour')
|
404
417
|
end
|
405
418
|
|
406
|
-
it 'encodes
|
407
|
-
|
419
|
+
it 'encodes an event parameter with multiple values' do
|
420
|
+
WebMock::Config.instance.query_values_notation = :flat_array
|
421
|
+
|
422
|
+
stub(:get, "#@base_url/#@domain/stats/total?event=delivered&event=accepted")
|
408
423
|
|
409
424
|
@client.get_total_stats(event: %w(accepted delivered))
|
425
|
+
|
426
|
+
WebMock::Config.instance.query_values_notation = nil
|
410
427
|
end
|
411
428
|
end
|
412
429
|
|
413
430
|
describe 'get_events method' do
|
414
431
|
it 'fetches the domain events resource and returns the response object' do
|
415
|
-
|
432
|
+
stub(:get, "#@base_url/#@domain/events")
|
416
433
|
|
417
434
|
@client.get_events.must_equal(@json_response_object)
|
418
435
|
end
|
419
436
|
|
420
437
|
it 'encodes optional parameters' do
|
421
|
-
|
438
|
+
stub(:get, "#@base_url/#@domain/events?event=accepted&limit=10")
|
422
439
|
|
423
440
|
@client.get_events(event: 'accepted', limit: 10)
|
424
441
|
end
|
@@ -426,13 +443,13 @@ describe 'Mailgunner::Client' do
|
|
426
443
|
|
427
444
|
describe 'get_tags method' do
|
428
445
|
it 'fetches the domain tags resource and returns the response object' do
|
429
|
-
|
446
|
+
stub(:get, "#@base_url/#@domain/tags")
|
430
447
|
|
431
448
|
@client.get_tags.must_equal(@json_response_object)
|
432
449
|
end
|
433
450
|
|
434
451
|
it 'encodes optional limit parameter' do
|
435
|
-
|
452
|
+
stub(:get, "#@base_url/#@domain/tags?limit=2")
|
436
453
|
|
437
454
|
@client.get_tags(limit: 2)
|
438
455
|
end
|
@@ -440,7 +457,7 @@ describe 'Mailgunner::Client' do
|
|
440
457
|
|
441
458
|
describe 'get_tag method' do
|
442
459
|
it 'fetches the domain tag resource with the given id and returns the response object' do
|
443
|
-
|
460
|
+
stub(:get, "#@base_url/#@domain/tags/#@id")
|
444
461
|
|
445
462
|
@client.get_tag(@id).must_equal(@json_response_object)
|
446
463
|
end
|
@@ -448,7 +465,7 @@ describe 'Mailgunner::Client' do
|
|
448
465
|
|
449
466
|
describe 'update_tag method' do
|
450
467
|
it 'updates the domain tag resource with the given id and returns the response object' do
|
451
|
-
|
468
|
+
stub(:put, "#@base_url/#@domain/tags/#@id", body: 'description=Tag+description')
|
452
469
|
|
453
470
|
@client.update_tag(@id, {description: 'Tag description'}).must_equal(@json_response_object)
|
454
471
|
end
|
@@ -456,7 +473,7 @@ describe 'Mailgunner::Client' do
|
|
456
473
|
|
457
474
|
describe 'get_tag_stats method' do
|
458
475
|
it 'fetches the domain tag stats resource with the given id and returns the response object' do
|
459
|
-
|
476
|
+
stub(:get, "#@base_url/#@domain/tags/#@id/stats?event=accepted")
|
460
477
|
|
461
478
|
@client.get_tag_stats(@id, event: 'accepted').must_equal(@json_response_object)
|
462
479
|
end
|
@@ -464,7 +481,7 @@ describe 'Mailgunner::Client' do
|
|
464
481
|
|
465
482
|
describe 'delete_tag method' do
|
466
483
|
it 'deletes the domain tag resource with the given id and returns the response object' do
|
467
|
-
|
484
|
+
stub(:delete, "#@base_url/#@domain/tags/#@id")
|
468
485
|
|
469
486
|
@client.delete_tag(@id).must_equal(@json_response_object)
|
470
487
|
end
|
@@ -472,13 +489,13 @@ describe 'Mailgunner::Client' do
|
|
472
489
|
|
473
490
|
describe 'get_routes method' do
|
474
491
|
it 'fetches the routes resource and returns the response object' do
|
475
|
-
|
492
|
+
stub(:get, "#@base_url/routes")
|
476
493
|
|
477
494
|
@client.get_routes.must_equal(@json_response_object)
|
478
495
|
end
|
479
496
|
|
480
497
|
it 'encodes skip and limit parameters' do
|
481
|
-
|
498
|
+
stub(:get, "#@base_url/routes?skip=1&limit=2")
|
482
499
|
|
483
500
|
@client.get_routes(skip: 1, limit: 2)
|
484
501
|
end
|
@@ -486,7 +503,7 @@ describe 'Mailgunner::Client' do
|
|
486
503
|
|
487
504
|
describe 'get_route method' do
|
488
505
|
it 'fetches the route resource with the given id and returns the response object' do
|
489
|
-
|
506
|
+
stub(:get, "#@base_url/routes/#@id")
|
490
507
|
|
491
508
|
@client.get_route(@id).must_equal(@json_response_object)
|
492
509
|
end
|
@@ -494,7 +511,7 @@ describe 'Mailgunner::Client' do
|
|
494
511
|
|
495
512
|
describe 'add_route method' do
|
496
513
|
it 'posts to the routes resource and returns the response object' do
|
497
|
-
|
514
|
+
stub(:post, "#@base_url/routes", body: 'description=Example+route&priority=1')
|
498
515
|
|
499
516
|
@client.add_route({description: 'Example route', priority: 1}).must_equal(@json_response_object)
|
500
517
|
end
|
@@ -502,7 +519,7 @@ describe 'Mailgunner::Client' do
|
|
502
519
|
|
503
520
|
describe 'update_route method' do
|
504
521
|
it 'updates the route resource with the given id and returns the response object' do
|
505
|
-
|
522
|
+
stub(:put, "#@base_url/routes/#@id", body: 'priority=10')
|
506
523
|
|
507
524
|
@client.update_route(@id, {priority: 10}).must_equal(@json_response_object)
|
508
525
|
end
|
@@ -510,21 +527,65 @@ describe 'Mailgunner::Client' do
|
|
510
527
|
|
511
528
|
describe 'delete_route method' do
|
512
529
|
it 'deletes the route resource with the given id and returns the response object' do
|
513
|
-
|
530
|
+
stub(:delete, "#@base_url/routes/#@id")
|
514
531
|
|
515
532
|
@client.delete_route(@id).must_equal(@json_response_object)
|
516
533
|
end
|
517
534
|
end
|
518
535
|
|
536
|
+
describe 'get_webhooks method' do
|
537
|
+
it 'fetches the domain webhooks resource and returns the response object' do
|
538
|
+
stub(:get, "#@base_url/domains/#@domain/webhooks")
|
539
|
+
|
540
|
+
@client.get_webhooks.must_equal(@json_response_object)
|
541
|
+
end
|
542
|
+
end
|
543
|
+
|
544
|
+
describe 'get_webhook method' do
|
545
|
+
it 'fetches the domain webhook resource with the given id and returns the response object' do
|
546
|
+
stub(:get, "#@base_url/domains/#@domain/webhooks/#@id")
|
547
|
+
|
548
|
+
@client.get_webhook(@id).must_equal(@json_response_object)
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
describe 'add_webhook method' do
|
553
|
+
it 'posts to the domain webhooks resource and returns the response object' do
|
554
|
+
attributes = {id: @id, url: 'http://example.com/webhook'}
|
555
|
+
|
556
|
+
stub(:post, "#@base_url/domains/#@domain/webhooks", body: attributes)
|
557
|
+
|
558
|
+
@client.add_webhook(attributes).must_equal(@json_response_object)
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
describe 'update_webhook method' do
|
563
|
+
it 'updates the domain webhook resource with the given id and returns the response object' do
|
564
|
+
attributes = {url: 'http://example.com/webhook'}
|
565
|
+
|
566
|
+
stub(:put, "#@base_url/domains/#@domain/webhooks/#@id", body: attributes)
|
567
|
+
|
568
|
+
@client.update_webhook(@id, attributes).must_equal(@json_response_object)
|
569
|
+
end
|
570
|
+
end
|
571
|
+
|
572
|
+
describe 'delete_webhook method' do
|
573
|
+
it 'deletes the domain webhook resource with the given address and returns the response object' do
|
574
|
+
stub(:delete, "#@base_url/domains/#@domain/webhooks/#@id")
|
575
|
+
|
576
|
+
@client.delete_webhook(@id).must_equal(@json_response_object)
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
519
580
|
describe 'get_campaigns method' do
|
520
581
|
it 'fetches the domain campaigns resource and returns the response object' do
|
521
|
-
|
582
|
+
stub(:get, "#@base_url/#@domain/campaigns")
|
522
583
|
|
523
584
|
@client.get_campaigns.must_equal(@json_response_object)
|
524
585
|
end
|
525
586
|
|
526
587
|
it 'encodes skip and limit parameters' do
|
527
|
-
|
588
|
+
stub(:get, "#@base_url/#@domain/campaigns?skip=1&limit=2")
|
528
589
|
|
529
590
|
@client.get_campaigns(skip: 1, limit: 2)
|
530
591
|
end
|
@@ -532,7 +593,7 @@ describe 'Mailgunner::Client' do
|
|
532
593
|
|
533
594
|
describe 'get_campaign method' do
|
534
595
|
it 'fetches the campaign resource with the given id and returns the response object' do
|
535
|
-
|
596
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id")
|
536
597
|
|
537
598
|
@client.get_campaign(@id).must_equal(@json_response_object)
|
538
599
|
end
|
@@ -540,7 +601,7 @@ describe 'Mailgunner::Client' do
|
|
540
601
|
|
541
602
|
describe 'add_campaign method' do
|
542
603
|
it 'posts to the domain campaigns resource and returns the response object' do
|
543
|
-
|
604
|
+
stub(:post, "#@base_url/#@domain/campaigns", body: "id=#@id")
|
544
605
|
|
545
606
|
@client.add_campaign({id: @id}).must_equal(@json_response_object)
|
546
607
|
end
|
@@ -548,7 +609,7 @@ describe 'Mailgunner::Client' do
|
|
548
609
|
|
549
610
|
describe 'update_campaign method' do
|
550
611
|
it 'updates the campaign resource and returns the response object' do
|
551
|
-
|
612
|
+
stub(:put, "#@base_url/#@domain/campaigns/#@id", body: 'name=Example+Campaign')
|
552
613
|
|
553
614
|
@client.update_campaign(@id, {name: 'Example Campaign'}).must_equal(@json_response_object)
|
554
615
|
end
|
@@ -556,7 +617,7 @@ describe 'Mailgunner::Client' do
|
|
556
617
|
|
557
618
|
describe 'delete_campaign method' do
|
558
619
|
it 'deletes the domain campaign resource with the given id and returns the response object' do
|
559
|
-
|
620
|
+
stub(:delete, "#@base_url/#@domain/campaigns/#@id")
|
560
621
|
|
561
622
|
@client.delete_campaign(@id).must_equal(@json_response_object)
|
562
623
|
end
|
@@ -564,13 +625,13 @@ describe 'Mailgunner::Client' do
|
|
564
625
|
|
565
626
|
describe 'get_campaign_events method' do
|
566
627
|
it 'fetches the domain campaign events resource and returns the response object' do
|
567
|
-
|
628
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/events")
|
568
629
|
|
569
630
|
@client.get_campaign_events(@id).must_equal(@json_response_object)
|
570
631
|
end
|
571
632
|
|
572
633
|
it 'encodes the optional parameters' do
|
573
|
-
|
634
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/events?country=US&limit=100")
|
574
635
|
|
575
636
|
@client.get_campaign_events(@id, country: 'US', limit: 100)
|
576
637
|
end
|
@@ -578,13 +639,13 @@ describe 'Mailgunner::Client' do
|
|
578
639
|
|
579
640
|
describe 'get_campaign_stats method' do
|
580
641
|
it 'fetches the domain campaign stats resource and returns the response object' do
|
581
|
-
|
642
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/stats")
|
582
643
|
|
583
644
|
@client.get_campaign_stats(@id).must_equal(@json_response_object)
|
584
645
|
end
|
585
646
|
|
586
647
|
it 'encodes the optional parameters' do
|
587
|
-
|
648
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/stats?groupby=dailyhour")
|
588
649
|
|
589
650
|
@client.get_campaign_stats(@id, groupby: 'dailyhour')
|
590
651
|
end
|
@@ -592,13 +653,13 @@ describe 'Mailgunner::Client' do
|
|
592
653
|
|
593
654
|
describe 'get_campaign_clicks method' do
|
594
655
|
it 'fetches the domain campaign clicks resource and returns the response object' do
|
595
|
-
|
656
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/clicks")
|
596
657
|
|
597
658
|
@client.get_campaign_clicks(@id).must_equal(@json_response_object)
|
598
659
|
end
|
599
660
|
|
600
661
|
it 'encodes the optional parameters' do
|
601
|
-
|
662
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/clicks?groupby=month&limit=100")
|
602
663
|
|
603
664
|
@client.get_campaign_clicks(@id, groupby: 'month', limit: 100)
|
604
665
|
end
|
@@ -606,13 +667,13 @@ describe 'Mailgunner::Client' do
|
|
606
667
|
|
607
668
|
describe 'get_campaign_opens method' do
|
608
669
|
it 'fetches the domain campaign opens resource and returns the response object' do
|
609
|
-
|
670
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/opens")
|
610
671
|
|
611
672
|
@client.get_campaign_opens(@id).must_equal(@json_response_object)
|
612
673
|
end
|
613
674
|
|
614
675
|
it 'encodes the optional parameters' do
|
615
|
-
|
676
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/opens?groupby=month&limit=100")
|
616
677
|
|
617
678
|
@client.get_campaign_opens(@id, groupby: 'month', limit: 100)
|
618
679
|
end
|
@@ -620,13 +681,13 @@ describe 'Mailgunner::Client' do
|
|
620
681
|
|
621
682
|
describe 'get_campaign_unsubscribes method' do
|
622
683
|
it 'fetches the domain campaign unsubscribes resource and returns the response object' do
|
623
|
-
|
684
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/unsubscribes")
|
624
685
|
|
625
686
|
@client.get_campaign_unsubscribes(@id).must_equal(@json_response_object)
|
626
687
|
end
|
627
688
|
|
628
689
|
it 'encodes the optional parameters' do
|
629
|
-
|
690
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/unsubscribes?groupby=month&limit=100")
|
630
691
|
|
631
692
|
@client.get_campaign_unsubscribes(@id, groupby: 'month', limit: 100)
|
632
693
|
end
|
@@ -634,13 +695,13 @@ describe 'Mailgunner::Client' do
|
|
634
695
|
|
635
696
|
describe 'get_campaign_complaints method' do
|
636
697
|
it 'fetches the domain campaign complaints resource and returns the response object' do
|
637
|
-
|
698
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/complaints")
|
638
699
|
|
639
700
|
@client.get_campaign_complaints(@id).must_equal(@json_response_object)
|
640
701
|
end
|
641
702
|
|
642
703
|
it 'encodes the optional parameters' do
|
643
|
-
|
704
|
+
stub(:get, "#@base_url/#@domain/campaigns/#@id/complaints?groupby=month&limit=100")
|
644
705
|
|
645
706
|
@client.get_campaign_complaints(@id, groupby: 'month', limit: 100)
|
646
707
|
end
|
@@ -648,13 +709,13 @@ describe 'Mailgunner::Client' do
|
|
648
709
|
|
649
710
|
describe 'get_lists method' do
|
650
711
|
it 'fetches the lists resource and returns the response object' do
|
651
|
-
|
712
|
+
stub(:get, "#@base_url/lists")
|
652
713
|
|
653
714
|
@client.get_lists.must_equal(@json_response_object)
|
654
715
|
end
|
655
716
|
|
656
717
|
it 'encodes skip and limit parameters' do
|
657
|
-
|
718
|
+
stub(:get, "#@base_url/lists?skip=1&limit=2")
|
658
719
|
|
659
720
|
@client.get_lists(skip: 1, limit: 2)
|
660
721
|
end
|
@@ -662,7 +723,7 @@ describe 'Mailgunner::Client' do
|
|
662
723
|
|
663
724
|
describe 'get_list method' do
|
664
725
|
it 'fetches the list resource with the given address and returns the response object' do
|
665
|
-
|
726
|
+
stub(:get, "#@base_url/lists/developers%40mailgun.net")
|
666
727
|
|
667
728
|
@client.get_list('developers@mailgun.net').must_equal(@json_response_object)
|
668
729
|
end
|
@@ -670,7 +731,7 @@ describe 'Mailgunner::Client' do
|
|
670
731
|
|
671
732
|
describe 'add_list method' do
|
672
733
|
it 'posts to the lists resource and returns the response object' do
|
673
|
-
|
734
|
+
stub(:post, "#@base_url/lists", body: 'address=developers%40mailgun.net')
|
674
735
|
|
675
736
|
@client.add_list({address: 'developers@mailgun.net'}).must_equal(@json_response_object)
|
676
737
|
end
|
@@ -678,7 +739,7 @@ describe 'Mailgunner::Client' do
|
|
678
739
|
|
679
740
|
describe 'update_list method' do
|
680
741
|
it 'updates the list resource and returns the response object' do
|
681
|
-
|
742
|
+
stub(:put, "#@base_url/lists/developers%40mailgun.net", body: 'name=Example+list')
|
682
743
|
|
683
744
|
@client.update_list('developers@mailgun.net', {name: 'Example list'}).must_equal(@json_response_object)
|
684
745
|
end
|
@@ -686,7 +747,7 @@ describe 'Mailgunner::Client' do
|
|
686
747
|
|
687
748
|
describe 'delete_list method' do
|
688
749
|
it 'deletes the list resource with the given address and returns the response object' do
|
689
|
-
|
750
|
+
stub(:delete, "#@base_url/lists/developers%40mailgun.net")
|
690
751
|
|
691
752
|
@client.delete_list('developers@mailgun.net').must_equal(@json_response_object)
|
692
753
|
end
|
@@ -694,13 +755,13 @@ describe 'Mailgunner::Client' do
|
|
694
755
|
|
695
756
|
describe 'get_list_members method' do
|
696
757
|
it 'fetches the list members resource and returns the response object' do
|
697
|
-
|
758
|
+
stub(:get, "#@base_url/lists/developers%40mailgun.net/members")
|
698
759
|
|
699
760
|
@client.get_list_members('developers@mailgun.net').must_equal(@json_response_object)
|
700
761
|
end
|
701
762
|
|
702
763
|
it 'encodes skip and limit parameters' do
|
703
|
-
|
764
|
+
stub(:get, "#@base_url/lists/developers%40mailgun.net/members?skip=1&limit=2")
|
704
765
|
|
705
766
|
@client.get_list_members('developers@mailgun.net', skip: 1, limit: 2)
|
706
767
|
end
|
@@ -708,7 +769,7 @@ describe 'Mailgunner::Client' do
|
|
708
769
|
|
709
770
|
describe 'get_list_member method' do
|
710
771
|
it 'fetches the list member resource with the given address and returns the response object' do
|
711
|
-
|
772
|
+
stub(:get, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
|
712
773
|
|
713
774
|
@client.get_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
|
714
775
|
end
|
@@ -716,7 +777,7 @@ describe 'Mailgunner::Client' do
|
|
716
777
|
|
717
778
|
describe 'add_list_member method' do
|
718
779
|
it 'posts to the list members resource and returns the response object' do
|
719
|
-
|
780
|
+
stub(:post, "#@base_url/lists/developers%40mailgun.net/members", body: "address=#@encoded_address")
|
720
781
|
|
721
782
|
@client.add_list_member('developers@mailgun.net', {address: @address}).must_equal(@json_response_object)
|
722
783
|
end
|
@@ -724,7 +785,7 @@ describe 'Mailgunner::Client' do
|
|
724
785
|
|
725
786
|
describe 'update_list_member method' do
|
726
787
|
it 'updates the list member resource with the given address and returns the response object' do
|
727
|
-
|
788
|
+
stub(:put, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address", body: 'subscribed=no')
|
728
789
|
|
729
790
|
@client.update_list_member('developers@mailgun.net', @address, {subscribed: 'no'}).must_equal(@json_response_object)
|
730
791
|
end
|
@@ -732,17 +793,27 @@ describe 'Mailgunner::Client' do
|
|
732
793
|
|
733
794
|
describe 'delete_list_member method' do
|
734
795
|
it 'deletes the list member resource with the given address and returns the response object' do
|
735
|
-
|
796
|
+
stub(:delete, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
|
736
797
|
|
737
798
|
@client.delete_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
|
738
799
|
end
|
739
800
|
end
|
740
801
|
|
741
|
-
it '
|
742
|
-
|
802
|
+
it 'raises an exception for authentication errors' do
|
803
|
+
stub_request(:any, /api\.mailgun\.net/).to_return(status: 401)
|
804
|
+
|
805
|
+
proc { @client.get_message(@id) }.must_raise(Mailgunner::AuthenticationError)
|
806
|
+
end
|
807
|
+
|
808
|
+
it 'raises an exception for client errors' do
|
809
|
+
stub_request(:any, /api\.mailgun\.net/).to_return(status: 400)
|
810
|
+
|
811
|
+
proc { @client.get_message(@id) }.must_raise(Mailgunner::ClientError)
|
812
|
+
end
|
743
813
|
|
744
|
-
|
814
|
+
it 'raises an exception for server errors' do
|
815
|
+
stub_request(:any, /api\.mailgun\.net/).to_return(status: 500)
|
745
816
|
|
746
|
-
@client.get_message(@id)
|
817
|
+
proc { @client.get_message(@id) }.must_raise(Mailgunner::ServerError)
|
747
818
|
end
|
748
819
|
end
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailgunner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Craft
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '12'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: webmock
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mail
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '2
|
47
|
+
version: '2'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2
|
54
|
+
version: '2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: actionmailer
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '5'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '1
|
75
|
+
version: '1'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '1
|
82
|
+
version: '1'
|
83
83
|
description: Ruby client for the Mailgun API
|
84
84
|
email:
|
85
85
|
- mail@timcraft.com
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- README.md
|
92
92
|
- lib/mailgunner.rb
|
93
93
|
- lib/mailgunner/delivery_method.rb
|
94
|
+
- lib/mailgunner/errors.rb
|
94
95
|
- lib/mailgunner/railtie.rb
|
95
96
|
- lib/mailgunner/version.rb
|
96
97
|
- mailgunner.gemspec
|
@@ -116,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
117
|
version: '0'
|
117
118
|
requirements: []
|
118
119
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
120
|
+
rubygems_version: 2.6.13
|
120
121
|
signing_key:
|
121
122
|
specification_version: 4
|
122
123
|
summary: Ruby client for the Mailgun API
|