mail_room 0.1.0 → 0.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 +7 -0
- data/.ruby-version +1 -1
- data/.travis.yml +6 -0
- data/README.md +28 -2
- data/lib/mail_room/cli.rb +1 -5
- data/lib/mail_room/coordinator.rb +7 -3
- data/lib/mail_room/version.rb +1 -1
- data/spec/lib/cli_spec.rb +0 -15
- data/spec/lib/coordinator_spec.rb +28 -3
- metadata +24 -41
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c5a6b5950db35515bea9f2f82bdde5e7dd1ff367
|
4
|
+
data.tar.gz: d051cde6554df19f74cea7054b94673c5fb0a718
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8aef87866ce7bdea33d3490adb6046e6eeea50fc07b46dd21924bec5e9ead803695eb901637f8c18448cd29d03208f0ca2f8fd47a3735153e08f4cc88e2647de
|
7
|
+
data.tar.gz: c0e0ed306a8b784234d8edf544133c3ee0382e647236a2f29f154e1284a1e627d0d9f0fafae09b61ff35f34b36aa69435027dea8e886e6465500dab5d8a4ba0e
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
mail_room is a configuration based process that will idle on IMAP connections and POST to a delivery URL whenever a new message is received on the configured mailbox and folder.
|
4
4
|
|
5
|
+
[](https://travis-ci.org/tpitale/mail_room)
|
6
|
+
|
5
7
|
## Installation ##
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
@@ -16,9 +18,11 @@ Or install it yourself as:
|
|
16
18
|
|
17
19
|
$ gem install mail_room
|
18
20
|
|
21
|
+
You will also need to install `faraday` or `letter_opener` if you use the `postback` or `letter_opener` delivery methods, respectively.
|
22
|
+
|
19
23
|
## Usage ##
|
20
24
|
|
21
|
-
|
25
|
+
mail_room -c /path/to/config.yml
|
22
26
|
|
23
27
|
## Configuration ##
|
24
28
|
|
@@ -54,7 +58,19 @@ Or install it yourself as:
|
|
54
58
|
|
55
59
|
### postback ###
|
56
60
|
|
57
|
-
|
61
|
+
Requires `faraday` gem be installed.
|
62
|
+
|
63
|
+
*NOTE:* If you're using Ruby `>= 2.0`, you'll need
|
64
|
+
to use Faraday from `master` for the time being. I will investigate any issues
|
65
|
+
once version `0.9.0` final is released.
|
66
|
+
|
67
|
+
The default delivery method, requires `delivery_url` and `delivery_token` in
|
68
|
+
configuration.
|
69
|
+
|
70
|
+
As the postback is essentially using your app as if it were an API endpoint,
|
71
|
+
you may need to disable forgery protection as you would with a JSON API. In
|
72
|
+
our case, the postback is plaintext, but the protection will still need to be
|
73
|
+
disabled.
|
58
74
|
|
59
75
|
### logger ###
|
60
76
|
|
@@ -70,10 +86,20 @@ Does nothing, like it says.
|
|
70
86
|
|
71
87
|
### letter_opener ###
|
72
88
|
|
89
|
+
Requires `letter_opener` gem be installed.
|
90
|
+
|
73
91
|
Configured with `:delivery_method: letter_opener`.
|
74
92
|
|
75
93
|
Uses Ryan Bates' excellent [letter_opener](https://github.com/ryanb/letter_opener) gem.
|
76
94
|
|
95
|
+
## Receiving `postback` in Rails ##
|
96
|
+
|
97
|
+
If you have a controller that you're sending to, with forgery protection
|
98
|
+
disabled, you can get the raw string of the email using `request.body.read`.
|
99
|
+
|
100
|
+
I would recommend having the `mail` gem bundled and parse the email using
|
101
|
+
`Mail.read_from_string(request.body.read)`.
|
102
|
+
|
77
103
|
## Contributing ##
|
78
104
|
|
79
105
|
1. Fork it
|
data/lib/mail_room/cli.rb
CHANGED
@@ -31,7 +31,7 @@ module MailRoom
|
|
31
31
|
|
32
32
|
def start
|
33
33
|
Signal.trap(:INT) do
|
34
|
-
|
34
|
+
coordinator.running = false
|
35
35
|
end
|
36
36
|
|
37
37
|
Signal.trap(:TERM) do
|
@@ -40,9 +40,5 @@ module MailRoom
|
|
40
40
|
|
41
41
|
coordinator.run
|
42
42
|
end
|
43
|
-
|
44
|
-
def stop
|
45
|
-
coordinator.quit
|
46
|
-
end
|
47
43
|
end
|
48
44
|
end
|
@@ -12,16 +12,20 @@ module MailRoom
|
|
12
12
|
|
13
13
|
def run
|
14
14
|
watchers.each(&:run)
|
15
|
-
|
15
|
+
|
16
16
|
self.running = true
|
17
|
+
|
18
|
+
sleep_while_running
|
17
19
|
|
20
|
+
quit
|
21
|
+
end
|
22
|
+
|
23
|
+
def sleep_while_running
|
18
24
|
while(running?) do; sleep 1; end
|
19
25
|
end
|
20
26
|
|
21
27
|
def quit
|
22
28
|
watchers.each(&:quit)
|
23
|
-
|
24
|
-
self.running = false
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
data/lib/mail_room/version.rb
CHANGED
data/spec/lib/cli_spec.rb
CHANGED
@@ -38,19 +38,4 @@ describe MailRoom::CLI do
|
|
38
38
|
coordinator.should have_received(:run)
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
|
-
describe '#stop' do
|
43
|
-
let(:cli) {MailRoom::CLI.new([])}
|
44
|
-
|
45
|
-
before :each do
|
46
|
-
cli.configuration = configuration
|
47
|
-
cli.coordinator = coordinator
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'quits the coordinator' do
|
51
|
-
cli.stop
|
52
|
-
|
53
|
-
coordinator.should have_received(:quit)
|
54
|
-
end
|
55
|
-
end
|
56
41
|
end
|
@@ -21,12 +21,38 @@ describe MailRoom::Coordinator do
|
|
21
21
|
|
22
22
|
describe '#run' do
|
23
23
|
it 'runs each watcher' do
|
24
|
-
watcher = stub
|
24
|
+
watcher = stub
|
25
|
+
watcher.stubs(:run)
|
26
|
+
watcher.stubs(:quit)
|
25
27
|
MailRoom::MailboxWatcher.stubs(:new).returns(watcher)
|
26
28
|
coordinator = MailRoom::Coordinator.new(['mailbox1'])
|
27
|
-
coordinator.stubs(:
|
29
|
+
coordinator.stubs(:sleep_while_running)
|
28
30
|
coordinator.run
|
29
31
|
watcher.should have_received(:run)
|
32
|
+
watcher.should have_received(:quit)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should go to sleep after running watchers' do
|
36
|
+
coordinator = MailRoom::Coordinator.new([])
|
37
|
+
coordinator.stubs(:sleep_while_running)
|
38
|
+
coordinator.run
|
39
|
+
coordinator.should have_received(:sleep_while_running)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should set attribute running to true' do
|
43
|
+
coordinator = MailRoom::Coordinator.new([])
|
44
|
+
coordinator.stubs(:sleep_while_running)
|
45
|
+
coordinator.run
|
46
|
+
coordinator.running.should eq(true)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#sleep_while_running' do
|
51
|
+
it 'should check the running state' do
|
52
|
+
coordinator = MailRoom::Coordinator.new([])
|
53
|
+
coordinator.stubs(:running?).returns(false)
|
54
|
+
coordinator.sleep_while_running
|
55
|
+
coordinator.should have_received(:running?)
|
30
56
|
end
|
31
57
|
end
|
32
58
|
|
@@ -35,7 +61,6 @@ describe MailRoom::Coordinator do
|
|
35
61
|
watcher = stub(:quit)
|
36
62
|
MailRoom::MailboxWatcher.stubs(:new).returns(watcher)
|
37
63
|
coordinator = MailRoom::Coordinator.new(['mailbox1'])
|
38
|
-
coordinator.stubs(:running?).returns(true)
|
39
64
|
coordinator.quit
|
40
65
|
watcher.should have_received(:quit)
|
41
66
|
end
|
metadata
CHANGED
@@ -1,142 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_room
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Tony Pitale
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-16 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: mocha
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: bourne
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: faraday
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: mail
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: letter_opener
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - '>='
|
132
116
|
- !ruby/object:Gem::Version
|
133
117
|
version: '0'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - '>='
|
140
123
|
- !ruby/object:Gem::Version
|
141
124
|
version: '0'
|
142
125
|
description: mail_room will proxy email (gmail) from IMAP to a delivery method
|
@@ -150,6 +133,7 @@ files:
|
|
150
133
|
- .gitignore
|
151
134
|
- .rspec
|
152
135
|
- .ruby-version
|
136
|
+
- .travis.yml
|
153
137
|
- Gemfile
|
154
138
|
- LICENSE.txt
|
155
139
|
- README.md
|
@@ -181,27 +165,26 @@ files:
|
|
181
165
|
- spec/spec_helper.rb
|
182
166
|
homepage: http://github.com/tpitale/mail_room
|
183
167
|
licenses: []
|
168
|
+
metadata: {}
|
184
169
|
post_install_message:
|
185
170
|
rdoc_options: []
|
186
171
|
require_paths:
|
187
172
|
- lib
|
188
173
|
required_ruby_version: !ruby/object:Gem::Requirement
|
189
|
-
none: false
|
190
174
|
requirements:
|
191
|
-
- -
|
175
|
+
- - '>='
|
192
176
|
- !ruby/object:Gem::Version
|
193
177
|
version: '0'
|
194
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
|
-
none: false
|
196
179
|
requirements:
|
197
|
-
- -
|
180
|
+
- - '>='
|
198
181
|
- !ruby/object:Gem::Version
|
199
182
|
version: '0'
|
200
183
|
requirements: []
|
201
184
|
rubyforge_project:
|
202
|
-
rubygems_version:
|
185
|
+
rubygems_version: 2.0.3
|
203
186
|
signing_key:
|
204
|
-
specification_version:
|
187
|
+
specification_version: 4
|
205
188
|
summary: mail_room will proxy email (gmail) from IMAP to a callback URL, logger, or
|
206
189
|
letter_opener
|
207
190
|
test_files:
|