griddler-mandrill 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cd7048b321e79882c0e7f57e2d0cc5b64a0c18b
4
- data.tar.gz: d543a55548ddcadcb6117d60d899fa02c74b5290
3
+ metadata.gz: b5734cf6f504c80285028a0c25dc9080553d99aa
4
+ data.tar.gz: 6b0189f1ff8fda257ad92c9301bff5c88f46b19a
5
5
  SHA512:
6
- metadata.gz: 613a1f438bccfc844e0f71a4a9e084aa1c705ff896b20682c77719b337017f10cc17fc55715506f0c0a04eb143aeeb44899a7736f0aa5907ea0f8c2662d8a737
7
- data.tar.gz: 467dacb9b6103436c45c578940e27c6cd6b774df9f1a3505445bdfeb17131a79de38750cea67f2790664cc5bd6c57f03be825e2db5c52a44ebf260e7f3a95d17
6
+ metadata.gz: bc106bc175e483060107cc6a931d0fa6dfd26534365364a1a726e7d8533d9bce5080efbdef5e396c2d7eedb628e42b290264f5fbe9119c43ec0f7b675868680f
7
+ data.tar.gz: c0369360d8329cb6dd39011c6d7323ec6c7a102be4a31d299f5806228e817d13d48f25c451449c5a25196376fb4c26d31c3aa6737a6cfad3d2a1568ad1d7e00a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 1.0.2
2
+ * Replace slashes in filenames with underscores for temp file creation. #5 and
3
+ #6 via [ssidelnikov](https://github.com/ssidelnikov)
4
+ * Only process inbound events. #9 via [mgauthier-joist](https://github.com/mgauthier-joist)
5
+ * Support BCC attribute
6
+
1
7
  ## 1.0.1
2
8
  * Respect Mandrill's base64 flag to determine whether text attachments should be
3
9
  base64 decoded. #4 via [bdmac](https://github.com/bdmac)
@@ -15,6 +15,7 @@ module Griddler
15
15
  {
16
16
  to: recipients(:to, event),
17
17
  cc: recipients(:cc, event),
18
+ bcc: recipients(:bcc, event),
18
19
  from: full_email([ event[:from_email], event[:from_name] ]),
19
20
  subject: event[:subject],
20
21
  text: event.fetch(:text, ''),
@@ -30,9 +31,9 @@ module Griddler
30
31
  attr_reader :params
31
32
 
32
33
  def events
33
- @events ||= ActiveSupport::JSON.decode(params[:mandrill_events]).map do |event|
34
- event['msg'].with_indifferent_access
35
- end
34
+ @events ||= ActiveSupport::JSON.decode(params[:mandrill_events]).map { |event|
35
+ event['msg'].with_indifferent_access if event['event'] == 'inbound'
36
+ }.compact
36
37
  end
37
38
 
38
39
  def recipients(field, event)
@@ -60,7 +61,7 @@ module Griddler
60
61
  end
61
62
 
62
63
  def create_tempfile(attachment)
63
- filename = attachment[:name]
64
+ filename = attachment[:name].gsub(/\/|\\/, '_')
64
65
  tempfile = Tempfile.new(filename, Dir::tmpdir, encoding: 'ascii-8bit')
65
66
  content = attachment[:content]
66
67
  content = Base64.decode64(content) if attachment[:base64]
@@ -1,5 +1,5 @@
1
1
  module Griddler
2
2
  module Mandrill
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.2'
4
4
  end
5
5
  end
@@ -9,16 +9,19 @@ end
9
9
  describe Griddler::Mandrill::Adapter, '.normalize_params' do
10
10
  it 'normalizes parameters' do
11
11
  Griddler::Mandrill::Adapter.normalize_params(default_params).each do |params|
12
- expect(params).to be_normalized_to({
13
- to: ['The Token <token@reply.example.com>'],
14
- cc: ['Emily <emily@example.mandrillapp.com>',
15
- 'Joey <joey@example.mandrillapp.com>'],
16
- from: 'Hernan Example <hernan@example.com>',
17
- subject: 'hello',
18
- text: %r{Dear bob},
19
- html: %r{<p>Dear bob</p>},
20
- raw_body: %r{raw}
21
- })
12
+ expect(params).to be_normalized_to(params_hash_normalized)
13
+ end
14
+ end
15
+
16
+ it 'does not process events that are not inbound' do
17
+ params = mixed_event_params
18
+
19
+ normalized_params = Griddler::Mandrill::Adapter.normalize_params(params)
20
+
21
+ expect(JSON.parse(params[:mandrill_events]).size).to eq(4)
22
+ expect(normalized_params.size).to eq(2)
23
+ normalized_params.each do |params|
24
+ expect(params).to be_normalized_to(params_hash_normalized)
22
25
  end
23
26
  end
24
27
 
@@ -55,6 +58,13 @@ describe Griddler::Mandrill::Adapter, '.normalize_params' do
55
58
  expect(file.size).to eq(upload_3_params[:length])
56
59
  end
57
60
 
61
+ it 'works with filenames containing slashes' do
62
+ params = params_with_attachments_with_slashes
63
+
64
+ adapter = Griddler::Mandrill::Adapter.new(params)
65
+ expect{adapter.normalize_params}.to_not raise_error
66
+ end
67
+
58
68
  describe 'when the email has no text part' do
59
69
  before do
60
70
  @params = params_hash
@@ -104,10 +114,33 @@ describe Griddler::Mandrill::Adapter, '.normalize_params' do
104
114
  mandrill_events (params * 2).to_json
105
115
  end
106
116
 
117
+ def mixed_event_params
118
+ mandrill_events ((params_hash * 2) + (mixed_params_hash*2)).to_json
119
+ end
120
+
107
121
  def mandrill_events(json)
108
122
  { mandrill_events: json }
109
123
  end
110
124
 
125
+ def mixed_params_hash
126
+ [{
127
+ type: 'blacklist',
128
+ action: 'change',
129
+ reject: {
130
+ reason: 'hard-bounce',
131
+ detail: ' smtp;550 Requested action not taken: mailbox unavailable\n',
132
+ last_event_at: '2014-11-03 04:56:18',
133
+ email: 'herman@example.com',
134
+ created_at: '2014-08-07 04:59:20',
135
+ expires_at: '2014-11-24 04:56:18',
136
+ expired: false,
137
+ subaccount: nil,
138
+ sender: nil
139
+ },
140
+ ts: 1414990578
141
+ }]
142
+ end
143
+
111
144
  def params_hash
112
145
  [{
113
146
  event: 'inbound',
@@ -123,6 +156,7 @@ describe Griddler::Mandrill::Adapter, '.normalize_params' do
123
156
  to: [['token@reply.example.com', 'The Token']],
124
157
  cc: [['emily@example.mandrillapp.com', 'Emily'],
125
158
  ['joey@example.mandrillapp.com', 'Joey']],
159
+ bcc: [['hidden@example.mandrillapp.com', 'Roger']],
126
160
  subject: "hello",
127
161
  spam_report: {
128
162
  score: -0.8,
@@ -137,6 +171,20 @@ describe Griddler::Mandrill::Adapter, '.normalize_params' do
137
171
  }]
138
172
  end
139
173
 
174
+ def params_hash_normalized
175
+ {
176
+ to: ['The Token <token@reply.example.com>'],
177
+ cc: ['Emily <emily@example.mandrillapp.com>',
178
+ 'Joey <joey@example.mandrillapp.com>'],
179
+ bcc: ['Roger <hidden@example.mandrillapp.com>'],
180
+ from: 'Hernan Example <hernan@example.com>',
181
+ subject: 'hello',
182
+ text: %r{Dear bob},
183
+ html: %r{<p>Dear bob</p>},
184
+ raw_body: %r{raw}
185
+ }
186
+ end
187
+
140
188
  def params_with_attachments
141
189
  params = params_hash
142
190
  params[0][:msg][:attachments] = {
@@ -146,6 +194,15 @@ describe Griddler::Mandrill::Adapter, '.normalize_params' do
146
194
  mandrill_events params.to_json
147
195
  end
148
196
 
197
+ def params_with_attachments_with_slashes
198
+ params = params_hash
199
+ params[0][:msg][:attachments] = {
200
+ '=?UTF-8?B?0JrQvtC/0LjRjyB0ZW5kZXJfMTJfcm9zdGEueGxz?=' => upload_4_params,
201
+ '=?UTF-8?B?0JrQvtC\0LjRjyB0ZW5kZXJfMTJfcm9zdGEueGxz?=' => upload_5_params
202
+ }
203
+ mandrill_events params.to_json
204
+ end
205
+
149
206
  def params_with_csv_attachment
150
207
  params = params_hash
151
208
  params[0][:msg][:attachments] = {
@@ -214,4 +271,30 @@ describe Griddler::Mandrill::Adapter, '.normalize_params' do
214
271
  }
215
272
  end
216
273
  end
274
+
275
+ def upload_4_params
276
+ @upload_4_params ||= begin
277
+ content = 'Some | csv | file | here'
278
+ {
279
+ name: '=?UTF-8?B?0JrQvtC/0LjRjyB0ZW5kZXJfMTJfcm9zdGEueGxz?=',
280
+ content: content,
281
+ type: 'image/jpeg',
282
+ type: 'text/plain',
283
+ base64: false
284
+ }
285
+ end
286
+ end
287
+
288
+ def upload_5_params
289
+ @upload_5_params ||= begin
290
+ content = 'Some | csv | file | here'
291
+ {
292
+ name: '=?UTF-8?B?0JrQvtC\0LjRjyB0ZW5kZXJfMTJfcm9zdGEueGxz?=',
293
+ content: content,
294
+ type: 'text/plain',
295
+ length: content.length,
296
+ base64: false
297
+ }
298
+ end
299
+ end
217
300
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: griddler-mandrill
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stafford Brunk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-29 00:00:00.000000000 Z
11
+ date: 2014-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: griddler