mail_room 0.0.1 → 0.0.2

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.
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe MailRoom::Coordinator do
4
+ describe '#initialize' do
5
+ it 'builds a watcher for each mailbox' do
6
+ MailRoom::MailboxWatcher.stubs(:new).returns('watcher1', 'watcher2')
7
+
8
+ coordinator = MailRoom::Coordinator.new(['mailbox1', 'mailbox2'])
9
+
10
+ coordinator.watchers.should eq(['watcher1', 'watcher2'])
11
+
12
+ MailRoom::MailboxWatcher.should have_received(:new).with('mailbox1')
13
+ MailRoom::MailboxWatcher.should have_received(:new).with('mailbox2')
14
+ end
15
+
16
+ it 'makes no watchers when mailboxes is empty' do
17
+ coordinator = MailRoom::Coordinator.new([])
18
+ coordinator.watchers.should eq([])
19
+ end
20
+ end
21
+
22
+ describe '#run' do
23
+ it 'runs each watcher' do
24
+ watcher = stub(:run)
25
+ MailRoom::MailboxWatcher.stubs(:new).returns(watcher)
26
+ coordinator = MailRoom::Coordinator.new(['mailbox1'])
27
+ coordinator.stubs(:running?).returns(false)
28
+ coordinator.run
29
+ watcher.should have_received(:run)
30
+ end
31
+ end
32
+
33
+ describe '#quit' do
34
+ it 'quits each watcher' do
35
+ watcher = stub(:quit)
36
+ MailRoom::MailboxWatcher.stubs(:new).returns(watcher)
37
+ coordinator = MailRoom::Coordinator.new(['mailbox1'])
38
+ coordinator.stubs(:running?).returns(true)
39
+ coordinator.quit
40
+ watcher.should have_received(:quit)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'mail_room/delivery/letter_opener'
3
+
4
+ describe MailRoom::Delivery::LetterOpener do
5
+ describe '#deliver' do
6
+ let(:mailbox) {MailRoom::Mailbox.new(:location => '/tmp/somewhere')}
7
+ let(:delivery_method) {stub(:deliver!)}
8
+ let(:mail) {stub}
9
+
10
+ before :each do
11
+ Mail.stubs(:read_from_string).returns(mail)
12
+ ::LetterOpener::DeliveryMethod.stubs(:new).returns(delivery_method)
13
+
14
+ MailRoom::Delivery::LetterOpener.new(mailbox).deliver('a message')
15
+ end
16
+
17
+ it 'creates a new LetterOpener::DeliveryMethod' do
18
+ ::LetterOpener::DeliveryMethod.should have_received(:new).with(:location => '/tmp/somewhere')
19
+ end
20
+
21
+ it 'parses the message string with Mail' do
22
+ ::Mail.should have_received(:read_from_string).with('a message')
23
+ end
24
+
25
+ it 'delivers the mail message' do
26
+ delivery_method.should have_received(:deliver!).with(mail)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+ require 'mail_room/delivery/logger'
3
+
4
+ describe MailRoom::Delivery::Logger do
5
+ describe '#initialize' do
6
+ context "without a log path" do
7
+ let(:mailbox) {MailRoom::Mailbox.new}
8
+
9
+ it 'creates a new ruby logger' do
10
+ ::Logger.stubs(:new)
11
+
12
+ MailRoom::Delivery::Logger.new(mailbox)
13
+
14
+ ::Logger.should have_received(:new).with(STDOUT)
15
+ end
16
+ end
17
+
18
+ context "with a log path" do
19
+ let(:mailbox) {MailRoom::Mailbox.new(:log_path => '/var/log/mail-room.log')}
20
+
21
+ it 'creates a new file to append to' do
22
+ ::Logger.stubs(:new)
23
+ file = stub(:sync=)
24
+ ::File.stubs(:open).returns(file)
25
+
26
+ MailRoom::Delivery::Logger.new(mailbox)
27
+
28
+ File.should have_received(:open).with('/var/log/mail-room.log', 'a')
29
+ ::Logger.should have_received(:new).with(file)
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '#deliver' do
35
+ let(:mailbox) {MailRoom::Mailbox.new}
36
+
37
+ it 'writes the message to info' do
38
+ logger = stub(:info)
39
+ ::Logger.stubs(:new).returns(logger)
40
+
41
+ MailRoom::Delivery::Logger.new(mailbox).deliver('a message')
42
+
43
+ logger.should have_received(:info).with('a message')
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'mail_room/delivery/postback'
3
+
4
+ describe MailRoom::Delivery::Postback do
5
+ describe '#deliver' do
6
+ let(:mailbox) {MailRoom::Mailbox.new({
7
+ :delivery_url => 'http://localhost/inbox',
8
+ :delivery_token => 'abcdefg'
9
+ })}
10
+
11
+ it 'posts the message with faraday' do
12
+ connection = stub
13
+ request = stub
14
+ Faraday.stubs(:new).returns(connection)
15
+
16
+ connection.stubs(:token_auth)
17
+ connection.stubs(:post).yields(request)
18
+
19
+ request.stubs(:url)
20
+ request.stubs(:body=)
21
+
22
+ MailRoom::Delivery::Postback.new(mailbox).deliver('a message')
23
+
24
+ connection.should have_received(:token_auth).with('abcdefg')
25
+ connection.should have_received(:post)
26
+
27
+ request.should have_received(:url).with('http://localhost/inbox')
28
+ request.should have_received(:body=).with('a message')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe MailRoom::MailboxHandler do
4
+ describe 'process mailbox' do
5
+ let(:imap) {stub}
6
+ let(:mailbox) {MailRoom::Mailbox.new}
7
+
8
+ it 'fetches and delivers all new messages from ids' do
9
+ imap.stubs(:search).returns([1,2])
10
+ imap.stubs(:fetch).returns(['message1', 'message2'])
11
+ mailbox.stubs(:deliver)
12
+
13
+ handler = MailRoom::MailboxHandler.new(mailbox, imap)
14
+ handler.process
15
+
16
+ imap.should have_received(:search).with('UNSEEN')
17
+ imap.should have_received(:fetch).with([1,2], 'RFC822')
18
+ mailbox.should have_received(:deliver).with('message1')
19
+ mailbox.should have_received(:deliver).with('message2')
20
+ end
21
+
22
+ it 'returns no messages if there are no ids' do
23
+ imap.stubs(:search).returns([])
24
+ imap.stubs(:fetch)
25
+ mailbox.stubs(:deliver)
26
+
27
+ handler = MailRoom::MailboxHandler.new(mailbox, imap)
28
+ handler.process
29
+
30
+ imap.should have_received(:search).with('UNSEEN')
31
+ imap.should have_received(:fetch).never
32
+ mailbox.should have_received(:deliver).never
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe MailRoom::Mailbox do
4
+ describe "#deliver" do
5
+ context "with delivery_method of noop" do
6
+ it 'delivers with a Noop instance' do
7
+ mailbox = MailRoom::Mailbox.new({:delivery_method => 'noop'})
8
+ noop = stub(:deliver)
9
+ MailRoom::Delivery::Noop.stubs(:new => noop)
10
+
11
+ mailbox.deliver(stub(:attr => {'RFC822' => 'a message'}))
12
+
13
+ noop.should have_received(:deliver).with('a message')
14
+ end
15
+ end
16
+
17
+ context "with delivery_method of logger" do
18
+ it 'delivers with a Logger instance' do
19
+ mailbox = MailRoom::Mailbox.new({:delivery_method => 'logger'})
20
+ logger = stub(:deliver)
21
+ MailRoom::Delivery::Logger.stubs(:new => logger)
22
+
23
+ mailbox.deliver(stub(:attr => {'RFC822' => 'a message'}))
24
+
25
+ logger.should have_received(:deliver).with('a message')
26
+ end
27
+ end
28
+
29
+ context "with delivery_method of postback" do
30
+ it 'delivers with a Postback instance' do
31
+ mailbox = MailRoom::Mailbox.new({:delivery_method => 'postback'})
32
+ postback = stub(:deliver)
33
+ MailRoom::Delivery::Postback.stubs(:new => postback)
34
+
35
+ mailbox.deliver(stub(:attr => {'RFC822' => 'a message'}))
36
+
37
+ postback.should have_received(:deliver).with('a message')
38
+ end
39
+ end
40
+
41
+ context "with delivery_method of letter_opener" do
42
+ it 'delivers with a LetterOpener instance' do
43
+ mailbox = MailRoom::Mailbox.new({:delivery_method => 'letter_opener'})
44
+ letter_opener = stub(:deliver)
45
+ MailRoom::Delivery::LetterOpener.stubs(:new => letter_opener)
46
+
47
+ mailbox.deliver(stub(:attr => {'RFC822' => 'a message'}))
48
+
49
+ letter_opener.should have_received(:deliver).with('a message')
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,228 @@
1
+ require 'spec_helper'
2
+
3
+ describe MailRoom::MailboxWatcher do
4
+ describe '#running?' do
5
+ it 'is false by default' do
6
+ watcher = MailRoom::MailboxWatcher.new(nil)
7
+ watcher.running?.should eq(false)
8
+ end
9
+ end
10
+
11
+ describe '#logged_in?' do
12
+ it 'is false by default' do
13
+ watcher = MailRoom::MailboxWatcher.new(nil)
14
+ watcher.logged_in?.should eq(false)
15
+ end
16
+ end
17
+
18
+ describe '#idling?' do
19
+ it 'is false by default' do
20
+ watcher = MailRoom::MailboxWatcher.new(nil)
21
+ watcher.idling?.should eq(false)
22
+ end
23
+ end
24
+
25
+ describe '#imap' do
26
+ it 'builds a new Net::IMAP object' do
27
+ Net::IMAP.stubs(:new).returns('imap')
28
+
29
+ MailRoom::MailboxWatcher.new(nil).imap.should eq('imap')
30
+
31
+ Net::IMAP.should have_received(:new).with('imap.gmail.com', :port => 993, :ssl => true)
32
+ end
33
+ end
34
+
35
+ describe '#setup' do
36
+ it 'logs in and sets the mailbox to watch' do
37
+ imap = stub(:login => true, :select => true)
38
+ mailbox = stub(:email => 'user1@gmail.com', :password => 'password', :name => 'inbox')
39
+ watcher = MailRoom::MailboxWatcher.new(mailbox)
40
+ watcher.stubs(:imap).returns(imap)
41
+
42
+ watcher.setup
43
+
44
+ imap.should have_received(:login).with('user1@gmail.com', 'password')
45
+ watcher.logged_in?.should eq(true)
46
+ imap.should have_received(:select).with('inbox')
47
+ end
48
+ end
49
+
50
+ describe '#idle' do
51
+ let(:imap) {stub}
52
+ let(:watcher) {MailRoom::MailboxWatcher.new(nil)}
53
+
54
+ before :each do
55
+ watcher.stubs(:imap).returns(imap)
56
+ end
57
+
58
+ it 'returns if not logged in' do
59
+ watcher.stubs(:logged_in?).returns(false)
60
+
61
+ watcher.idle
62
+
63
+ imap.should have_received(:idle).never
64
+ end
65
+
66
+ context "when logged in" do
67
+ before :each do
68
+ imap.stubs(:idle_done)
69
+
70
+ watcher.stubs(:logged_in?).returns(true)
71
+ end
72
+
73
+ it 'handles any response with a name of EXISTS and stops idling' do
74
+ response = stub(:name => 'EXISTS')
75
+ imap.stubs(:idle).yields(response)
76
+
77
+ watcher.idle
78
+
79
+ imap.should have_received(:idle)
80
+ imap.should have_received(:idle_done)
81
+ end
82
+
83
+ it 'does not finish idling when response is not EXISTS' do
84
+ response = stub(:name => 'DESTROY')
85
+ imap.stubs(:idle).yields(response)
86
+
87
+ watcher.idle
88
+
89
+ imap.should have_received(:idle)
90
+ imap.should have_received(:idle_done).never
91
+ end
92
+ end
93
+ end
94
+
95
+ describe 'process_mailbox' do
96
+ let(:imap) {stub}
97
+ let(:mailbox) {MailRoom::Mailbox.new}
98
+ let(:watcher) {MailRoom::MailboxWatcher.new(mailbox)}
99
+
100
+ it 'builds a new mailbox handler if none exists' do
101
+ MailRoom::MailboxHandler.stubs(:new).returns(stub(:process))
102
+ watcher.stubs(:imap).returns(imap)
103
+
104
+ watcher.process_mailbox
105
+
106
+ MailRoom::MailboxHandler.should have_received(:new).with(mailbox, imap)
107
+ end
108
+
109
+ it 'processes with the handler' do
110
+ handler = stub(:process)
111
+ watcher.stubs(:handler).returns(handler)
112
+
113
+ watcher.process_mailbox
114
+
115
+ handler.should have_received(:process)
116
+ end
117
+ end
118
+
119
+ describe '#stop_idling' do
120
+ let(:imap) {stub}
121
+ let(:idling_thread) {stub}
122
+ let(:watcher) {MailRoom::MailboxWatcher.new(nil)}
123
+
124
+ before :each do
125
+ watcher.stubs(:imap).returns(imap)
126
+ watcher.stubs(:idling_thread).returns(idling_thread)
127
+ end
128
+
129
+ it "returns unless imap is idling" do
130
+ imap.stubs(:idle_done)
131
+ idling_thread.stubs(:join)
132
+ watcher.stubs(:idling?).returns(false)
133
+
134
+ watcher.stop_idling
135
+
136
+ imap.should have_received(:idle_done).never
137
+ idling_thread.should have_received(:join).never
138
+ end
139
+
140
+ context "when idling" do
141
+ before :each do
142
+ imap.stubs(:idle_done)
143
+ idling_thread.stubs(:join)
144
+ watcher.stubs(:idling?).returns(true)
145
+ end
146
+
147
+ it 'stops the idle' do
148
+ watcher.stop_idling
149
+ imap.should have_received(:idle_done)
150
+ end
151
+
152
+ it 'waits on the idling_thread to finish' do
153
+ watcher.stop_idling
154
+ idling_thread.should have_received(:join)
155
+ end
156
+ end
157
+ end
158
+
159
+ describe '#run' do
160
+ let(:watcher) {MailRoom::MailboxWatcher.new(nil)}
161
+
162
+ before :each do
163
+ Thread.stubs(:start).yields
164
+ watcher.stubs(:setup)
165
+ end
166
+
167
+ it 'sets up' do
168
+ watcher.stubs(:running?).returns(false)
169
+
170
+ watcher.run
171
+
172
+ watcher.should have_received(:setup)
173
+ end
174
+
175
+ it 'starts a thread for idling' do
176
+ watcher.stubs(:running?).returns(false)
177
+
178
+ watcher.run
179
+
180
+ Thread.should have_received(:start)
181
+ end
182
+
183
+ it 'loops while running' do
184
+ watcher.stubs(:running?).returns(true, false)
185
+
186
+ watcher.stubs(:idle)
187
+ watcher.stubs(:process_mailbox)
188
+
189
+ watcher.run
190
+
191
+ watcher.should have_received(:running?).times(2)
192
+ end
193
+
194
+ it 'idles' do
195
+ watcher.stubs(:running?).returns(true, false)
196
+
197
+ watcher.stubs(:idle)
198
+ watcher.stubs(:process_mailbox)
199
+
200
+ watcher.run
201
+
202
+ watcher.should have_received(:idle).once
203
+ end
204
+
205
+ it 'processes messages' do
206
+ watcher.stubs(:running?).returns(true, false)
207
+
208
+ watcher.stubs(:idle)
209
+ watcher.stubs(:process_mailbox)
210
+
211
+ watcher.run
212
+
213
+ watcher.should have_received(:process_mailbox).once
214
+ end
215
+ end
216
+
217
+ describe '#quit' do
218
+ let(:watcher) {MailRoom::MailboxWatcher.new(nil)}
219
+
220
+ it 'stops idling' do
221
+ watcher.stubs(:stop_idling)
222
+
223
+ watcher.quit
224
+
225
+ watcher.should have_received(:stop_idling)
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,23 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'bundler/setup'
5
+
6
+ require 'rspec'
7
+ require 'mocha/api'
8
+ require 'bourne'
9
+
10
+ require File.expand_path('../../lib/mail_room', __FILE__)
11
+
12
+ RSpec.configure do |config|
13
+ config.mock_with :mocha
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.run_all_when_everything_filtered = true
16
+ config.filter_run :focus
17
+
18
+ # Run specs in random order to surface order dependencies. If you find an
19
+ # order dependency and want to debug it, you can fix the order by providing
20
+ # the seed, which is printed after each run.
21
+ # --seed 1234
22
+ config.order = 'random'
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail_room
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,17 +9,17 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-25 00:00:00.000000000 Z
12
+ date: 2013-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: celluloid
15
+ name: rake
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
- type: :runtime
22
+ type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
@@ -27,7 +27,119 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
- description: mail_room will proxy email (gmail) from IMAP to a callback URL
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
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'
46
+ - !ruby/object:Gem::Dependency
47
+ name: mocha
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: bourne
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: simplecov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: faraday
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: mail
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: letter_opener
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: mail_room will proxy email (gmail) from IMAP to a delivery method
31
143
  email:
32
144
  - tpitale@gmail.com
33
145
  executables:
@@ -36,6 +148,7 @@ extensions: []
36
148
  extra_rdoc_files: []
37
149
  files:
38
150
  - .gitignore
151
+ - .rspec
39
152
  - .ruby-version
40
153
  - Gemfile
41
154
  - LICENSE.txt
@@ -46,10 +159,26 @@ files:
46
159
  - lib/mail_room/cli.rb
47
160
  - lib/mail_room/configuration.rb
48
161
  - lib/mail_room/coordinator.rb
162
+ - lib/mail_room/delivery/letter_opener.rb
163
+ - lib/mail_room/delivery/logger.rb
164
+ - lib/mail_room/delivery/noop.rb
165
+ - lib/mail_room/delivery/postback.rb
49
166
  - lib/mail_room/mailbox.rb
50
- - lib/mail_room/message_handler.rb
167
+ - lib/mail_room/mailbox_handler.rb
168
+ - lib/mail_room/mailbox_watcher.rb
51
169
  - lib/mail_room/version.rb
52
170
  - mail_room.gemspec
171
+ - spec/fixtures/test_config.yml
172
+ - spec/lib/cli_spec.rb
173
+ - spec/lib/configuration_spec.rb
174
+ - spec/lib/coordinator_spec.rb
175
+ - spec/lib/delivery/letter_opener_spec.rb
176
+ - spec/lib/delivery/logger_spec.rb
177
+ - spec/lib/delivery/postback_spec.rb
178
+ - spec/lib/mailbox_handler_spec.rb
179
+ - spec/lib/mailbox_spec.rb
180
+ - spec/lib/mailbox_watcher_spec.rb
181
+ - spec/spec_helper.rb
53
182
  homepage: http://github.com/tpitale/mail_room
54
183
  licenses: []
55
184
  post_install_message:
@@ -73,5 +202,17 @@ rubyforge_project:
73
202
  rubygems_version: 1.8.23
74
203
  signing_key:
75
204
  specification_version: 3
76
- summary: mail_room will proxy email (gmail) from IMAP to a callback URL
77
- test_files: []
205
+ summary: mail_room will proxy email (gmail) from IMAP to a callback URL, logger, or
206
+ letter_opener
207
+ test_files:
208
+ - spec/fixtures/test_config.yml
209
+ - spec/lib/cli_spec.rb
210
+ - spec/lib/configuration_spec.rb
211
+ - spec/lib/coordinator_spec.rb
212
+ - spec/lib/delivery/letter_opener_spec.rb
213
+ - spec/lib/delivery/logger_spec.rb
214
+ - spec/lib/delivery/postback_spec.rb
215
+ - spec/lib/mailbox_handler_spec.rb
216
+ - spec/lib/mailbox_spec.rb
217
+ - spec/lib/mailbox_watcher_spec.rb
218
+ - spec/spec_helper.rb