mailgun-ruby 1.4.1 → 1.4.3

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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +30 -8
  3. data/.rubocop.yml +64 -4
  4. data/Gemfile +3 -1
  5. data/README.md +1 -1
  6. data/Rakefile +5 -8
  7. data/docs/AnalyticsTags.md +63 -0
  8. data/lib/mailgun/address.rb +5 -5
  9. data/lib/mailgun/chains.rb +2 -3
  10. data/lib/mailgun/client.rb +56 -56
  11. data/lib/mailgun/domains/domains.rb +11 -10
  12. data/lib/mailgun/events/events.rb +4 -3
  13. data/lib/mailgun/exceptions/exceptions.rb +12 -15
  14. data/lib/mailgun/helpers/api_version_checker.rb +6 -1
  15. data/lib/mailgun/lists/opt_in_handler.rb +6 -10
  16. data/lib/mailgun/logs/logs.rb +4 -2
  17. data/lib/mailgun/messages/batch_message.rb +10 -10
  18. data/lib/mailgun/messages/message_builder.rb +40 -56
  19. data/lib/mailgun/metrics/metrics.rb +12 -6
  20. data/lib/mailgun/response.rb +12 -10
  21. data/lib/mailgun/subaccounts/subaccounts.rb +13 -8
  22. data/lib/mailgun/suppressions.rb +36 -43
  23. data/lib/mailgun/tags/analytics_tags.rb +37 -2
  24. data/lib/mailgun/tags/tags.rb +29 -19
  25. data/lib/mailgun/templates/templates.rb +40 -29
  26. data/lib/mailgun/version.rb +3 -1
  27. data/lib/mailgun/webhooks/webhooks.rb +22 -19
  28. data/lib/mailgun-ruby.rb +2 -0
  29. data/lib/mailgun.rb +4 -4
  30. data/lib/railgun/attachment.rb +12 -19
  31. data/lib/railgun/errors.rb +2 -3
  32. data/lib/railgun/mailer.rb +37 -41
  33. data/lib/railgun/railtie.rb +2 -0
  34. data/lib/railgun.rb +2 -0
  35. data/mailgun.gemspec +15 -11
  36. data/spec/integration/analytics_tags_spec.rb +54 -0
  37. data/spec/integration/bounces_spec.rb +12 -11
  38. data/spec/integration/campaign_spec.rb +20 -18
  39. data/spec/integration/complaints_spec.rb +8 -6
  40. data/spec/integration/domains_spec.rb +12 -18
  41. data/spec/integration/email_validation_spec.rb +35 -34
  42. data/spec/integration/events_spec.rb +8 -8
  43. data/spec/integration/list_members_spec.rb +27 -26
  44. data/spec/integration/list_spec.rb +22 -21
  45. data/spec/integration/logs_spec.rb +49 -47
  46. data/spec/integration/mailer_spec.rb +7 -3
  47. data/spec/integration/mailgun_spec.rb +85 -92
  48. data/spec/integration/metrics_spec.rb +137 -131
  49. data/spec/integration/routes_spec.rb +41 -40
  50. data/spec/integration/stats_spec.rb +4 -2
  51. data/spec/integration/subaccounts_spec.rb +9 -10
  52. data/spec/integration/suppressions_spec.rb +222 -44
  53. data/spec/integration/templates_spec.rb +14 -12
  54. data/spec/integration/unsubscribes_spec.rb +8 -6
  55. data/spec/integration/webhook_spec.rb +18 -12
  56. data/spec/spec_helper.rb +15 -8
  57. data/spec/unit/client_spec.rb +424 -0
  58. data/spec/unit/connection/test_client.rb +108 -55
  59. data/spec/unit/events/events_spec.rb +48 -29
  60. data/spec/unit/exceptions/exceptions_spec.rb +8 -7
  61. data/spec/unit/helpers/api_version_checker_spec.rb +206 -0
  62. data/spec/unit/lists/opt_in_handler_spec.rb +11 -7
  63. data/spec/unit/mailgun_spec.rb +71 -68
  64. data/spec/unit/messages/batch_message_spec.rb +37 -36
  65. data/spec/unit/messages/message_builder_spec.rb +170 -169
  66. data/spec/unit/railgun/content_type_spec.rb +31 -30
  67. data/spec/unit/railgun/mailer_spec.rb +62 -59
  68. data/spec/unit/response_spec.rb +225 -0
  69. data/vcr_cassettes/For_the_suppressions_handling_class/creates_a_single_bounce.yml +55 -0
  70. data/vcr_cassettes/analytics_tags.yml +187 -0
  71. data/vcr_cassettes/suppressions.yml +1053 -170
  72. metadata +95 -29
  73. data/.rubocop_todo.yml +0 -22
data/lib/mailgun.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # require ruby dependencies
2
4
  require 'json'
3
5
  require 'openssl'
@@ -16,7 +18,7 @@ require 'mailgun/exceptions/exceptions'
16
18
  require 'mailgun/helpers/api_version_checker'
17
19
 
18
20
  # load zeitwerk
19
- Zeitwerk::Loader.for_gem.tap do |loader| # rubocop:disable Style/SymbolProc
21
+ Zeitwerk::Loader.for_gem.tap do |loader|
20
22
  loader.ignore("#{__dir__}/mailgun-ruby.rb")
21
23
  loader.ignore("#{__dir__}/railgun.rb")
22
24
  loader.ignore("#{__dir__}/railgun")
@@ -41,7 +43,6 @@ end
41
43
  #
42
44
  # See the Github documentation for full examples.
43
45
  module Mailgun
44
-
45
46
  class << self
46
47
  attr_accessor :api_host,
47
48
  :api_key,
@@ -56,7 +57,6 @@ module Mailgun
56
57
  yield self
57
58
  true
58
59
  end
59
- alias_method :config, :configure
60
+ alias config configure
60
61
  end
61
-
62
62
  end
@@ -1,7 +1,7 @@
1
- module Railgun
1
+ # frozen_string_literal: true
2
2
 
3
+ module Railgun
3
4
  class Attachment < StringIO
4
-
5
5
  attr_reader :filename, :content_type, :path,
6
6
  :original_filename, :overwritten_filename
7
7
 
@@ -9,17 +9,15 @@ module Railgun
9
9
  @path = ''
10
10
  @inline = args.detect { |opt| opt[:inline] }
11
11
 
12
- if @inline
13
- @filename = attachment.cid
14
- else
15
- @filename = attachment.filename
16
- end
12
+ @filename = if @inline
13
+ attachment.cid
14
+ else
15
+ attachment.filename
16
+ end
17
17
 
18
18
  @original_filename = @filename
19
19
 
20
- if args.detect { |opt| opt[:filename] }
21
- @filename = opt[:filename]
22
- end
20
+ @filename = opt[:filename] if args.detect { |opt| opt[:filename] }
23
21
 
24
22
  @overwritten_filename = @filename
25
23
 
@@ -32,7 +30,7 @@ module Railgun
32
30
  @inline
33
31
  end
34
32
 
35
- def is_original_filename
33
+ def original_filename?
36
34
  @original_filename == @overwritten_filename
37
35
  end
38
36
 
@@ -40,17 +38,12 @@ module Railgun
40
38
  @filename
41
39
  end
42
40
 
43
- def attach_to_message!(mb)
44
- if mb.nil?
45
- nil
46
- end
47
-
41
+ def attach_to_message!(m_body)
48
42
  if inline?
49
- mb.add_inline_image self, @filename
43
+ m_body.add_inline_image self, @filename
50
44
  else
51
- mb.add_attachment self, @filename
45
+ m_body.add_attachment self, @filename
52
46
  end
53
47
  end
54
-
55
48
  end
56
49
  end
@@ -1,7 +1,7 @@
1
- module Railgun
1
+ # frozen_string_literal: true
2
2
 
3
+ module Railgun
3
4
  class Error < StandardError
4
-
5
5
  attr_reader :object
6
6
 
7
7
  def initialize(message = nil, object = nil)
@@ -15,7 +15,6 @@ module Railgun
15
15
  end
16
16
 
17
17
  class InternalError < Error
18
-
19
18
  attr_reader :source_exception
20
19
 
21
20
  def initialize(source_exc, message = nil, object = nil)
@@ -1,11 +1,11 @@
1
- module Railgun
1
+ # frozen_string_literal: true
2
2
 
3
+ module Railgun
3
4
  # Railgun::Mailer is an ActionMailer provider for sending mail through
4
5
  # Mailgun.
5
6
  class Mailer
6
-
7
7
  # List of the headers that will be ignored when copying headers from `mail.header_fields`
8
- IGNORED_HEADERS = %w[ to from subject reply-to mime-version template ]
8
+ IGNORED_HEADERS = %w[to from subject reply-to mime-version template].freeze
9
9
 
10
10
  # [Hash] config ->
11
11
  # Requires *at least* `api_key` and `domain` keys.
@@ -17,15 +17,15 @@ module Railgun
17
17
  def initialize(config)
18
18
  @config = config
19
19
 
20
- [:api_key, :domain].each do |k|
21
- raise Railgun::ConfigurationError.new("Config requires `#{k}` key", @config) unless @config.has_key?(k)
20
+ %i[api_key domain].each do |k|
21
+ raise Railgun::ConfigurationError.new("Config requires `#{k}` key", @config) unless @config.key?(k)
22
22
  end
23
23
 
24
24
  @mg_client = Mailgun::Client.new(
25
25
  config[:api_key],
26
26
  config[:api_host] || 'api.mailgun.net',
27
27
  config[:api_version] || 'v3',
28
- config[:api_ssl].nil? ? true : config[:api_ssl],
28
+ config[:api_ssl].nil? || config[:api_ssl],
29
29
  false,
30
30
  config[:timeout]
31
31
  )
@@ -34,14 +34,14 @@ module Railgun
34
34
  # To avoid exception in mail gem v2.6
35
35
  @settings = { return_response: true }
36
36
 
37
- if (@config[:fake_message_send] || false)
38
- Rails.logger.info "NOTE: fake message sending has been enabled for mailgun-ruby!"
39
- @mg_client.enable_test_mode!
40
- end
37
+ return unless @config[:fake_message_send] || false
38
+
39
+ Rails.logger.info 'NOTE: fake message sending has been enabled for mailgun-ruby!'
40
+ @mg_client.enable_test_mode!
41
41
  end
42
42
 
43
43
  def deliver!(mail)
44
- @mg_domain = set_mg_domain(mail)
44
+ @mg_domain = mg_domain(mail)
45
45
  @mg_client.set_api_key(mail[:api_key].value) if mail[:api_key].present?
46
46
  @mg_client.set_subaccount(mail[:subaccount_id].value) if mail[:subaccount_id].present?
47
47
 
@@ -52,7 +52,7 @@ module Railgun
52
52
  mg_message = Railgun.transform_for_mailgun(mail)
53
53
  response = @mg_client.send_message(@mg_domain, mg_message)
54
54
 
55
- if response.code == 200 then
55
+ if response.code == 200
56
56
  mg_id = response.to_h['id']
57
57
  mail.message_id = mg_id
58
58
  end
@@ -66,11 +66,11 @@ module Railgun
66
66
  private
67
67
 
68
68
  # Set @mg_domain from mail[:domain] header if present, then remove it to prevent being sent.
69
- def set_mg_domain(mail)
69
+ def mg_domain(mail)
70
70
  return mail[:domain].value if mail[:domain]
71
+
71
72
  domain
72
73
  end
73
-
74
74
  end
75
75
 
76
76
  module_function
@@ -102,7 +102,7 @@ module Railgun
102
102
  # note: this will filter out parameters such as `from`, `to`, and so forth
103
103
  # as they are accepted as POST parameters on the message endpoint.
104
104
 
105
- msg_headers = Hash.new
105
+ msg_headers = {}
106
106
 
107
107
  # h:* attributes (headers)
108
108
 
@@ -111,11 +111,11 @@ module Railgun
111
111
  mail.headers(mail.mailgun_headers || {})
112
112
  mail.header_fields.each do |field|
113
113
  header = field.name.downcase
114
- if msg_headers.include? header
115
- msg_headers[header] = [msg_headers[header], field.value].flatten
116
- else
117
- msg_headers[header] = field.value
118
- end
114
+ msg_headers[header] = if msg_headers.include? header
115
+ [msg_headers[header], field.value].flatten
116
+ else
117
+ field.value
118
+ end
119
119
  end
120
120
 
121
121
  msg_headers.each do |k, v|
@@ -140,7 +140,7 @@ module Railgun
140
140
  message['recipient-variables'] = mail.mailgun_recipient_variables.to_json if mail.mailgun_recipient_variables
141
141
 
142
142
  # reject blank values
143
- message.delete_if do |k, v|
143
+ message.delete_if do |_k, v|
144
144
  next true if v.nil?
145
145
 
146
146
  # if it's an array remove empty elements
@@ -149,7 +149,7 @@ module Railgun
149
149
  v.respond_to?(:empty?) && v.empty?
150
150
  end
151
151
 
152
- return message
152
+ message
153
153
  end
154
154
 
155
155
  # Acts on a Rails/ActionMailer message object and uses Mailgun::MessageBuilder
@@ -169,7 +169,7 @@ module Railgun
169
169
  mb.body_text extract_body_text(mail)
170
170
  mb.amp_html extract_amp_html(mail)
171
171
 
172
- [:to, :cc, :bcc].each do |rcpt_type|
172
+ %i[to cc bcc].each do |rcpt_type|
173
173
  addrs = mail[rcpt_type] || nil
174
174
  case addrs
175
175
  when String
@@ -196,7 +196,7 @@ module Railgun
196
196
  attach.attach_to_message! mb
197
197
  end
198
198
 
199
- return mb.message
199
+ mb.message
200
200
  end
201
201
 
202
202
  # Returns the decoded HTML body from the Mail::Message object if available,
@@ -206,11 +206,9 @@ module Railgun
206
206
  #
207
207
  # @return [String]
208
208
  def extract_body_html(mail)
209
- begin
210
- retrieve_html_part(mail).body.decoded || nil
211
- rescue
212
- nil
213
- end
209
+ retrieve_html_part(mail).body.decoded || nil
210
+ rescue StandardError
211
+ nil
214
212
  end
215
213
 
216
214
  # Returns the decoded text body from the Mail::Message object if it is available,
@@ -220,11 +218,9 @@ module Railgun
220
218
  #
221
219
  # @return [String]
222
220
  def extract_body_text(mail)
223
- begin
224
- retrieve_text_part(mail).body.decoded || nil
225
- rescue
226
- nil
227
- end
221
+ retrieve_text_part(mail).body.decoded || nil
222
+ rescue StandardError
223
+ nil
228
224
  end
229
225
 
230
226
  # Returns the decoded AMP HTML from the Mail::Message object if it is available,
@@ -234,11 +230,9 @@ module Railgun
234
230
  #
235
231
  # @return [String]
236
232
  def extract_amp_html(mail)
237
- begin
238
- retrieve_amp_part(mail).body.decoded || nil
239
- rescue
240
- nil
241
- end
233
+ retrieve_amp_part(mail).body.decoded || nil
234
+ rescue StandardError
235
+ nil
242
236
  end
243
237
 
244
238
  # Returns the mail object from the Mail::Message object if text part exists,
@@ -250,7 +244,8 @@ module Railgun
250
244
  # @return [Mail::Message] mail message with its content-type = text/plain
251
245
  def retrieve_text_part(mail)
252
246
  return mail.text_part if mail.multipart?
253
- (mail.mime_type =~ /^text\/plain$/i) && mail
247
+
248
+ (mail.mime_type =~ %r{^text/plain$}i) && mail
254
249
  end
255
250
 
256
251
  # Returns the mail object from the Mail::Message object if html part exists,
@@ -262,7 +257,8 @@ module Railgun
262
257
  # @return [Mail::Message] mail message with its content-type = text/html
263
258
  def retrieve_html_part(mail)
264
259
  return mail.html_part if mail.multipart?
265
- (mail.mime_type =~ /^text\/html$/i) && mail
260
+
261
+ (mail.mime_type =~ %r{^text/html$}i) && mail
266
262
  end
267
263
 
268
264
  # Returns the mail object from the Mail::Message object if AMP part exists,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Railgun
2
4
  class Railtie < ::Rails::Railtie
3
5
  ActiveSupport.on_load(:action_mailer) do
data/lib/railgun.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # require ruby dependencies
2
4
  require 'json'
3
5
 
data/mailgun.gemspec CHANGED
@@ -1,10 +1,10 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'mailgun/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
-
8
8
  spec.name = 'mailgun-ruby'
9
9
  spec.version = Mailgun::VERSION
10
10
  spec.homepage = 'https://www.mailgun.com/'
@@ -23,21 +23,25 @@ Gem::Specification.new do |spec|
23
23
  spec.files = `git ls-files -z`.split("\x0")
24
24
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
25
25
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
- spec.require_paths = ["lib"]
26
+ spec.require_paths = ['lib']
27
27
 
28
28
  spec.required_ruby_version = '>= 3.0.0'
29
29
 
30
30
  spec.add_development_dependency 'bundler', '>= 1.16.2'
31
+ spec.add_development_dependency 'pry', '~> 0.16.0'
32
+ spec.add_development_dependency 'rails'
33
+ spec.add_development_dependency 'rake', '~> 13.3.1'
31
34
  spec.add_development_dependency 'rspec', '~> 3.13.0'
32
35
  spec.add_development_dependency 'rspec-its', '~> 2.0.0'
33
- spec.add_development_dependency 'rake', '~> 13.3.1'
34
- spec.add_development_dependency 'webmock', '~> 3.7'
35
- spec.add_development_dependency 'pry', '~> 0.16.0'
36
+ spec.add_development_dependency 'rubocop'
37
+ spec.add_development_dependency 'rubocop-rake'
38
+ spec.add_development_dependency 'rubocop-rspec'
39
+ spec.add_development_dependency 'simplecov'
40
+ spec.add_development_dependency 'simplecov-json'
36
41
  spec.add_development_dependency 'vcr', '~> 6.4.0'
37
- spec.add_development_dependency 'simplecov', '~> 0.16.1'
38
- spec.add_development_dependency 'rails'
39
- spec.add_dependency 'mini_mime'
40
- spec.add_dependency 'faraday', "~> 2.1"
42
+ spec.add_development_dependency 'webmock', '~> 3.7'
43
+ spec.add_dependency 'faraday', '~> 2.1'
41
44
  spec.add_dependency 'faraday-multipart', '< 2'
45
+ spec.add_dependency 'mini_mime'
42
46
  spec.add_dependency 'zeitwerk'
43
47
  end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'mailgun'
5
+
6
+ vcr_opts = { cassette_name: 'analytics_tags' }
7
+
8
+ describe 'AnalyticsTags', vcr: vcr_opts do
9
+ let(:api_version) { APIVERSION }
10
+ let(:mg_client) { Mailgun::Client.new(APIKEY, APIHOST, api_version, SSL) }
11
+ let(:mg_obj) { Mailgun::AnalyticsTags.new(mg_client) }
12
+ let(:api_version) { 'v1' }
13
+
14
+ describe '#update' do
15
+ it 'updates a tag' do
16
+ response = mg_obj.update('test1', 'test_description')
17
+
18
+ expect(response).to be_truthy
19
+ end
20
+ end
21
+
22
+ describe '#list' do
23
+ it 'returns a list of tags' do
24
+ response = mg_obj.list(
25
+ {
26
+ pagination: {
27
+ sort: 'lastseen:desc',
28
+ limit: 10
29
+ },
30
+ include_subaccounts: true
31
+ }
32
+ )
33
+
34
+ expect(response[0]['account_id']).to eq('test')
35
+ expect(response[0]['tag']).to eq('test1')
36
+ end
37
+ end
38
+
39
+ describe '#remove' do
40
+ it 'removes a tag' do
41
+ response = mg_obj.remove('test1')
42
+
43
+ expect(response).to be_truthy
44
+ end
45
+ end
46
+
47
+ describe '#limits' do
48
+ it 'returns limits' do
49
+ response = mg_obj.limits
50
+
51
+ expect(response['limit']).to eq(100_000)
52
+ end
53
+ end
54
+ end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mailgun'
3
5
 
4
- vcr_opts = { :cassette_name => "bounces" }
6
+ vcr_opts = { cassette_name: 'bounces' }
5
7
 
6
8
  describe 'For the Bounces endpoint', order: :defined, vcr: vcr_opts do
7
9
  before(:all) do
@@ -12,33 +14,32 @@ describe 'For the Bounces endpoint', order: :defined, vcr: vcr_opts do
12
14
 
13
15
  it 'creates a bounce' do
14
16
  @result = @mg_obj.post("#{@domain}/bounces",
15
- {:address => @email,
16
- :code => 550,
17
- :error => "Integration Test"})
17
+ { address: @email,
18
+ code: 550,
19
+ error: 'Integration Test' })
18
20
 
19
21
  @result.to_h!
20
- expect(@result.body["message"]).to eq("Address has been added to the bounces table")
21
- expect(@result.body["address"]).to eq(@email)
22
+ expect(@result.body['message']).to eq('Address has been added to the bounces table')
23
+ expect(@result.body['address']).to eq(@email)
22
24
  end
23
25
 
24
26
  it 'get a bounce.' do
25
27
  result = @mg_obj.get("#{@domain}/bounces/#{CGI.escape(@email)}")
26
28
 
27
29
  result.to_h!
28
- expect(result.body["code"]).to eq("550")
29
- expect(result.body["address"]).to eq(@email)
30
- expect(result.body["error"]).to eq("Integration Test")
30
+ expect(result.body['code']).to eq('550')
31
+ expect(result.body['address']).to eq(@email)
32
+ expect(result.body['error']).to eq('Integration Test')
31
33
  end
32
34
 
33
35
  it 'gets a list of bounces.' do
34
36
  result = @mg_obj.get("#{@domain}/bounces")
35
37
 
36
38
  result.to_h!
37
- expect(result.body["items"].length).to be > 0
39
+ expect(result.body['items'].length).to be > 0
38
40
  end
39
41
 
40
42
  it 'deletes a bounce' do
41
43
  @mg_obj.delete("#{@domain}/bounces/#{CGI.escape(@email)}")
42
44
  end
43
-
44
45
  end
@@ -1,57 +1,59 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mailgun'
3
5
 
4
- vcr_opts = { :cassette_name => "campaigns" }
6
+ vcr_opts = { cassette_name: 'campaigns' }
5
7
 
6
8
  describe 'For the campaigns endpoint', vcr: vcr_opts do
7
9
  before(:all) do
8
10
  skip 'pending removal'
9
11
  @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
10
12
  @domain = TESTDOMAIN
11
- @campaign_id = "integration_test_campaign"
13
+ @campaign_id = 'integration_test_campaign'
12
14
  end
13
15
 
14
16
  it 'creates a campaign' do
15
- result = @mg_obj.post("#{@domain}/campaigns", {:name => 'My Campaign',
16
- :id => @campaign_id})
17
+ result = @mg_obj.post("#{@domain}/campaigns", { name: 'My Campaign',
18
+ id: @campaign_id })
17
19
 
18
20
  result.to_h!
19
- expect(result.body["message"]).to eq("Campaign created")
20
- expect(result.body["campaign"]["id"]).to eq(@campaign_id)
21
- expect(result.body["campaign"]["name"]).to eq('My Campaign')
21
+ expect(result.body['message']).to eq('Campaign created')
22
+ expect(result.body['campaign']['id']).to eq(@campaign_id)
23
+ expect(result.body['campaign']['name']).to eq('My Campaign')
22
24
  end
23
25
 
24
26
  it 'get a campaign.' do
25
27
  result = @mg_obj.get("#{@domain}/campaigns/#{@campaign_id}")
26
28
 
27
29
  result.to_h!
28
- expect(result.body["id"]).to eq(@campaign_id)
29
- expect(result.body["name"]).to eq('My Campaign')
30
+ expect(result.body['id']).to eq(@campaign_id)
31
+ expect(result.body['name']).to eq('My Campaign')
30
32
  end
31
33
 
32
34
  it 'gets a list of all campaigns.' do
33
- result = @mg_obj.get("#{@domain}/campaigns", {:limit => 50})
35
+ result = @mg_obj.get("#{@domain}/campaigns", { limit: 50 })
34
36
 
35
37
  result.to_h!
36
- expect(result.body["total_count"]).to be > 0
38
+ expect(result.body['total_count']).to be > 0
37
39
  end
38
40
 
39
41
  it 'update a campaign.' do
40
- result = @mg_obj.put("#{@domain}/campaigns/#{@campaign_id}", {:name => 'My Updated Campaign',
41
- :id => @campaign_id})
42
+ result = @mg_obj.put("#{@domain}/campaigns/#{@campaign_id}", { name: 'My Updated Campaign',
43
+ id: @campaign_id })
42
44
 
43
45
  result.to_h!
44
- expect(result.body["message"]).to eq("Campaign updated")
45
- expect(result.body["campaign"]["id"]).to eq(@campaign_id)
46
- expect(result.body["campaign"]["name"]).to eq('My Updated Campaign')
46
+ expect(result.body['message']).to eq('Campaign updated')
47
+ expect(result.body['campaign']['id']).to eq(@campaign_id)
48
+ expect(result.body['campaign']['name']).to eq('My Updated Campaign')
47
49
  end
48
50
 
49
51
  it 'get campaign events.' do
50
- expect{@mg_obj.get("#{@domain}/campaigns/#{@campaign_id}/events", {:groupby => "clicked"})}.not_to raise_error
52
+ expect { @mg_obj.get("#{@domain}/campaigns/#{@campaign_id}/events", { groupby: 'clicked' }) }.not_to raise_error
51
53
  end
52
54
 
53
55
  it 'get campaign stats.' do
54
- expect{@mg_obj.get("#{@domain}/campaigns/#{@campaign_id}/stats", {:groupby => "domain"})}.not_to raise_error
56
+ expect { @mg_obj.get("#{@domain}/campaigns/#{@campaign_id}/stats", { groupby: 'domain' }) }.not_to raise_error
55
57
  end
56
58
 
57
59
  it 'removes a campaign' do
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'mailgun'
3
5
 
4
- vcr_opts = { :cassette_name => "complaints" }
6
+ vcr_opts = { cassette_name: 'complaints' }
5
7
 
6
8
  describe 'For the Complaints endpoint', order: :defined, vcr: vcr_opts do
7
9
  before(:all) do
@@ -11,25 +13,25 @@ describe 'For the Complaints endpoint', order: :defined, vcr: vcr_opts do
11
13
  end
12
14
 
13
15
  it 'creates a complaint' do
14
- @result = @mg_obj.post("#{@domain}/complaints", {:address => @email})
16
+ @result = @mg_obj.post("#{@domain}/complaints", { address: @email })
15
17
 
16
18
  @result.to_h!
17
- expect(@result.body["message"]).to eq("Address has been added to the complaints table")
18
- expect(@result.body["address"]).to eq(@email)
19
+ expect(@result.body['message']).to eq('Address has been added to the complaints table')
20
+ expect(@result.body['address']).to eq(@email)
19
21
  end
20
22
 
21
23
  it 'get a complaint.' do
22
24
  result = @mg_obj.get("#{@domain}/complaints/#{@email}")
23
25
 
24
26
  result.to_h!
25
- expect(result.body["address"]).to eq(@email)
27
+ expect(result.body['address']).to eq(@email)
26
28
  end
27
29
 
28
30
  it 'gets a list of complaints.' do
29
31
  result = @mg_obj.get("#{@domain}/complaints")
30
32
 
31
33
  result.to_h!
32
- expect(result.body["items"].length).to be > 0
34
+ expect(result.body['items'].length).to be > 0
33
35
  end
34
36
 
35
37
  it 'removes a complaint' do