mailhandler 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{travis.yml → .travis.yml} +2 -3
- data/lib/mailhandler/receiving/checker.rb +2 -1
- data/lib/mailhandler/receiving/checker_folder.rb +2 -6
- data/lib/mailhandler/receiving/checker_imap.rb +2 -5
- data/lib/mailhandler/sending/sender.rb +8 -0
- data/lib/mailhandler/sending/sender_api.rb +2 -0
- data/lib/mailhandler/sending/sender_api_batch.rb +9 -0
- data/lib/mailhandler/sending/sender_smtp.rb +1 -0
- data/lib/mailhandler/version.rb +1 -1
- data/readme.md +1 -1
- data/spec/unit/mailhandler/receiver_spec.rb +60 -24
- data/spec/unit/mailhandler/sender_spec.rb +5 -6
- data/spec/unit/mailhandler/sending/sender_api_batch_spec.rb +49 -0
- data/spec/unit/mailhandler/sending/sender_api_spec.rb +40 -0
- data/spec/unit/mailhandler_spec.rb +16 -21
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb735413b99d1dbb127a886addf0a814bf20d8d8
|
4
|
+
data.tar.gz: 2d3b74018e100aa58f6542175c0565bb2de0ffb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43b95161151654580c6d71594b69d20986e33e02a4f1a6e099f7522769f805a9836f3cae18005549587d0e59c73e5bd69ec90bdbf52865c9a355d37ebd08a53a
|
7
|
+
data.tar.gz: dfc10a479084b9339fb73157c9b03d1748983dd46842290c2baf983321888c555c9baea7218281ccdc88312e029b05ea937f2a18248c98690821b09f27ac0287
|
data/{travis.yml → .travis.yml}
RENAMED
@@ -28,6 +28,7 @@ module MailHandler
|
|
28
28
|
|
29
29
|
# Default number of email results to return, and whether to archive emails.
|
30
30
|
@search_options = {:count => 50, :archive => false}
|
31
|
+
@found_emails = []
|
31
32
|
|
32
33
|
end
|
33
34
|
|
@@ -49,7 +50,7 @@ module MailHandler
|
|
49
50
|
|
50
51
|
def search_result
|
51
52
|
|
52
|
-
|
53
|
+
!found_emails.empty?
|
53
54
|
|
54
55
|
end
|
55
56
|
|
@@ -28,18 +28,14 @@ module MailHandler
|
|
28
28
|
verify_and_set_search_options(options)
|
29
29
|
email_files = find_files(search_options)
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
@found_emails = []
|
34
|
-
|
35
|
-
else
|
31
|
+
unless email_files.empty?
|
36
32
|
|
37
33
|
@found_emails = read_found_emails(email_files, search_options[:count])
|
38
34
|
move_files(email_files) if search_options[:archive]
|
39
35
|
|
40
36
|
end
|
41
37
|
|
42
|
-
|
38
|
+
search_result
|
43
39
|
|
44
40
|
end
|
45
41
|
|
@@ -42,20 +42,17 @@ module MailHandler
|
|
42
42
|
validate_options(options)
|
43
43
|
emails = find_emails(search_options)
|
44
44
|
|
45
|
-
@found_emails = []
|
46
|
-
|
47
45
|
unless emails.empty?
|
48
46
|
|
49
47
|
emails.each do |email|
|
50
48
|
|
51
|
-
|
52
|
-
@found_emails << email if found
|
49
|
+
@found_emails << email if email.subject.include? search_options[:by_subject]
|
53
50
|
|
54
51
|
end
|
55
52
|
|
56
53
|
end
|
57
54
|
|
58
|
-
|
55
|
+
search_result
|
59
56
|
|
60
57
|
end
|
61
58
|
|
@@ -8,11 +8,20 @@ module MailHandler
|
|
8
8
|
|
9
9
|
def send(emails)
|
10
10
|
|
11
|
+
verify_email(emails)
|
11
12
|
client = setup_sending_client
|
12
13
|
client.deliver_messages(emails)
|
13
14
|
|
14
15
|
end
|
15
16
|
|
17
|
+
protected
|
18
|
+
|
19
|
+
def verify_email(emails)
|
20
|
+
|
21
|
+
raise StandardError, "Invalid type error, only Array of Mail::Message object types for sending allowed" unless emails.is_a?(Array) && emails.all? { |e| e.is_a? Mail::Message }
|
22
|
+
|
23
|
+
end
|
24
|
+
|
16
25
|
end
|
17
26
|
|
18
27
|
end
|
data/lib/mailhandler/version.rb
CHANGED
data/readme.md
CHANGED
@@ -57,7 +57,7 @@ Email receiving handler will be referenced below as `email_receiver`
|
|
57
57
|
Once you have setup mailbox checking type, you can search for email like this:
|
58
58
|
|
59
59
|
``` ruby
|
60
|
-
email_receiver.find_email(:by_subject =>
|
60
|
+
email_receiver.find_email(:by_subject => subject, :archive => true)
|
61
61
|
```
|
62
62
|
|
63
63
|
You can search imap mailbox by following options:
|
@@ -2,38 +2,74 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe MailHandler::Receiver do
|
4
4
|
|
5
|
-
|
6
|
-
let(:default_search_option) { {:by_subject => 'test'} }
|
7
|
-
let(:receiving_duration) { 5 }
|
8
|
-
let(:checker) {
|
9
|
-
checker = double('Checker')
|
5
|
+
context 'invalid receiver' do
|
10
6
|
|
11
|
-
|
12
|
-
allow(checker).to receive(:search_result) { true }
|
13
|
-
allow(checker).to receive(:found_emails) { [] }
|
14
|
-
checker
|
7
|
+
it 'create' do
|
15
8
|
|
16
|
-
|
17
|
-
|
18
|
-
it '.find_email' do
|
9
|
+
binding.pry
|
19
10
|
|
20
|
-
|
21
|
-
expect(receiver.find_email(default_search_option)).to be true
|
11
|
+
end
|
22
12
|
|
23
13
|
end
|
24
14
|
|
25
|
-
|
15
|
+
context 'valid receiver' do
|
16
|
+
|
17
|
+
let(:default_search_option) { {:by_subject => 'test'} }
|
18
|
+
let(:receiving_duration) { 5 }
|
19
|
+
let(:found_email) { Mail.new { subject 'test email' } }
|
20
|
+
let(:checker) {
|
21
|
+
checker = double('Checker')
|
22
|
+
|
23
|
+
allow(checker).to receive(:find) { sleep receiving_duration; true }
|
24
|
+
allow(checker).to receive(:search_result) { true }
|
25
|
+
allow(checker).to receive(:found_emails) { [found_email] }
|
26
|
+
checker
|
27
|
+
|
28
|
+
}
|
29
|
+
subject(:receiver) { MailHandler::Receiver.new(checker) }
|
30
|
+
|
31
|
+
context 'att readers' do
|
32
|
+
|
33
|
+
it { is_expected.to respond_to(:checker) }
|
34
|
+
it { is_expected.to respond_to(:search) }
|
35
|
+
it { is_expected.to respond_to(:search_max_duration) }
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'att writters' do
|
40
|
+
|
41
|
+
it { is_expected.to respond_to(:checker=) }
|
42
|
+
it { is_expected.to respond_to(:search=) }
|
43
|
+
it { is_expected.to respond_to(:search_max_duration=) }
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'create' do
|
48
|
+
|
49
|
+
is_expected.to be_kind_of MailHandler::Receiver
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
it '.find_email' do
|
54
|
+
|
55
|
+
expect(receiver.find_email(default_search_option)).to be true
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
it '.search' do
|
60
|
+
|
61
|
+
receiver.find_email(default_search_option)
|
26
62
|
|
27
|
-
|
28
|
-
|
63
|
+
aggregate_failures "search details" do
|
64
|
+
expect(receiver.search.options).to eq default_search_option
|
65
|
+
expect(receiver.search.started_at).to be_within(1).of(Time.now - receiving_duration)
|
66
|
+
expect(receiver.search.finished_at).to be_within(1).of(Time.now)
|
67
|
+
expect(receiver.search.duration).to be_within(0.5).of(receiving_duration)
|
68
|
+
expect(receiver.search.result).to be true
|
69
|
+
expect(receiver.search.emails).to eq [found_email]
|
70
|
+
expect(receiver.search.email).to eq found_email
|
71
|
+
end
|
29
72
|
|
30
|
-
aggregate_failures "search details" do
|
31
|
-
expect(receiver.search.options).to eq default_search_option
|
32
|
-
expect(receiver.search.started_at).to be_within(1).of(Time.now - receiving_duration)
|
33
|
-
expect(receiver.search.finished_at).to be_within(1).of(Time.now)
|
34
|
-
expect(receiver.search.duration).to be_within(0.5).of(receiving_duration)
|
35
|
-
expect(receiver.search.result).to be true
|
36
|
-
expect(receiver.search.emails).to eq []
|
37
73
|
end
|
38
74
|
|
39
75
|
end
|
@@ -23,15 +23,15 @@ describe MailHandler::Sender do
|
|
23
23
|
|
24
24
|
}
|
25
25
|
|
26
|
-
|
26
|
+
let(:sender) { subject.new(dispatcher) }
|
27
27
|
|
28
|
-
|
28
|
+
it 'create' do
|
29
29
|
|
30
|
-
|
30
|
+
expect(sender).not_to be nil
|
31
31
|
|
32
|
-
|
32
|
+
end
|
33
33
|
|
34
|
-
|
34
|
+
it 'init details' do
|
35
35
|
|
36
36
|
aggregate_failures "sending details" do
|
37
37
|
expect(sender.sending.started_at).to be nil
|
@@ -45,7 +45,6 @@ describe MailHandler::Sender do
|
|
45
45
|
|
46
46
|
it '.send_email' do
|
47
47
|
|
48
|
-
sender = subject.new(dispatcher)
|
49
48
|
sender.send_email(mail)
|
50
49
|
|
51
50
|
aggregate_failures "sending details" do
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MailHandler::Sending::PostmarkBatchAPISender do
|
4
|
+
|
5
|
+
subject { MailHandler::Sending::PostmarkBatchAPISender }
|
6
|
+
|
7
|
+
let(:api_token) { '122878782' }
|
8
|
+
|
9
|
+
it 'create' do
|
10
|
+
|
11
|
+
sender = subject.new(api_token)
|
12
|
+
|
13
|
+
aggregate_failures "init details" do
|
14
|
+
expect(sender.api_token).to eq api_token
|
15
|
+
expect(sender.type).to eq :postmark_api
|
16
|
+
expect(sender.use_ssl).to be false
|
17
|
+
expect(sender.host).to eq 'api.postmarkapp.com'
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
it '.send' do
|
23
|
+
|
24
|
+
sender = subject.new(api_token)
|
25
|
+
expect{sender.send([Mail.new])}.to raise_error Postmark::InvalidApiKeyError
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'invalid sending object' do
|
30
|
+
|
31
|
+
it '.send with string parameter' do
|
32
|
+
|
33
|
+
sender = subject.new(api_token)
|
34
|
+
expect{sender.send('test')}.
|
35
|
+
to raise_error StandardError, 'Invalid type error, only Array of Mail::Message object types for sending allowed'
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
it '.send with incorrect array parameter' do
|
40
|
+
|
41
|
+
sender = subject.new(api_token)
|
42
|
+
expect{sender.send([1,2,2])}.
|
43
|
+
to raise_error StandardError, 'Invalid type error, only Array of Mail::Message object types for sending allowed'
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MailHandler::Sending::PostmarkAPISender do
|
4
|
+
|
5
|
+
subject { MailHandler::Sending::PostmarkAPISender }
|
6
|
+
|
7
|
+
let(:api_token) { '122878782' }
|
8
|
+
|
9
|
+
it 'create' do
|
10
|
+
|
11
|
+
sender = subject.new(api_token)
|
12
|
+
|
13
|
+
aggregate_failures "init details" do
|
14
|
+
expect(sender.api_token).to eq api_token
|
15
|
+
expect(sender.type).to eq :postmark_api
|
16
|
+
expect(sender.use_ssl).to be false
|
17
|
+
expect(sender.host).to eq 'api.postmarkapp.com'
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
it '.send' do
|
23
|
+
|
24
|
+
sender = subject.new(api_token)
|
25
|
+
expect{sender.send(Mail.new)}.to raise_error Postmark::InvalidApiKeyError
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'invalid sending object' do
|
30
|
+
|
31
|
+
it '.send' do
|
32
|
+
|
33
|
+
sender = subject.new(api_token)
|
34
|
+
expect{sender.send('test')}.to raise_error StandardError
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -6,56 +6,51 @@ describe MailHandler::Handler do
|
|
6
6
|
|
7
7
|
context 'receiver' do
|
8
8
|
|
9
|
-
|
9
|
+
it 'create - invalid type' do
|
10
10
|
|
11
|
-
subject.receiver(:
|
12
|
-
|
13
|
-
}
|
14
|
-
|
15
|
-
it 'invalid type' do
|
16
|
-
|
17
|
-
expect{subject.receiver(:test)}.
|
11
|
+
expect { subject.receiver(:test) }.
|
18
12
|
to raise_error(StandardError, 'Unknown type - test, possible options: [:folder, :imap]')
|
19
13
|
|
20
14
|
end
|
21
15
|
|
22
|
-
|
16
|
+
it 'create - folder' do
|
23
17
|
|
24
|
-
|
18
|
+
expect(subject.receiver(:folder)).to be_kind_of MailHandler::Receiver
|
25
19
|
|
26
|
-
|
20
|
+
end
|
27
21
|
|
28
|
-
|
22
|
+
it 'create - imap' do
|
29
23
|
|
30
|
-
|
24
|
+
expect(subject.receiver(:imap)).to be_kind_of MailHandler::Receiver
|
31
25
|
|
26
|
+
end
|
32
27
|
|
33
28
|
end
|
34
29
|
|
35
30
|
context 'sender' do
|
36
31
|
|
37
|
-
it 'invalid type' do
|
32
|
+
it 'create - invalid type' do
|
38
33
|
|
39
|
-
expect{subject.sender(:test)}.
|
34
|
+
expect { subject.sender(:test) }.
|
40
35
|
to raise_error(StandardError, 'Unknown type - test, possible options: [:postmark_api, :postmark_batch_api, :smtp]')
|
41
36
|
|
42
37
|
end
|
43
38
|
|
44
|
-
it 'create
|
39
|
+
it 'create - postmark api' do
|
45
40
|
|
46
|
-
expect(subject.sender(:postmark_api)).to
|
41
|
+
expect(subject.sender(:postmark_api)).to be_kind_of MailHandler::Sender
|
47
42
|
|
48
43
|
end
|
49
44
|
|
50
|
-
it 'create
|
45
|
+
it 'create - postmark batch api' do
|
51
46
|
|
52
|
-
expect(subject.sender(:postmark_batch_api)).to
|
47
|
+
expect(subject.sender(:postmark_batch_api)).to be_kind_of MailHandler::Sender
|
53
48
|
|
54
49
|
end
|
55
50
|
|
56
|
-
it 'create
|
51
|
+
it 'create - smtp' do
|
57
52
|
|
58
|
-
expect(subject.sender(:smtp)).to
|
53
|
+
expect(subject.sender(:smtp)).to be_kind_of MailHandler::Sender
|
59
54
|
|
60
55
|
end
|
61
56
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailhandler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Balos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mail
|
@@ -52,6 +52,7 @@ extensions: []
|
|
52
52
|
extra_rdoc_files: []
|
53
53
|
files:
|
54
54
|
- ".gitignore"
|
55
|
+
- ".travis.yml"
|
55
56
|
- Gemfile
|
56
57
|
- Gemfile.lock
|
57
58
|
- Rakefile
|
@@ -80,8 +81,9 @@ files:
|
|
80
81
|
- spec/unit/mailhandler/receiving/notification/email/content_spec.rb
|
81
82
|
- spec/unit/mailhandler/receiving/notification/email_spec.rb
|
82
83
|
- spec/unit/mailhandler/sender_spec.rb
|
84
|
+
- spec/unit/mailhandler/sending/sender_api_batch_spec.rb
|
85
|
+
- spec/unit/mailhandler/sending/sender_api_spec.rb
|
83
86
|
- spec/unit/mailhandler_spec.rb
|
84
|
-
- travis.yml
|
85
87
|
homepage: https://github.com/ibalosh
|
86
88
|
licenses:
|
87
89
|
- MIT
|