mail_room 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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.9.3-p362
1
+ 2.0.0
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
6
+ script: bundle exec rspec spec
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
+ [![Build Status](https://travis-ci.org/tpitale/mail_room.png?branch=master)](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
- bin/mail_room -c /path/to/config.yml
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
- The default delivery method, requires _delivery_url_ and _delivery_token_ in configuration.
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
- stop
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
@@ -1,3 +1,3 @@
1
1
  module MailRoom
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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(:run)
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(:running?).returns(false)
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.1.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: 2013-01-29 00:00:00.000000000 Z
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: 1.8.23
185
+ rubygems_version: 2.0.3
203
186
  signing_key:
204
- specification_version: 3
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: