mailgunner 1.3.0 → 2.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 16c8da4bf004d3e8b0ce0b398815294a6d5e801d
4
+ data.tar.gz: c2fa0a69df8ec9a64648dd3a8979d0bef4bbb593
5
+ SHA512:
6
+ metadata.gz: 7a6464e5137f28e412ba186dab76d85927b12e59362896a4e7cf9da57cffa02aa575d020221ab3f37154204432a4f03eb99c2390425a664d95d0c9bb0ccc645f
7
+ data.tar.gz: b7ca7c319178f0c893111a14778e1c4266d12d14b49fe514e47152489a61ed5e1328fc00e7cecc4fe578110cd3edbd4819b554782b9cc41b3644705fd52e5e89
data/README.md CHANGED
@@ -23,12 +23,6 @@ mailgun = Mailgunner::Client.new({
23
23
  })
24
24
 
25
25
  response = mailgun.get_stats(limit: 5)
26
-
27
- if response.ok?
28
- # do something with response.object
29
- else
30
- # handle client/server error
31
- end
32
26
  ```
33
27
 
34
28
 
data/lib/mailgunner.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  require 'net/http'
2
2
  require 'json'
3
3
  require 'cgi'
4
- require 'mailgunner/response'
5
4
  require 'mailgunner/delivery_method' if defined?(ActionMailer)
6
5
 
7
6
  module Mailgunner
7
+ class Error < StandardError; end
8
+
8
9
  class Client
9
10
  attr_accessor :domain, :api_key, :http
10
11
 
@@ -13,14 +14,6 @@ module Mailgunner
13
14
 
14
15
  @api_key = options.fetch(:api_key) { ENV.fetch('MAILGUN_API_KEY') }
15
16
 
16
- if options.has_key?(:json)
17
- Kernel.warn 'Mailgunner::Client :json option is deprecated'
18
-
19
- @json = options[:json]
20
- else
21
- @json = JSON
22
- end
23
-
24
17
  @http = Net::HTTP.new('api.mailgun.net', Net::HTTP.https_default_port)
25
18
 
26
19
  @http.use_ssl = true
@@ -58,6 +51,26 @@ module Mailgunner
58
51
  post('/v2/domains', attributes)
59
52
  end
60
53
 
54
+ def delete_domain(name)
55
+ delete("/v2/domains/#{escape name}")
56
+ end
57
+
58
+ def get_credentials
59
+ get("/v2/domains/#{escape @domain}/credentials")
60
+ end
61
+
62
+ def add_credentials(attributes)
63
+ post("/v2/domains/#{escape @domain}/credentials", attributes)
64
+ end
65
+
66
+ def update_credentials(login, attributes)
67
+ put("/v2/domains/#{escape @domain}/credentials/#{escape login}", attributes)
68
+ end
69
+
70
+ def delete_credentials(login)
71
+ delete("/v2/domains/#{escape @domain}/credentials/#{escape login}")
72
+ end
73
+
61
74
  def get_unsubscribes(params = {})
62
75
  get("/v2/#{escape @domain}/unsubscribes", params)
63
76
  end
@@ -249,23 +262,35 @@ module Mailgunner
249
262
 
250
263
  yield message if block_given?
251
264
 
252
- Response.new(@http.request(message), :json => @json)
265
+ parse(@http.request(message))
253
266
  end
254
267
 
255
- def request_uri(path, params_hash)
256
- if params_hash.empty?
257
- path
268
+ def parse(response)
269
+ if Net::HTTPSuccess === response
270
+ json?(response) ? JSON.parse(response.body) : response.body
258
271
  else
259
- tmp = []
260
-
261
- params_hash.each do |key, values|
262
- Array(values).each do |value|
263
- tmp << "#{escape(key)}=#{escape(value)}"
264
- end
272
+ if json?(response)
273
+ raise Error, "HTTP #{response.code}: #{JSON.parse(response.body).fetch('message')}"
274
+ else
275
+ raise Error, "HTTP #{response.code}"
265
276
  end
277
+ end
278
+ end
266
279
 
267
- path + '?' + tmp.join('&')
280
+ def json?(response)
281
+ content_type = response['Content-Type']
282
+
283
+ content_type && content_type.split(';').first == 'application/json'
284
+ end
285
+
286
+ def request_uri(path, hash)
287
+ return path if hash.empty?
288
+
289
+ query_params = hash.map do |key, values|
290
+ Array(values).map { |value| "#{escape(key)}=#{escape(value)}" }
268
291
  end
292
+
293
+ path + '?' + query_params.flatten.join('&')
269
294
  end
270
295
 
271
296
  def escape(component)
@@ -1,9 +1,6 @@
1
1
  require 'mail/check_delivery_params'
2
2
 
3
3
  module Mailgunner
4
- class DeliveryFailed < StandardError
5
- end
6
-
7
4
  class DeliveryMethod
8
5
  include Mail::CheckDeliveryParams
9
6
 
@@ -22,15 +19,7 @@ module Mailgunner
22
19
  def deliver!(mail)
23
20
  check_delivery_params(mail)
24
21
 
25
- response = @client.send_mime(mail)
26
-
27
- if response.ok?
28
- return response
29
- elsif response.json? && response.object.has_key?('message')
30
- raise DeliveryFailed, response.object['message']
31
- else
32
- raise DeliveryFailed, "#{response.code} #{response.message}"
33
- end
22
+ @client.send_mime(mail)
34
23
  end
35
24
  end
36
25
 
data/mailgunner.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'mailgunner'
3
- s.version = '1.3.0'
3
+ s.version = '2.0.0'
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.authors = ['Tim Craft']
6
6
  s.email = ['mail@timcraft.com']
@@ -8,10 +8,10 @@ Gem::Specification.new do |s|
8
8
  s.description = 'A Ruby wrapper for the Mailgun API'
9
9
  s.summary = 'See description'
10
10
  s.files = Dir.glob('{lib,spec}/**/*') + %w(README.md mailgunner.gemspec)
11
- s.add_development_dependency('rake', '>= 0.9.3')
12
- s.add_development_dependency('mocha', '~> 0.13.2')
13
- s.add_development_dependency('webmock', '~> 1.13.0')
14
- s.add_development_dependency('mail', '~> 2.5.4')
15
- s.add_development_dependency('actionmailer', '~> 4.0.0')
11
+ s.required_ruby_version = '>= 1.9.3'
12
+ s.add_development_dependency('rake', '~> 10.1')
13
+ s.add_development_dependency('webmock', '~> 1.18')
14
+ s.add_development_dependency('mail', '~> 2.5')
15
+ s.add_development_dependency('actionmailer', '~> 4.0')
16
16
  s.require_path = 'lib'
17
17
  end
@@ -42,7 +42,9 @@ describe 'Mailgunner::DeliveryMethod' do
42
42
  body: '{"message": "Invalid API key"}'
43
43
  })
44
44
 
45
- proc { ExampleMailer.registration_confirmation(email: @address).deliver }.must_raise(Mailgunner::DeliveryFailed)
45
+ exception = proc { ExampleMailer.registration_confirmation(email: @address).deliver }.must_raise(Mailgunner::Error)
46
+
47
+ exception.message.must_include('Invalid API key')
46
48
  end
47
49
 
48
50
  it 'allows the domain to be specified explicitly via the delivery method settings' do
@@ -1,6 +1,5 @@
1
1
  require 'minitest/autorun'
2
2
  require 'webmock/minitest'
3
- require 'mocha/setup'
4
3
  require 'mailgunner'
5
4
  require 'json'
6
5
  require 'mail'
@@ -13,11 +12,17 @@ describe 'Mailgunner::Client' do
13
12
 
14
13
  @base_url = "https://api:#{@api_key}@api.mailgun.net/v2"
15
14
 
15
+ @json_response = {headers: {'Content-Type' => 'application/json;charset=utf-8'}, body: '{"key":"value"}'}
16
+
17
+ @json_response_object = {'key' => 'value'}
18
+
16
19
  @client = Mailgunner::Client.new(domain: @domain, api_key: @api_key)
17
20
 
18
21
  @address = 'user@example.com'
19
22
 
20
23
  @encoded_address = 'user%40example.com'
24
+
25
+ @login = 'bob.bar'
21
26
  end
22
27
 
23
28
  describe 'http method' do
@@ -59,26 +64,26 @@ describe 'Mailgunner::Client' do
59
64
  end
60
65
 
61
66
  describe 'validate_address method' do
62
- it 'calls the address validate resource with the given email address and returns a response object' do
63
- stub_request(:get, "#@base_url/address/validate?address=#@encoded_address")
67
+ it 'calls the address validate resource with the given email address and returns the response object' do
68
+ stub_request(:get, "#@base_url/address/validate?address=#@encoded_address").to_return(@json_response)
64
69
 
65
- @client.validate_address(@address).must_be_instance_of(Mailgunner::Response)
70
+ @client.validate_address(@address).must_equal(@json_response_object)
66
71
  end
67
72
  end
68
73
 
69
74
  describe 'parse_addresses method' do
70
- it 'calls the address parse resource with the given email addresses and returns a response object' do
71
- stub_request(:get, "#@base_url/address/parse?addresses=bob%40example.com%2Ceve%40example.com")
75
+ it 'calls the address parse resource with the given email addresses and returns the response object' do
76
+ stub_request(:get, "#@base_url/address/parse?addresses=bob%40example.com%2Ceve%40example.com").to_return(@json_response)
72
77
 
73
- @client.parse_addresses(['bob@example.com', 'eve@example.com']).must_be_instance_of(Mailgunner::Response)
78
+ @client.parse_addresses(['bob@example.com', 'eve@example.com']).must_equal(@json_response_object)
74
79
  end
75
80
  end
76
81
 
77
82
  describe 'send_message method' do
78
- it 'posts to the domain messages resource and returns a response object' do
79
- stub_request(:post, "#@base_url/#@domain/messages")
83
+ it 'posts to the domain messages resource and returns the response object' do
84
+ stub_request(:post, "#@base_url/#@domain/messages").to_return(@json_response)
80
85
 
81
- @client.send_message({}).must_be_instance_of(Mailgunner::Response)
86
+ @client.send_message({}).must_equal(@json_response_object)
82
87
  end
83
88
 
84
89
  it 'encodes the message attributes' do
@@ -102,34 +107,34 @@ describe 'Mailgunner::Client' do
102
107
  })
103
108
  end
104
109
 
105
- it 'posts to the domain messages resource and returns a response object' do
106
- stub_request(:post, "#@base_url/#@domain/messages.mime")
110
+ it 'posts to the domain messages resource and returns the response object' do
111
+ stub_request(:post, "#@base_url/#@domain/messages.mime").to_return(@json_response)
107
112
 
108
- @client.send_mime(@mail).must_be_instance_of(Mailgunner::Response)
113
+ @client.send_mime(@mail).must_equal(@json_response_object)
109
114
  end
110
115
  end
111
116
 
112
117
  describe 'get_domains method' do
113
- it 'fetches the domains resource and returns a response object' do
114
- stub_request(:get, "#@base_url/domains")
118
+ it 'fetches the domains resource and returns the response object' do
119
+ stub_request(:get, "#@base_url/domains").to_return(@json_response)
115
120
 
116
- @client.get_domains.must_be_instance_of(Mailgunner::Response)
121
+ @client.get_domains.must_equal(@json_response_object)
117
122
  end
118
123
  end
119
124
 
120
125
  describe 'get_domain method' do
121
- it 'fetches the domain resource and returns a response object' do
122
- stub_request(:get, "#@base_url/domains/#@domain")
126
+ it 'fetches the domain resource and returns the response object' do
127
+ stub_request(:get, "#@base_url/domains/#@domain").to_return(@json_response)
123
128
 
124
- @client.get_domain(@domain).must_be_instance_of(Mailgunner::Response)
129
+ @client.get_domain(@domain).must_equal(@json_response_object)
125
130
  end
126
131
  end
127
132
 
128
133
  describe 'add_domain method' do
129
- it 'posts to the domains resource and returns a response object' do
130
- stub_request(:post, "#@base_url/domains")
134
+ it 'posts to the domains resource and returns the response object' do
135
+ stub_request(:post, "#@base_url/domains").to_return(@json_response)
131
136
 
132
- @client.add_domain({}).must_be_instance_of(Mailgunner::Response)
137
+ @client.add_domain({}).must_equal(@json_response_object)
133
138
  end
134
139
 
135
140
  it 'encodes the domain attributes' do
@@ -139,11 +144,57 @@ describe 'Mailgunner::Client' do
139
144
  end
140
145
  end
141
146
 
147
+ describe 'delete_domain method' do
148
+ it 'deletes the domain resource with the given name and returns the response object' do
149
+ stub_request(:delete, "#@base_url/domains/#@domain").to_return(@json_response)
150
+
151
+ @client.delete_domain(@domain).must_equal(@json_response_object)
152
+ end
153
+ end
154
+
155
+ describe 'get_credentials method' do
156
+ it 'fetches the domain credentials resource and returns the response object' do
157
+ stub_request(:get, "#@base_url/domains/#@domain/credentials").to_return(@json_response)
158
+
159
+ @client.get_credentials.must_equal(@json_response_object)
160
+ end
161
+ end
162
+
163
+ describe 'add_credentials method' do
164
+ it 'posts to the domain credentials resource and returns the response object' do
165
+ stub_request(:post, "#@base_url/domains/#@domain/credentials").with(body: "login=#@login").to_return(@json_response)
166
+
167
+ @client.add_credentials(login: @login).must_equal(@json_response_object)
168
+ end
169
+ end
170
+
171
+ describe 'update_credentials method' do
172
+ it 'updates the domain credentials resource with the given login and returns the response object' do
173
+ stub_request(:put, "#@base_url/domains/#@domain/credentials/#@login").to_return(@json_response)
174
+
175
+ @client.update_credentials(@login, {}).must_equal(@json_response_object)
176
+ end
177
+
178
+ it 'encodes the password attribute' do
179
+ stub_request(:put, "#@base_url/domains/#@domain/credentials/#@login").with(body: 'password=secret')
180
+
181
+ @client.update_credentials(@login, password: 'secret')
182
+ end
183
+ end
184
+
185
+ describe 'delete_credentials method' do
186
+ it 'deletes the domain credentials resource with the given login and returns the response object' do
187
+ stub_request(:delete, "#@base_url/domains/#@domain/credentials/#@login").to_return(@json_response)
188
+
189
+ @client.delete_credentials(@login).must_equal(@json_response_object)
190
+ end
191
+ end
192
+
142
193
  describe 'get_unsubscribes method' do
143
- it 'fetches the domain unsubscribes resource and returns a response object' do
144
- stub_request(:get, "#@base_url/#@domain/unsubscribes")
194
+ it 'fetches the domain unsubscribes resource and returns the response object' do
195
+ stub_request(:get, "#@base_url/#@domain/unsubscribes").to_return(@json_response)
145
196
 
146
- @client.get_unsubscribes.must_be_instance_of(Mailgunner::Response)
197
+ @client.get_unsubscribes.must_equal(@json_response_object)
147
198
  end
148
199
 
149
200
  it 'encodes skip and limit parameters' do
@@ -154,26 +205,26 @@ describe 'Mailgunner::Client' do
154
205
  end
155
206
 
156
207
  describe 'get_unsubscribe method' do
157
- it 'fetches the unsubscribe resource with the given address and returns a response object' do
158
- stub_request(:get, "#@base_url/#@domain/unsubscribes/#@encoded_address")
208
+ it 'fetches the unsubscribe resource with the given address and returns the response object' do
209
+ stub_request(:get, "#@base_url/#@domain/unsubscribes/#@encoded_address").to_return(@json_response)
159
210
 
160
- @client.get_unsubscribe(@address).must_be_instance_of(Mailgunner::Response)
211
+ @client.get_unsubscribe(@address).must_equal(@json_response_object)
161
212
  end
162
213
  end
163
214
 
164
215
  describe 'delete_unsubscribe method' do
165
- it 'deletes the domain unsubscribe resource with the given address and returns a response object' do
166
- stub_request(:delete, "#@base_url/#@domain/unsubscribes/#@encoded_address")
216
+ it 'deletes the domain unsubscribe resource with the given address and returns the response object' do
217
+ stub_request(:delete, "#@base_url/#@domain/unsubscribes/#@encoded_address").to_return(@json_response)
167
218
 
168
- @client.delete_unsubscribe(@address).must_be_instance_of(Mailgunner::Response)
219
+ @client.delete_unsubscribe(@address).must_equal(@json_response_object)
169
220
  end
170
221
  end
171
222
 
172
223
  describe 'add_unsubscribe method' do
173
- it 'posts to the domain unsubscribes resource and returns a response object' do
174
- stub_request(:post, "#@base_url/#@domain/unsubscribes")
224
+ it 'posts to the domain unsubscribes resource and returns the response object' do
225
+ stub_request(:post, "#@base_url/#@domain/unsubscribes").to_return(@json_response)
175
226
 
176
- @client.add_unsubscribe({}).must_be_instance_of(Mailgunner::Response)
227
+ @client.add_unsubscribe({}).must_equal(@json_response_object)
177
228
  end
178
229
 
179
230
  it 'encodes the unsubscribe attributes' do
@@ -184,10 +235,10 @@ describe 'Mailgunner::Client' do
184
235
  end
185
236
 
186
237
  describe 'get_complaints method' do
187
- it 'fetches the domain complaints resource and returns a response object' do
188
- stub_request(:get, "#@base_url/#@domain/complaints")
238
+ it 'fetches the domain complaints resource and returns the response object' do
239
+ stub_request(:get, "#@base_url/#@domain/complaints").to_return(@json_response)
189
240
 
190
- @client.get_complaints.must_be_instance_of(Mailgunner::Response)
241
+ @client.get_complaints.must_equal(@json_response_object)
191
242
  end
192
243
 
193
244
  it 'encodes skip and limit parameters' do
@@ -198,18 +249,18 @@ describe 'Mailgunner::Client' do
198
249
  end
199
250
 
200
251
  describe 'get_complaint method' do
201
- it 'fetches the complaint resource with the given address and returns a response object' do
202
- stub_request(:get, "#@base_url/#@domain/complaints/#@encoded_address")
252
+ it 'fetches the complaint resource with the given address and returns the response object' do
253
+ stub_request(:get, "#@base_url/#@domain/complaints/#@encoded_address").to_return(@json_response)
203
254
 
204
- @client.get_complaint(@address).must_be_instance_of(Mailgunner::Response)
255
+ @client.get_complaint(@address).must_equal(@json_response_object)
205
256
  end
206
257
  end
207
258
 
208
259
  describe 'add_complaint method' do
209
- it 'posts to the domain complaints resource and returns a response object' do
210
- stub_request(:post, "#@base_url/#@domain/complaints")
260
+ it 'posts to the domain complaints resource and returns the response object' do
261
+ stub_request(:post, "#@base_url/#@domain/complaints").to_return(@json_response)
211
262
 
212
- @client.add_complaint({}).must_be_instance_of(Mailgunner::Response)
263
+ @client.add_complaint({}).must_equal(@json_response_object)
213
264
  end
214
265
 
215
266
  it 'encodes the complaint attributes' do
@@ -220,18 +271,18 @@ describe 'Mailgunner::Client' do
220
271
  end
221
272
 
222
273
  describe 'delete_complaint method' do
223
- it 'deletes the domain complaint resource with the given address and returns a response object' do
224
- stub_request(:delete, "#@base_url/#@domain/complaints/#@encoded_address")
274
+ it 'deletes the domain complaint resource with the given address and returns the response object' do
275
+ stub_request(:delete, "#@base_url/#@domain/complaints/#@encoded_address").to_return(@json_response)
225
276
 
226
- @client.delete_complaint(@address).must_be_instance_of(Mailgunner::Response)
277
+ @client.delete_complaint(@address).must_equal(@json_response_object)
227
278
  end
228
279
  end
229
280
 
230
281
  describe 'get_bounces method' do
231
- it 'fetches the domain bounces resource and returns a response object' do
232
- stub_request(:get, "#@base_url/#@domain/bounces")
282
+ it 'fetches the domain bounces resource and returns the response object' do
283
+ stub_request(:get, "#@base_url/#@domain/bounces").to_return(@json_response)
233
284
 
234
- @client.get_bounces.must_be_instance_of(Mailgunner::Response)
285
+ @client.get_bounces.must_equal(@json_response_object)
235
286
  end
236
287
 
237
288
  it 'encodes skip and limit parameters' do
@@ -242,18 +293,18 @@ describe 'Mailgunner::Client' do
242
293
  end
243
294
 
244
295
  describe 'get_bounce method' do
245
- it 'fetches the bounce resource with the given address and returns a response object' do
246
- stub_request(:get, "#@base_url/#@domain/bounces/#@encoded_address")
296
+ it 'fetches the bounce resource with the given address and returns the response object' do
297
+ stub_request(:get, "#@base_url/#@domain/bounces/#@encoded_address").to_return(@json_response)
247
298
 
248
- @client.get_bounce(@address).must_be_instance_of(Mailgunner::Response)
299
+ @client.get_bounce(@address).must_equal(@json_response_object)
249
300
  end
250
301
  end
251
302
 
252
303
  describe 'add_bounce method' do
253
- it 'posts to the domain bounces resource and returns a response object' do
254
- stub_request(:post, "#@base_url/#@domain/bounces")
304
+ it 'posts to the domain bounces resource and returns the response object' do
305
+ stub_request(:post, "#@base_url/#@domain/bounces").to_return(@json_response)
255
306
 
256
- @client.add_bounce({}).must_be_instance_of(Mailgunner::Response)
307
+ @client.add_bounce({}).must_equal(@json_response_object)
257
308
  end
258
309
 
259
310
  it 'encodes the bounce attributes' do
@@ -264,18 +315,18 @@ describe 'Mailgunner::Client' do
264
315
  end
265
316
 
266
317
  describe 'delete_bounce method' do
267
- it 'deletes the domain bounce resource with the given address and returns a response object' do
268
- stub_request(:delete, "#@base_url/#@domain/bounces/#@encoded_address")
318
+ it 'deletes the domain bounce resource with the given address and returns the response object' do
319
+ stub_request(:delete, "#@base_url/#@domain/bounces/#@encoded_address").to_return(@json_response)
269
320
 
270
- @client.delete_bounce(@address).must_be_instance_of(Mailgunner::Response)
321
+ @client.delete_bounce(@address).must_equal(@json_response_object)
271
322
  end
272
323
  end
273
324
 
274
325
  describe 'get_stats method' do
275
- it 'fetches the domain stats resource and returns a response object' do
276
- stub_request(:get, "#@base_url/#@domain/stats")
326
+ it 'fetches the domain stats resource and returns the response object' do
327
+ stub_request(:get, "#@base_url/#@domain/stats").to_return(@json_response)
277
328
 
278
- @client.get_stats.must_be_instance_of(Mailgunner::Response)
329
+ @client.get_stats.must_equal(@json_response_object)
279
330
  end
280
331
 
281
332
  it 'encodes skip and limit parameters' do
@@ -292,10 +343,10 @@ describe 'Mailgunner::Client' do
292
343
  end
293
344
 
294
345
  describe 'get_events method' do
295
- it 'fetches the domain events resource and returns a response object' do
296
- stub_request(:get, "#@base_url/#@domain/events")
346
+ it 'fetches the domain events resource and returns the response object' do
347
+ stub_request(:get, "#@base_url/#@domain/events").to_return(@json_response)
297
348
 
298
- @client.get_events.must_be_instance_of(Mailgunner::Response)
349
+ @client.get_events.must_equal(@json_response_object)
299
350
  end
300
351
 
301
352
  it 'encodes optional parameters' do
@@ -306,10 +357,10 @@ describe 'Mailgunner::Client' do
306
357
  end
307
358
 
308
359
  describe 'get_routes method' do
309
- it 'fetches the routes resource and returns a response object' do
310
- stub_request(:get, "#@base_url/routes")
360
+ it 'fetches the routes resource and returns the response object' do
361
+ stub_request(:get, "#@base_url/routes").to_return(@json_response)
311
362
 
312
- @client.get_routes.must_be_instance_of(Mailgunner::Response)
363
+ @client.get_routes.must_equal(@json_response_object)
313
364
  end
314
365
 
315
366
  it 'encodes skip and limit parameters' do
@@ -320,18 +371,18 @@ describe 'Mailgunner::Client' do
320
371
  end
321
372
 
322
373
  describe 'get_route method' do
323
- it 'fetches the route resource with the given id and returns a response object' do
324
- stub_request(:get, "#@base_url/routes/4f3bad2335335426750048c6")
374
+ it 'fetches the route resource with the given id and returns the response object' do
375
+ stub_request(:get, "#@base_url/routes/4f3bad2335335426750048c6").to_return(@json_response)
325
376
 
326
- @client.get_route('4f3bad2335335426750048c6').must_be_instance_of(Mailgunner::Response)
377
+ @client.get_route('4f3bad2335335426750048c6').must_equal(@json_response_object)
327
378
  end
328
379
  end
329
380
 
330
381
  describe 'add_route method' do
331
- it 'posts to the routes resource and returns a response object' do
332
- stub_request(:post, "#@base_url/routes")
382
+ it 'posts to the routes resource and returns the response object' do
383
+ stub_request(:post, "#@base_url/routes").to_return(@json_response)
333
384
 
334
- @client.add_route({}).must_be_instance_of(Mailgunner::Response)
385
+ @client.add_route({}).must_equal(@json_response_object)
335
386
  end
336
387
 
337
388
  it 'encodes the route attributes' do
@@ -342,10 +393,10 @@ describe 'Mailgunner::Client' do
342
393
  end
343
394
 
344
395
  describe 'update_route method' do
345
- it 'updates the route resource with the given id and returns a response object' do
346
- stub_request(:put, "#@base_url/routes/4f3bad2335335426750048c6")
396
+ it 'updates the route resource with the given id and returns the response object' do
397
+ stub_request(:put, "#@base_url/routes/4f3bad2335335426750048c6").to_return(@json_response)
347
398
 
348
- @client.update_route('4f3bad2335335426750048c6', {}).must_be_instance_of(Mailgunner::Response)
399
+ @client.update_route('4f3bad2335335426750048c6', {}).must_equal(@json_response_object)
349
400
  end
350
401
 
351
402
  it 'encodes the route attributes' do
@@ -356,18 +407,18 @@ describe 'Mailgunner::Client' do
356
407
  end
357
408
 
358
409
  describe 'delete_route method' do
359
- it 'deletes the route resource with the given id and returns a response object' do
360
- stub_request(:delete, "#@base_url/routes/4f3bad2335335426750048c6")
410
+ it 'deletes the route resource with the given id and returns the response object' do
411
+ stub_request(:delete, "#@base_url/routes/4f3bad2335335426750048c6").to_return(@json_response)
361
412
 
362
- @client.delete_route('4f3bad2335335426750048c6').must_be_instance_of(Mailgunner::Response)
413
+ @client.delete_route('4f3bad2335335426750048c6').must_equal(@json_response_object)
363
414
  end
364
415
  end
365
416
 
366
417
  describe 'get_campaigns method' do
367
- it 'fetches the domain campaigns resource and returns a response object' do
368
- stub_request(:get, "#@base_url/#@domain/campaigns")
418
+ it 'fetches the domain campaigns resource and returns the response object' do
419
+ stub_request(:get, "#@base_url/#@domain/campaigns").to_return(@json_response)
369
420
 
370
- @client.get_campaigns.must_be_instance_of(Mailgunner::Response)
421
+ @client.get_campaigns.must_equal(@json_response_object)
371
422
  end
372
423
 
373
424
  it 'encodes skip and limit parameters' do
@@ -378,18 +429,18 @@ describe 'Mailgunner::Client' do
378
429
  end
379
430
 
380
431
  describe 'get_campaign method' do
381
- it 'fetches the campaign resource with the given id and returns a response object' do
382
- stub_request(:get, "#@base_url/#@domain/campaigns/id")
432
+ it 'fetches the campaign resource with the given id and returns the response object' do
433
+ stub_request(:get, "#@base_url/#@domain/campaigns/id").to_return(@json_response)
383
434
 
384
- @client.get_campaign('id').must_be_instance_of(Mailgunner::Response)
435
+ @client.get_campaign('id').must_equal(@json_response_object)
385
436
  end
386
437
  end
387
438
 
388
439
  describe 'add_campaign method' do
389
- it 'posts to the domain campaigns resource and returns a response object' do
390
- stub_request(:post, "#@base_url/#@domain/campaigns")
440
+ it 'posts to the domain campaigns resource and returns the response object' do
441
+ stub_request(:post, "#@base_url/#@domain/campaigns").to_return(@json_response)
391
442
 
392
- @client.add_campaign({}).must_be_instance_of(Mailgunner::Response)
443
+ @client.add_campaign({}).must_equal(@json_response_object)
393
444
  end
394
445
 
395
446
  it 'encodes the campaign attributes' do
@@ -400,10 +451,10 @@ describe 'Mailgunner::Client' do
400
451
  end
401
452
 
402
453
  describe 'update_campaign method' do
403
- it 'updates the campaign resource and returns a response object' do
404
- stub_request(:put, "#@base_url/#@domain/campaigns/id")
454
+ it 'updates the campaign resource and returns the response object' do
455
+ stub_request(:put, "#@base_url/#@domain/campaigns/id").to_return(@json_response)
405
456
 
406
- @client.update_campaign('id', {}).must_be_instance_of(Mailgunner::Response)
457
+ @client.update_campaign('id', {}).must_equal(@json_response_object)
407
458
  end
408
459
 
409
460
  it 'encodes the campaign attributes' do
@@ -414,18 +465,18 @@ describe 'Mailgunner::Client' do
414
465
  end
415
466
 
416
467
  describe 'delete_campaign method' do
417
- it 'deletes the domain campaign resource with the given id and returns a response object' do
418
- stub_request(:delete, "#@base_url/#@domain/campaigns/id")
468
+ it 'deletes the domain campaign resource with the given id and returns the response object' do
469
+ stub_request(:delete, "#@base_url/#@domain/campaigns/id").to_return(@json_response)
419
470
 
420
- @client.delete_campaign('id').must_be_instance_of(Mailgunner::Response)
471
+ @client.delete_campaign('id').must_equal(@json_response_object)
421
472
  end
422
473
  end
423
474
 
424
475
  describe 'get_campaign_events method' do
425
- it 'fetches the domain campaign events resource and returns a response object' do
426
- stub_request(:get, "#@base_url/#@domain/campaigns/id/events")
476
+ it 'fetches the domain campaign events resource and returns the response object' do
477
+ stub_request(:get, "#@base_url/#@domain/campaigns/id/events").to_return(@json_response)
427
478
 
428
- @client.get_campaign_events('id').must_be_instance_of(Mailgunner::Response)
479
+ @client.get_campaign_events('id').must_equal(@json_response_object)
429
480
  end
430
481
 
431
482
  it 'encodes the optional parameters' do
@@ -436,10 +487,10 @@ describe 'Mailgunner::Client' do
436
487
  end
437
488
 
438
489
  describe 'get_campaign_stats method' do
439
- it 'fetches the domain campaign stats resource and returns a response object' do
440
- stub_request(:get, "#@base_url/#@domain/campaigns/id/stats")
490
+ it 'fetches the domain campaign stats resource and returns the response object' do
491
+ stub_request(:get, "#@base_url/#@domain/campaigns/id/stats").to_return(@json_response)
441
492
 
442
- @client.get_campaign_stats('id').must_be_instance_of(Mailgunner::Response)
493
+ @client.get_campaign_stats('id').must_equal(@json_response_object)
443
494
  end
444
495
 
445
496
  it 'encodes the optional parameters' do
@@ -450,10 +501,10 @@ describe 'Mailgunner::Client' do
450
501
  end
451
502
 
452
503
  describe 'get_campaign_clicks method' do
453
- it 'fetches the domain campaign clicks resource and returns a response object' do
454
- stub_request(:get, "#@base_url/#@domain/campaigns/id/clicks")
504
+ it 'fetches the domain campaign clicks resource and returns the response object' do
505
+ stub_request(:get, "#@base_url/#@domain/campaigns/id/clicks").to_return(@json_response)
455
506
 
456
- @client.get_campaign_clicks('id').must_be_instance_of(Mailgunner::Response)
507
+ @client.get_campaign_clicks('id').must_equal(@json_response_object)
457
508
  end
458
509
 
459
510
  it 'encodes the optional parameters' do
@@ -464,10 +515,10 @@ describe 'Mailgunner::Client' do
464
515
  end
465
516
 
466
517
  describe 'get_campaign_opens method' do
467
- it 'fetches the domain campaign opens resource and returns a response object' do
468
- stub_request(:get, "#@base_url/#@domain/campaigns/id/opens")
518
+ it 'fetches the domain campaign opens resource and returns the response object' do
519
+ stub_request(:get, "#@base_url/#@domain/campaigns/id/opens").to_return(@json_response)
469
520
 
470
- @client.get_campaign_opens('id').must_be_instance_of(Mailgunner::Response)
521
+ @client.get_campaign_opens('id').must_equal(@json_response_object)
471
522
  end
472
523
 
473
524
  it 'encodes the optional parameters' do
@@ -478,10 +529,10 @@ describe 'Mailgunner::Client' do
478
529
  end
479
530
 
480
531
  describe 'get_campaign_unsubscribes method' do
481
- it 'fetches the domain campaign unsubscribes resource and returns a response object' do
482
- stub_request(:get, "#@base_url/#@domain/campaigns/id/unsubscribes")
532
+ it 'fetches the domain campaign unsubscribes resource and returns the response object' do
533
+ stub_request(:get, "#@base_url/#@domain/campaigns/id/unsubscribes").to_return(@json_response)
483
534
 
484
- @client.get_campaign_unsubscribes('id').must_be_instance_of(Mailgunner::Response)
535
+ @client.get_campaign_unsubscribes('id').must_equal(@json_response_object)
485
536
  end
486
537
 
487
538
  it 'encodes the optional parameters' do
@@ -492,10 +543,10 @@ describe 'Mailgunner::Client' do
492
543
  end
493
544
 
494
545
  describe 'get_campaign_complaints method' do
495
- it 'fetches the domain campaign complaints resource and returns a response object' do
496
- stub_request(:get, "#@base_url/#@domain/campaigns/id/complaints")
546
+ it 'fetches the domain campaign complaints resource and returns the response object' do
547
+ stub_request(:get, "#@base_url/#@domain/campaigns/id/complaints").to_return(@json_response)
497
548
 
498
- @client.get_campaign_complaints('id').must_be_instance_of(Mailgunner::Response)
549
+ @client.get_campaign_complaints('id').must_equal(@json_response_object)
499
550
  end
500
551
 
501
552
  it 'encodes the optional parameters' do
@@ -506,10 +557,10 @@ describe 'Mailgunner::Client' do
506
557
  end
507
558
 
508
559
  describe 'get_lists method' do
509
- it 'fetches the lists resource and returns a response object' do
510
- stub_request(:get, "#@base_url/lists")
560
+ it 'fetches the lists resource and returns the response object' do
561
+ stub_request(:get, "#@base_url/lists").to_return(@json_response)
511
562
 
512
- @client.get_lists.must_be_instance_of(Mailgunner::Response)
563
+ @client.get_lists.must_equal(@json_response_object)
513
564
  end
514
565
 
515
566
  it 'encodes skip and limit parameters' do
@@ -520,18 +571,18 @@ describe 'Mailgunner::Client' do
520
571
  end
521
572
 
522
573
  describe 'get_list method' do
523
- it 'fetches the list resource with the given address and returns a response object' do
524
- stub_request(:get, "#@base_url/lists/developers%40mailgun.net")
574
+ it 'fetches the list resource with the given address and returns the response object' do
575
+ stub_request(:get, "#@base_url/lists/developers%40mailgun.net").to_return(@json_response)
525
576
 
526
- @client.get_list('developers@mailgun.net').must_be_instance_of(Mailgunner::Response)
577
+ @client.get_list('developers@mailgun.net').must_equal(@json_response_object)
527
578
  end
528
579
  end
529
580
 
530
581
  describe 'add_list method' do
531
- it 'posts to the lists resource and returns a response object' do
532
- stub_request(:post, "#@base_url/lists")
582
+ it 'posts to the lists resource and returns the response object' do
583
+ stub_request(:post, "#@base_url/lists").to_return(@json_response)
533
584
 
534
- @client.add_list({}).must_be_instance_of(Mailgunner::Response)
585
+ @client.add_list({}).must_equal(@json_response_object)
535
586
  end
536
587
 
537
588
  it 'encodes the list attributes' do
@@ -542,10 +593,10 @@ describe 'Mailgunner::Client' do
542
593
  end
543
594
 
544
595
  describe 'update_list method' do
545
- it 'updates the list resource and returns a response object' do
546
- stub_request(:put, "#@base_url/lists/developers%40mailgun.net")
596
+ it 'updates the list resource and returns the response object' do
597
+ stub_request(:put, "#@base_url/lists/developers%40mailgun.net").to_return(@json_response)
547
598
 
548
- @client.update_list('developers@mailgun.net', {}).must_be_instance_of(Mailgunner::Response)
599
+ @client.update_list('developers@mailgun.net', {}).must_equal(@json_response_object)
549
600
  end
550
601
 
551
602
  it 'encodes the list attributes' do
@@ -556,18 +607,18 @@ describe 'Mailgunner::Client' do
556
607
  end
557
608
 
558
609
  describe 'delete_list method' do
559
- it 'deletes the list resource with the given address and returns a response object' do
560
- stub_request(:delete, "#@base_url/lists/developers%40mailgun.net")
610
+ it 'deletes the list resource with the given address and returns the response object' do
611
+ stub_request(:delete, "#@base_url/lists/developers%40mailgun.net").to_return(@json_response)
561
612
 
562
- @client.delete_list('developers@mailgun.net').must_be_instance_of(Mailgunner::Response)
613
+ @client.delete_list('developers@mailgun.net').must_equal(@json_response_object)
563
614
  end
564
615
  end
565
616
 
566
617
  describe 'get_list_members method' do
567
- it 'fetches the list members resource and returns a response object' do
568
- stub_request(:get, "#@base_url/lists/developers%40mailgun.net/members")
618
+ it 'fetches the list members resource and returns the response object' do
619
+ stub_request(:get, "#@base_url/lists/developers%40mailgun.net/members").to_return(@json_response)
569
620
 
570
- @client.get_list_members('developers@mailgun.net').must_be_instance_of(Mailgunner::Response)
621
+ @client.get_list_members('developers@mailgun.net').must_equal(@json_response_object)
571
622
  end
572
623
 
573
624
  it 'encodes skip and limit parameters' do
@@ -578,18 +629,18 @@ describe 'Mailgunner::Client' do
578
629
  end
579
630
 
580
631
  describe 'get_list_member method' do
581
- it 'fetches the list member resource with the given address and returns a response object' do
582
- stub_request(:get, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
632
+ it 'fetches the list member resource with the given address and returns the response object' do
633
+ stub_request(:get, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address").to_return(@json_response)
583
634
 
584
- @client.get_list_member('developers@mailgun.net', @address).must_be_instance_of(Mailgunner::Response)
635
+ @client.get_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
585
636
  end
586
637
  end
587
638
 
588
639
  describe 'add_list_member method' do
589
- it 'posts to the list members resource and returns a response object' do
590
- stub_request(:post, "#@base_url/lists/developers%40mailgun.net/members")
640
+ it 'posts to the list members resource and returns the response object' do
641
+ stub_request(:post, "#@base_url/lists/developers%40mailgun.net/members").to_return(@json_response)
591
642
 
592
- @client.add_list_member('developers@mailgun.net', {}).must_be_instance_of(Mailgunner::Response)
643
+ @client.add_list_member('developers@mailgun.net', {}).must_equal(@json_response_object)
593
644
  end
594
645
 
595
646
  it 'encodes the list attributes' do
@@ -600,10 +651,10 @@ describe 'Mailgunner::Client' do
600
651
  end
601
652
 
602
653
  describe 'update_list_member method' do
603
- it 'updates the list member resource with the given address and returns a response object' do
604
- stub_request(:put, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
654
+ it 'updates the list member resource with the given address and returns the response object' do
655
+ stub_request(:put, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address").to_return(@json_response)
605
656
 
606
- @client.update_list_member('developers@mailgun.net', @address, {}).must_be_instance_of(Mailgunner::Response)
657
+ @client.update_list_member('developers@mailgun.net', @address, {}).must_equal(@json_response_object)
607
658
  end
608
659
 
609
660
  it 'encodes the list member attributes' do
@@ -614,26 +665,18 @@ describe 'Mailgunner::Client' do
614
665
  end
615
666
 
616
667
  describe 'delete_list_member method' do
617
- it 'deletes the list member resource with the given address and returns a response object' do
618
- stub_request(:delete, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
668
+ it 'deletes the list member resource with the given address and returns the response object' do
669
+ stub_request(:delete, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address").to_return(@json_response)
619
670
 
620
- @client.delete_list_member('developers@mailgun.net', @address).must_be_instance_of(Mailgunner::Response)
671
+ @client.delete_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
621
672
  end
622
673
  end
623
674
 
624
675
  describe 'get_list_stats method' do
625
- it 'fetches the list stats resource and returns a response object' do
626
- stub_request(:get, "#@base_url/lists/developers%40mailgun.net/stats")
627
-
628
- @client.get_list_stats('developers@mailgun.net').must_be_instance_of(Mailgunner::Response)
629
- end
630
- end
631
-
632
- describe 'when initialized with a different json implementation' do
633
- it 'emits a deprecation warning' do
634
- Kernel.expects(:warn).with(regexp_matches(/Mailgunner::Client :json option is deprecated/))
676
+ it 'fetches the list stats resource and returns the response object' do
677
+ stub_request(:get, "#@base_url/lists/developers%40mailgun.net/stats").to_return(@json_response)
635
678
 
636
- Mailgunner::Client.new(domain: @domain, api_key: @api_key, json: stub)
679
+ @client.get_list_stats('developers@mailgun.net').must_equal(@json_response_object)
637
680
  end
638
681
  end
639
682
  end
metadata CHANGED
@@ -1,96 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailgunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tim Craft
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-03 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 0.9.3
19
+ version: '10.1'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: 0.9.3
30
- - !ruby/object:Gem::Dependency
31
- name: mocha
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 0.13.2
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 0.13.2
26
+ version: '10.1'
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: webmock
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
- - - ~>
31
+ - - "~>"
52
32
  - !ruby/object:Gem::Version
53
- version: 1.13.0
33
+ version: '1.18'
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ~>
38
+ - - "~>"
60
39
  - !ruby/object:Gem::Version
61
- version: 1.13.0
40
+ version: '1.18'
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: mail
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ~>
45
+ - - "~>"
68
46
  - !ruby/object:Gem::Version
69
- version: 2.5.4
47
+ version: '2.5'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ~>
52
+ - - "~>"
76
53
  - !ruby/object:Gem::Version
77
- version: 2.5.4
54
+ version: '2.5'
78
55
  - !ruby/object:Gem::Dependency
79
56
  name: actionmailer
80
57
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
58
  requirements:
83
- - - ~>
59
+ - - "~>"
84
60
  - !ruby/object:Gem::Version
85
- version: 4.0.0
61
+ version: '4.0'
86
62
  type: :development
87
63
  prerelease: false
88
64
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
65
  requirements:
91
- - - ~>
66
+ - - "~>"
92
67
  - !ruby/object:Gem::Version
93
- version: 4.0.0
68
+ version: '4.0'
94
69
  description: A Ruby wrapper for the Mailgun API
95
70
  email:
96
71
  - mail@timcraft.com
@@ -98,37 +73,33 @@ executables: []
98
73
  extensions: []
99
74
  extra_rdoc_files: []
100
75
  files:
101
- - lib/mailgunner/delivery_method.rb
102
- - lib/mailgunner/response.rb
76
+ - README.md
103
77
  - lib/mailgunner.rb
78
+ - lib/mailgunner/delivery_method.rb
79
+ - mailgunner.gemspec
104
80
  - spec/mailgunner_delivery_method_spec.rb
105
- - spec/mailgunner_response_spec.rb
106
81
  - spec/mailgunner_spec.rb
107
- - README.md
108
- - mailgunner.gemspec
109
82
  homepage: http://github.com/timcraft/mailgunner
110
83
  licenses: []
84
+ metadata: {}
111
85
  post_install_message:
112
86
  rdoc_options: []
113
87
  require_paths:
114
88
  - lib
115
89
  required_ruby_version: !ruby/object:Gem::Requirement
116
- none: false
117
90
  requirements:
118
- - - ! '>='
91
+ - - ">="
119
92
  - !ruby/object:Gem::Version
120
- version: '0'
93
+ version: 1.9.3
121
94
  required_rubygems_version: !ruby/object:Gem::Requirement
122
- none: false
123
95
  requirements:
124
- - - ! '>='
96
+ - - ">="
125
97
  - !ruby/object:Gem::Version
126
98
  version: '0'
127
99
  requirements: []
128
100
  rubyforge_project:
129
- rubygems_version: 1.8.23
101
+ rubygems_version: 2.2.2
130
102
  signing_key:
131
- specification_version: 3
103
+ specification_version: 4
132
104
  summary: See description
133
105
  test_files: []
134
- has_rdoc:
@@ -1,37 +0,0 @@
1
- module Mailgunner
2
- class Response
3
- def initialize(http_response, options = {})
4
- @http_response = http_response
5
-
6
- @json = options.fetch(:json) { JSON }
7
- end
8
-
9
- def method_missing(name, *args, &block)
10
- @http_response.send(name, *args, &block)
11
- end
12
-
13
- def respond_to_missing?(name, include_private = false)
14
- @http_response.respond_to?(name)
15
- end
16
-
17
- def ok?
18
- code.to_i == 200
19
- end
20
-
21
- def client_error?
22
- (400 .. 499).include?(code.to_i)
23
- end
24
-
25
- def server_error?
26
- (500 .. 599).include?(code.to_i)
27
- end
28
-
29
- def json?
30
- self['Content-Type'].split(';').first == 'application/json'
31
- end
32
-
33
- def object
34
- @object ||= @json.parse(body)
35
- end
36
- end
37
- end
@@ -1,101 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'mocha/setup'
3
- require 'mailgunner'
4
-
5
- describe 'Mailgunner::Response' do
6
- before do
7
- @http_response = mock()
8
-
9
- @response = Mailgunner::Response.new(@http_response)
10
- end
11
-
12
- it 'delegates missing methods to the http response object' do
13
- @http_response.stubs(:code).returns('200')
14
-
15
- @response.code.must_equal('200')
16
- end
17
-
18
- describe 'ok query method' do
19
- it 'returns true if the status code is 200' do
20
- @http_response.expects(:code).returns('200')
21
-
22
- @response.ok?.must_equal(true)
23
- end
24
-
25
- it 'returns false otherwise' do
26
- @http_response.expects(:code).returns('400')
27
-
28
- @response.ok?.must_equal(false)
29
- end
30
- end
31
-
32
- describe 'client_error query method' do
33
- it 'returns true if the status code is 4xx' do
34
- @http_response.stubs(:code).returns(%w(400 401 402 404).sample)
35
-
36
- @response.client_error?.must_equal(true)
37
- end
38
-
39
- it 'returns false otherwise' do
40
- @http_response.stubs(:code).returns('200')
41
-
42
- @response.client_error?.must_equal(false)
43
- end
44
- end
45
-
46
- describe 'server_error query method' do
47
- it 'returns true if the status code is 5xx' do
48
- @http_response.stubs(:code).returns(%w(500 502 503 504).sample)
49
-
50
- @response.server_error?.must_equal(true)
51
- end
52
-
53
- it 'returns false otherwise' do
54
- @http_response.stubs(:code).returns('200')
55
-
56
- @response.server_error?.must_equal(false)
57
- end
58
- end
59
-
60
- describe 'json query method' do
61
- it 'returns true if the response has a json content type' do
62
- @http_response.expects(:[]).with('Content-Type').returns('application/json;charset=utf-8')
63
-
64
- @response.json?.must_equal(true)
65
- end
66
-
67
- it 'returns false otherwise' do
68
- @http_response.expects(:[]).with('Content-Type').returns('text/html')
69
-
70
- @response.json?.must_equal(false)
71
- end
72
- end
73
-
74
- describe 'object method' do
75
- it 'decodes the response body as json and returns a hash' do
76
- @http_response.expects(:body).returns('{"foo":"bar"}')
77
-
78
- @response.object.must_equal({'foo' => 'bar'})
79
- end
80
- end
81
- end
82
-
83
- describe 'Mailgunner::Response initialized with an alternative json implementation' do
84
- before do
85
- @json = mock()
86
-
87
- @http_response = stub
88
-
89
- @response = Mailgunner::Response.new(@http_response, :json => @json)
90
- end
91
-
92
- describe 'object method' do
93
- it 'uses the alternative json implementation to parse the response body' do
94
- @http_response.stubs(:body).returns(response_body = '{"foo":"bar"}')
95
-
96
- @json.expects(:parse).with(response_body)
97
-
98
- @response.object
99
- end
100
- end
101
- end