mailgunner 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/mailgunner.svg)](https://badge.fury.io/rb/mailgunner) [![Build Status](https://api.travis-ci.org/timcraft/mailgunner.svg?branch=master)](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
|