mailgun-ruby 1.1.11 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e1995893ce0728f97a28d1b563b4169169d3e871b6c315da1dc0d76cec17d6a
4
- data.tar.gz: 383bea571efa4bde52d6c6204ee2b3f477aa3d90ed1eef54a483d98b62a081e4
3
+ metadata.gz: 68010cfb6e35b2a015974c634c156f502a7fe76e75e571ad394761d8e6a50d97
4
+ data.tar.gz: 14f7dc96ffbb2d5bf1e499a336efe276235e0b260c580b40171236b3ea5f77fd
5
5
  SHA512:
6
- metadata.gz: b6e4b5d442810888c03ec4ad214fd896d1198ef8d36f1ad2f92ff3895a02eff39e27fc9b78f8c6050bff75e374fe1e29595d86a50258fad778de766bfef15ec9
7
- data.tar.gz: 4665963f9b08fc5ff8143d3eda4618825c7abf9dfc2ced3ff4962618cfcd98125fc809e326c9a45ad0517b08ed711ee62f82ffce38baac205be9b87b59085bbd
6
+ metadata.gz: 39d8397545a5c30c703cde0c32558c595d4479faa91595299232b113b23d60d0e0ad88f197616fc6a8d2cde2c1952cc3c9effe5fced19a208f5f290cca45f658
7
+ data.tar.gz: 2eed77f10d1090339987b0a9b120a65017267ced80e694a7710b5058fd14145bab6a2c091c39fa6495c52242648b9524fc88c0a35c782b6dd7057aa57691c16e
@@ -1,4 +1,4 @@
1
1
  # It's the version. Yeay!
2
2
  module Mailgun
3
- VERSION = '1.1.11'
3
+ VERSION = '1.2.0'
4
4
  end
@@ -11,7 +11,7 @@ module Railgun
11
11
  class Mailer
12
12
 
13
13
  # List of the headers that will be ignored when copying headers from `mail.header_fields`
14
- IGNORED_HEADERS = %w[ to from subject ]
14
+ IGNORED_HEADERS = %w[ to from subject reply-to ]
15
15
 
16
16
  # [Hash] config ->
17
17
  # Requires *at least* `api_key` and `domain` keys.
@@ -27,7 +27,12 @@ module Railgun
27
27
  raise Railgun::ConfigurationError.new("Config requires `#{k}` key", @config) unless @config.has_key?(k)
28
28
  end
29
29
 
30
- @mg_client = Mailgun::Client.new(config[:api_key], config[:api_host] || 'api.mailgun.net', config[:api_version] || 'v3', config[:api_ssl].nil? ? true : config[:api_ssl])
30
+ @mg_client = Mailgun::Client.new(
31
+ config[:api_key],
32
+ config[:api_host] || 'api.mailgun.net',
33
+ config[:api_version] || 'v3',
34
+ config[:api_ssl].nil? ? true : config[:api_ssl],
35
+ )
31
36
  @domain = @config[:domain]
32
37
 
33
38
  # To avoid exception in mail gem v2.6
@@ -62,6 +67,9 @@ module Railgun
62
67
  # After prefixing them with the proper option type, they are added to
63
68
  # the message hash where they will then be sent to the API as JSON.
64
69
  #
70
+ # It is important to note that headers set in `mailgun_headers` on the message
71
+ # WILL overwrite headers set via `mail.headers()`.
72
+ #
65
73
  # @param [Mail::Message] mail message to transform
66
74
  #
67
75
  # @return [Hash] transformed message hash
@@ -85,12 +93,17 @@ module Railgun
85
93
  msg_headers = Hash.new
86
94
 
87
95
  # h:* attributes (headers)
88
- mail.mailgun_headers.try(:each) do |k, v|
89
- msg_headers[k] = v
90
- end
91
96
 
97
+ # Let's set all of these headers on the [Mail::Message] so that
98
+ # the are created inside of a [Mail::Header] instance and processed there.
99
+ mail.headers(mail.mailgun_headers || {})
92
100
  mail.header_fields.each do |field|
93
- msg_headers[field.name] = field.value
101
+ header = field.name.downcase
102
+ if msg_headers.include? header
103
+ msg_headers[header] = [msg_headers[header], field.value].flatten
104
+ else
105
+ msg_headers[header] = field.value
106
+ end
94
107
  end
95
108
 
96
109
  msg_headers.each do |k, v|
@@ -24,9 +24,9 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.required_ruby_version = '>= 2.2.2'
26
26
 
27
- spec.add_development_dependency 'bundler', '~> 1.16.2'
27
+ spec.add_development_dependency 'bundler', '>= 1.16.2'
28
28
  spec.add_development_dependency 'rspec', '~> 3.8.0'
29
- spec.add_development_dependency 'rake', '~> 12.3.1'
29
+ spec.add_development_dependency 'rake', '~> 12.3.2'
30
30
  spec.add_development_dependency 'webmock', '~> 3.4.2'
31
31
  spec.add_development_dependency 'pry', '~> 0.11.3'
32
32
  spec.add_development_dependency 'vcr', '~> 3.0.3'
@@ -92,24 +92,24 @@ describe 'Railgun::Mailer' do
92
92
  it 'adds headers to message body' do
93
93
  message = UnitTestMailer.plain_message('test@example.org', '', {})
94
94
  message.mailgun_headers ||= {
95
- 'X-Unit-Test' => 'true',
95
+ 'x-unit-test' => 'true',
96
96
  }
97
97
 
98
98
  body = Railgun.transform_for_mailgun(message)
99
99
 
100
- expect(body).to include('h:X-Unit-Test')
101
- expect(body['h:X-Unit-Test']).to eq('true')
100
+ expect(body).to include('h:x-unit-test')
101
+ expect(body['h:x-unit-test']).to eq('true')
102
102
  end
103
103
 
104
104
  it 'adds headers to message body from mailer' do
105
105
  message = UnitTestMailer.plain_message('test@example.org', '', {
106
- 'X-Unit-Test-2' => 'true',
106
+ 'x-unit-test-2' => 'true',
107
107
  })
108
108
 
109
109
  body = Railgun.transform_for_mailgun(message)
110
110
 
111
- expect(body).to include('h:X-Unit-Test-2')
112
- expect(body['h:X-Unit-Test-2']).to eq('true')
111
+ expect(body).to include('h:x-unit-test-2')
112
+ expect(body['h:x-unit-test-2']).to eq('true')
113
113
  end
114
114
 
115
115
  it 'properly handles headers that are passed as separate POST params' do
@@ -131,7 +131,7 @@ describe 'Railgun::Mailer' do
131
131
  expect(body).not_to include("h:#{header}")
132
132
  end
133
133
 
134
- ['bcc', 'cc', 'to', 'h:X-Source'].each do |param|
134
+ ['bcc', 'cc', 'to', 'h:x-source'].each do |param|
135
135
  expect(body).to include(param)
136
136
  end
137
137
 
@@ -142,7 +142,7 @@ describe 'Railgun::Mailer' do
142
142
  expect(body[:html]).to eq(['<p>Test!</p>'.html_safe])
143
143
  expect(body['bcc']).to eq(['list@example.org'])
144
144
  expect(body['cc']).to eq(['admin@example.com'])
145
- expect(body['h:X-Source']).to eq('unit tests')
145
+ expect(body['h:x-source']).to eq('unit tests')
146
146
  end
147
147
 
148
148
  it 'properly adds attachments' do
@@ -163,4 +163,55 @@ describe 'Railgun::Mailer' do
163
163
  expect(ActionMailer::Base.deliveries).to include(message)
164
164
  end
165
165
 
166
+ it 'ignores `reply-to` in headers' do
167
+ message = UnitTestMailer.plain_message('test@example.org', '', {
168
+ 'reply-to' => 'user@example.com',
169
+ })
170
+ message.mailgun_headers = {
171
+ 'Reply-To' => 'administrator@example.org',
172
+ }
173
+ message.headers({'REPLY-TO' => 'admin@example.net'})
174
+ message.reply_to = "dude@example.com.au"
175
+
176
+ body = Railgun.transform_for_mailgun(message)
177
+ expect(body).to include('h:reply-to')
178
+ expect(body).not_to include('h:Reply-To')
179
+ expect(body['h:reply-to']).to eq('dude@example.com.au')
180
+ end
181
+
182
+ it 'treats `headers()` names as case-insensitve' do
183
+ message = UnitTestMailer.plain_message('test@example.org', '', {
184
+ 'X-BIG-VALUE' => 1,
185
+ })
186
+
187
+ body = Railgun.transform_for_mailgun(message)
188
+ expect(body).to include('h:x-big-value')
189
+ expect(body['h:x-big-value']).to eq("1")
190
+ end
191
+
192
+ it 'treats `mailgun_headers` names as case-insensitive' do
193
+ message = UnitTestMailer.plain_message('test@example.org', '', {})
194
+ message.mailgun_headers = {
195
+ 'X-BIG-VALUE' => 1,
196
+ }
197
+
198
+ body = Railgun.transform_for_mailgun(message)
199
+ expect(body).to include('h:x-big-value')
200
+ expect(body['h:x-big-value']).to eq("1")
201
+ end
202
+
203
+ it 'handles multi-value, mixed case headers correctly' do
204
+ message = UnitTestMailer.plain_message('test@example.org', '', {})
205
+ message.headers({
206
+ 'x-neat-header' => 'foo',
207
+ 'X-Neat-Header' => 'bar',
208
+ 'X-NEAT-HEADER' => 'zoop',
209
+ })
210
+
211
+ body = Railgun.transform_for_mailgun(message)
212
+ expect(body).to include('h:x-neat-header')
213
+ expect(body['h:x-neat-header']).to include('foo')
214
+ expect(body['h:x-neat-header']).to include('bar')
215
+ expect(body['h:x-neat-header']).to include('zoop')
216
+ end
166
217
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailgun-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.11
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mailgun
@@ -9,20 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-10-12 00:00:00.000000000 Z
12
+ date: 2019-08-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: 1.16.2
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 1.16.2
28
28
  - !ruby/object:Gem::Dependency
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 12.3.1
48
+ version: 12.3.2
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 12.3.1
55
+ version: 12.3.2
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: webmock
58
58
  requirement: !ruby/object:Gem::Requirement