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.
- data/.rspec +2 -0
- data/README.md +47 -18
- data/Rakefile +5 -0
- data/bin/mail_room +1 -1
- data/lib/mail_room/cli.rb +7 -89
- data/lib/mail_room/configuration.rb +6 -9
- data/lib/mail_room/coordinator.rb +13 -5
- data/lib/mail_room/delivery/letter_opener.rb +17 -0
- data/lib/mail_room/delivery/logger.rb +20 -0
- data/lib/mail_room/delivery/noop.rb +11 -0
- data/lib/mail_room/delivery/postback.rb +23 -0
- data/lib/mail_room/mailbox.rb +30 -1
- data/lib/mail_room/mailbox_handler.rb +36 -0
- data/lib/mail_room/mailbox_watcher.rb +93 -0
- data/lib/mail_room/version.rb +1 -1
- data/lib/mail_room.rb +5 -3
- data/mail_room.gemspec +12 -3
- data/spec/fixtures/test_config.yml +14 -0
- data/spec/lib/cli_spec.rb +56 -0
- data/spec/lib/configuration_spec.rb +25 -0
- data/spec/lib/coordinator_spec.rb +43 -0
- data/spec/lib/delivery/letter_opener_spec.rb +29 -0
- data/spec/lib/delivery/logger_spec.rb +46 -0
- data/spec/lib/delivery/postback_spec.rb +31 -0
- data/spec/lib/mailbox_handler_spec.rb +35 -0
- data/spec/lib/mailbox_spec.rb +53 -0
- data/spec/lib/mailbox_watcher_spec.rb +228 -0
- data/spec/spec_helper.rb +23 -0
- metadata +149 -8
- data/lib/mail_room/message_handler.rb +0 -125
@@ -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
|
data/spec/spec_helper.rb
ADDED
@@ -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.
|
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-
|
12
|
+
date: 2013-01-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
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: :
|
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
|
-
|
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/
|
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
|
-
|
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
|