mail_room 0.9.1 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/.gitlab-ci.yml +14 -12
  3. data/.rubocop.yml +5 -0
  4. data/.rubocop_todo.yml +501 -0
  5. data/.ruby-version +1 -1
  6. data/.travis.yml +15 -6
  7. data/CHANGELOG.md +25 -0
  8. data/README.md +137 -14
  9. data/Rakefile +1 -1
  10. data/lib/mail_room/arbitration/redis.rb +8 -15
  11. data/lib/mail_room/cli.rb +9 -2
  12. data/lib/mail_room/connection.rb +6 -160
  13. data/lib/mail_room/crash_handler.rb +26 -0
  14. data/lib/mail_room/delivery/letter_opener.rb +1 -1
  15. data/lib/mail_room/delivery/postback.rb +39 -7
  16. data/lib/mail_room/delivery/que.rb +4 -2
  17. data/lib/mail_room/delivery/sidekiq.rb +6 -4
  18. data/lib/mail_room/imap/connection.rb +200 -0
  19. data/lib/mail_room/imap/message.rb +19 -0
  20. data/lib/mail_room/imap.rb +8 -0
  21. data/lib/mail_room/logger/structured.rb +35 -0
  22. data/lib/mail_room/mailbox.rb +123 -28
  23. data/lib/mail_room/mailbox_watcher.rb +11 -1
  24. data/lib/mail_room/message.rb +16 -0
  25. data/lib/mail_room/microsoft_graph/connection.rb +217 -0
  26. data/lib/mail_room/microsoft_graph.rb +7 -0
  27. data/lib/mail_room/version.rb +1 -1
  28. data/lib/mail_room.rb +3 -1
  29. data/logfile.log +1 -0
  30. data/mail_room.gemspec +8 -4
  31. data/spec/fixtures/test_config.yml +2 -0
  32. data/spec/lib/arbitration/redis_spec.rb +44 -24
  33. data/spec/lib/cli_spec.rb +46 -11
  34. data/spec/lib/configuration_spec.rb +13 -10
  35. data/spec/lib/coordinator_spec.rb +11 -9
  36. data/spec/lib/crash_handler_spec.rb +42 -0
  37. data/spec/lib/delivery/letter_opener_spec.rb +10 -6
  38. data/spec/lib/delivery/logger_spec.rb +10 -12
  39. data/spec/lib/delivery/postback_spec.rb +77 -17
  40. data/spec/lib/delivery/que_spec.rb +6 -9
  41. data/spec/lib/delivery/sidekiq_spec.rb +33 -11
  42. data/spec/lib/imap/connection_spec.rb +61 -0
  43. data/spec/lib/imap/message_spec.rb +36 -0
  44. data/spec/lib/logger/structured_spec.rb +87 -0
  45. data/spec/lib/mailbox_spec.rb +109 -33
  46. data/spec/lib/mailbox_watcher_spec.rb +54 -41
  47. data/spec/lib/message_spec.rb +35 -0
  48. data/spec/lib/microsoft_graph/connection_spec.rb +190 -0
  49. data/spec/spec_helper.rb +21 -2
  50. metadata +92 -31
  51. data/lib/mail_room/backports/imap.rb +0 -33
  52. data/spec/lib/connection_spec.rb +0 -63
metadata CHANGED
@@ -1,31 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail_room
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Pitale
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-04 00:00:00.000000000 Z
11
+ date: 2021-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: net-imap
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
19
+ version: 0.2.1
20
+ type: :runtime
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: '0'
26
+ version: 0.2.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: oauth2
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.4.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.4.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -39,49 +53,49 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: mocha
56
+ name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: '3.9'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: '3.9'
55
69
  - !ruby/object:Gem::Dependency
56
- name: bourne
70
+ name: rubocop
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0'
75
+ version: '1.11'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0'
82
+ version: '1.11'
69
83
  - !ruby/object:Gem::Dependency
70
- name: simplecov
84
+ name: mocha
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: '1.11'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '1.11'
83
97
  - !ruby/object:Gem::Dependency
84
- name: fakeredis
98
+ name: simplecov
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -136,6 +150,20 @@ dependencies:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: redis
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 3.3.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 3.3.1
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: redis-namespace
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +206,20 @@ dependencies:
178
206
  - - ">="
179
207
  - !ruby/object:Gem::Version
180
208
  version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: webmock
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
181
223
  description: mail_room will proxy email (gmail) from IMAP to a delivery method
182
224
  email:
183
225
  - tpitale@gmail.com
@@ -188,6 +230,8 @@ extra_rdoc_files: []
188
230
  files:
189
231
  - ".gitignore"
190
232
  - ".gitlab-ci.yml"
233
+ - ".rubocop.yml"
234
+ - ".rubocop_todo.yml"
191
235
  - ".ruby-version"
192
236
  - ".travis.yml"
193
237
  - CHANGELOG.md
@@ -201,11 +245,11 @@ files:
201
245
  - lib/mail_room/arbitration.rb
202
246
  - lib/mail_room/arbitration/noop.rb
203
247
  - lib/mail_room/arbitration/redis.rb
204
- - lib/mail_room/backports/imap.rb
205
248
  - lib/mail_room/cli.rb
206
249
  - lib/mail_room/configuration.rb
207
250
  - lib/mail_room/connection.rb
208
251
  - lib/mail_room/coordinator.rb
252
+ - lib/mail_room/crash_handler.rb
209
253
  - lib/mail_room/delivery.rb
210
254
  - lib/mail_room/delivery/letter_opener.rb
211
255
  - lib/mail_room/delivery/logger.rb
@@ -213,28 +257,41 @@ files:
213
257
  - lib/mail_room/delivery/postback.rb
214
258
  - lib/mail_room/delivery/que.rb
215
259
  - lib/mail_room/delivery/sidekiq.rb
260
+ - lib/mail_room/imap.rb
261
+ - lib/mail_room/imap/connection.rb
262
+ - lib/mail_room/imap/message.rb
263
+ - lib/mail_room/logger/structured.rb
216
264
  - lib/mail_room/mailbox.rb
217
265
  - lib/mail_room/mailbox_watcher.rb
266
+ - lib/mail_room/message.rb
267
+ - lib/mail_room/microsoft_graph.rb
268
+ - lib/mail_room/microsoft_graph/connection.rb
218
269
  - lib/mail_room/version.rb
270
+ - logfile.log
219
271
  - mail_room.gemspec
220
272
  - spec/fixtures/test_config.yml
221
273
  - spec/lib/arbitration/redis_spec.rb
222
274
  - spec/lib/cli_spec.rb
223
275
  - spec/lib/configuration_spec.rb
224
- - spec/lib/connection_spec.rb
225
276
  - spec/lib/coordinator_spec.rb
277
+ - spec/lib/crash_handler_spec.rb
226
278
  - spec/lib/delivery/letter_opener_spec.rb
227
279
  - spec/lib/delivery/logger_spec.rb
228
280
  - spec/lib/delivery/postback_spec.rb
229
281
  - spec/lib/delivery/que_spec.rb
230
282
  - spec/lib/delivery/sidekiq_spec.rb
283
+ - spec/lib/imap/connection_spec.rb
284
+ - spec/lib/imap/message_spec.rb
285
+ - spec/lib/logger/structured_spec.rb
231
286
  - spec/lib/mailbox_spec.rb
232
287
  - spec/lib/mailbox_watcher_spec.rb
288
+ - spec/lib/message_spec.rb
289
+ - spec/lib/microsoft_graph/connection_spec.rb
233
290
  - spec/spec_helper.rb
234
291
  homepage: http://github.com/tpitale/mail_room
235
292
  licenses: []
236
293
  metadata: {}
237
- post_install_message:
294
+ post_install_message:
238
295
  rdoc_options: []
239
296
  require_paths:
240
297
  - lib
@@ -249,9 +306,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
306
  - !ruby/object:Gem::Version
250
307
  version: '0'
251
308
  requirements: []
252
- rubyforge_project:
253
- rubygems_version: 2.4.5.1
254
- signing_key:
309
+ rubygems_version: 3.0.3
310
+ signing_key:
255
311
  specification_version: 4
256
312
  summary: mail_room will proxy email (gmail) from IMAP to a callback URL, logger, or
257
313
  letter_opener
@@ -260,13 +316,18 @@ test_files:
260
316
  - spec/lib/arbitration/redis_spec.rb
261
317
  - spec/lib/cli_spec.rb
262
318
  - spec/lib/configuration_spec.rb
263
- - spec/lib/connection_spec.rb
264
319
  - spec/lib/coordinator_spec.rb
320
+ - spec/lib/crash_handler_spec.rb
265
321
  - spec/lib/delivery/letter_opener_spec.rb
266
322
  - spec/lib/delivery/logger_spec.rb
267
323
  - spec/lib/delivery/postback_spec.rb
268
324
  - spec/lib/delivery/que_spec.rb
269
325
  - spec/lib/delivery/sidekiq_spec.rb
326
+ - spec/lib/imap/connection_spec.rb
327
+ - spec/lib/imap/message_spec.rb
328
+ - spec/lib/logger/structured_spec.rb
270
329
  - spec/lib/mailbox_spec.rb
271
330
  - spec/lib/mailbox_watcher_spec.rb
331
+ - spec/lib/message_spec.rb
332
+ - spec/lib/microsoft_graph/connection_spec.rb
272
333
  - spec/spec_helper.rb
@@ -1,33 +0,0 @@
1
- module MailRoom
2
- class IMAP < Net::IMAP
3
- # Backported 2.3.0 version of net/imap idle command to support timeout
4
- def idle(timeout = nil, &response_handler)
5
- raise LocalJumpError, "no block given" unless response_handler
6
-
7
- response = nil
8
-
9
- synchronize do
10
- tag = Thread.current[:net_imap_tag] = generate_tag
11
- put_string("#{tag} IDLE#{CRLF}")
12
-
13
- begin
14
- add_response_handler(response_handler)
15
- @idle_done_cond = new_cond
16
- @idle_done_cond.wait(timeout)
17
- @idle_done_cond = nil
18
- if @receiver_thread_terminating
19
- raise Net::IMAP::Error, "connection closed"
20
- end
21
- ensure
22
- unless @receiver_thread_terminating
23
- remove_response_handler(response_handler)
24
- put_string("DONE#{CRLF}")
25
- response = get_tagged_response(tag, "IDLE")
26
- end
27
- end
28
- end
29
-
30
- return response
31
- end
32
- end
33
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe MailRoom::Connection do
4
- let(:imap) {stub}
5
- let(:mailbox) {MailRoom::Mailbox.new(delete_after_delivery: true)}
6
-
7
- before :each do
8
- MailRoom::IMAP.stubs(:new).returns(imap)
9
- end
10
-
11
- context "with imap set up" do
12
- let(:connection) {MailRoom::Connection.new(mailbox)}
13
-
14
- before :each do
15
- imap.stubs(:starttls)
16
- imap.stubs(:login)
17
- imap.stubs(:select)
18
- end
19
-
20
- it "is logged in" do
21
- expect(connection.logged_in?).to eq(true)
22
- end
23
-
24
- it "is not idling" do
25
- expect(connection.idling?).to eq(false)
26
- end
27
-
28
- it "is not disconnected" do
29
- imap.stubs(:disconnected?).returns(false)
30
-
31
- expect(connection.disconnected?).to eq(false)
32
- end
33
-
34
- it "is ready to idle" do
35
- expect(connection.ready_to_idle?).to eq(true)
36
- end
37
-
38
- it "waits for a message to process" do
39
- new_message = 'a message'
40
- new_message.stubs(:seqno).returns(8)
41
-
42
- connection.on_new_message do |message|
43
- expect(message).to eq(new_message)
44
- true
45
- end
46
-
47
- mailbox.stubs(:deliver?).returns(true)
48
-
49
- imap.stubs(:idle)
50
- imap.stubs(:uid_search).returns([]).then.returns([1])
51
- imap.stubs(:uid_fetch).returns([new_message])
52
- imap.stubs(:store)
53
-
54
- connection.wait
55
-
56
- expect(imap).to have_received(:idle)
57
- expect(imap).to have_received(:uid_search).with(mailbox.search_command).twice
58
- expect(imap).to have_received(:uid_fetch).with([1], "RFC822")
59
- expect(mailbox).to have_received(:deliver?).with(1)
60
- expect(imap).to have_received(:store).with(8, "+FLAGS", [Net::IMAP::DELETED])
61
- end
62
- end
63
- end