received 0.4.0 → 0.4.1
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/bin/received +6 -0
- data/lib/received/backend/base.rb +27 -0
- data/lib/received/backend/mongodb.rb +3 -1
- data/lib/received/version.rb +1 -1
- data/spec/backend_spec.rb +19 -0
- metadata +4 -2
data/bin/received
CHANGED
@@ -18,6 +18,7 @@ OptionParser.new do |opts|
|
|
18
18
|
opts.on('-l', '--log FILE', 'Log file name (default: piddir/received.log)') {|v| options[:logfile] = v}
|
19
19
|
opts.on('-u', '--user NAME', 'Effective user when daemon (default: nobody)') {|v| options[:user] = v}
|
20
20
|
opts.on('-g', '--group NAME', 'Effective group when daemon (default: nobody)') {|v| options[:group] = v}
|
21
|
+
opts.on('-r', '--require FILE1,FILE2,...', 'Require ruby file(s)') {|v| options[:require] = v}
|
21
22
|
opts.on('-v', '--verbose', 'Verbose logging') {options[:level] = Logger::DEBUG}
|
22
23
|
opts.on_tail('-h', '--help', 'Show this message') do
|
23
24
|
puts opts
|
@@ -53,4 +54,9 @@ server = Received::Server.new(options)
|
|
53
54
|
%w(TERM INT).each do |sig|
|
54
55
|
Signal.trap(sig) {server.stop}
|
55
56
|
end
|
57
|
+
|
58
|
+
if files = options[:require]
|
59
|
+
files.split(',').each { |file| require file }
|
60
|
+
end
|
61
|
+
|
56
62
|
server.serve!
|
@@ -11,6 +11,33 @@ module Received
|
|
11
11
|
def store(mail)
|
12
12
|
raise NotImplementedError
|
13
13
|
end
|
14
|
+
|
15
|
+
def notify_observers(*args)
|
16
|
+
self.class.notify_observers(*args)
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def observers
|
21
|
+
@@observers ||= []
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_observer(observer)
|
25
|
+
observers.push(observer)
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove_observer(observer)
|
29
|
+
observers.delete(observer)
|
30
|
+
end
|
31
|
+
|
32
|
+
def notify_observers(method, payload)
|
33
|
+
observers.each do |observer|
|
34
|
+
if observer.respond_to?(method)
|
35
|
+
observer.send(method, payload) rescue nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
14
41
|
end
|
15
42
|
end
|
16
43
|
end
|
@@ -21,7 +21,9 @@ module Received
|
|
21
21
|
# @return [ObjectId] object_id
|
22
22
|
def store(mail)
|
23
23
|
mail = mail.merge(:ts => Time.now.to_i, :body => BSON::Binary.new(mail[:body]))
|
24
|
-
@coll.insert(mail, :safe => {:fsync => true})
|
24
|
+
@coll.insert(mail, :safe => {:fsync => true}).tap do |result|
|
25
|
+
notify_observers(:after_save, result) if result
|
26
|
+
end
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
data/lib/received/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'received/backend/base'
|
2
|
+
require 'received/backend/mongodb'
|
3
|
+
|
4
|
+
describe 'Observable' do
|
5
|
+
subject { Received::Backend::Mongodb.new('host' => '127.0.0.1', 'database' => 'spec', 'collection' => 'inbox') }
|
6
|
+
|
7
|
+
it "notifies observers" do
|
8
|
+
observer = mock('observer', :after_save => true)
|
9
|
+
Received::Backend::Base.add_observer(observer)
|
10
|
+
mail = {
|
11
|
+
from: 'spec@example.com',
|
12
|
+
rcpt: ['to1@example.com', 'to2@example.com'],
|
13
|
+
body: 'spec'
|
14
|
+
}
|
15
|
+
observer.should_receive(:after_save)
|
16
|
+
subject.store(mail)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: received
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: daemons
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- lib/received/server.rb
|
99
99
|
- lib/received/version.rb
|
100
100
|
- received.gemspec
|
101
|
+
- spec/backend_spec.rb
|
101
102
|
- spec/lmtp_spec.rb
|
102
103
|
- spec/spec_helper.rb
|
103
104
|
homepage: ''
|
@@ -125,6 +126,7 @@ signing_key:
|
|
125
126
|
specification_version: 3
|
126
127
|
summary: Receive mail from Postfix and store it somewhere
|
127
128
|
test_files:
|
129
|
+
- spec/backend_spec.rb
|
128
130
|
- spec/lmtp_spec.rb
|
129
131
|
- spec/spec_helper.rb
|
130
132
|
has_rdoc:
|