hookworm-base 0.1.1 → 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 +5 -13
- data/lib/hookworm/base/version.rb +1 -1
- data/lib/hookworm/emailer.rb +12 -9
- data/spec/lib/hookworm/emailer_spec.rb +69 -0
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YWMwYTRlODUwMWIyYmY1ZWRjZDhiYjJkMzBjZDI4MmI3Zjg5ZGM4YQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 13e89f5d28ed939f78bbea239eb25c40dc0171c5
|
4
|
+
data.tar.gz: b5b69f545de283979ad673cb5bc6399bf05d0d04
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZmNjNmM4NGEyYTkzZGZiNTQ5ODZkNTA2Mjg4MmZlYWQ2NWFkZDc3NTM1ZWUy
|
11
|
-
MTNmNmVlOGFjYWUzZjAxMzY1YzVhZGU1M2ZhNTFhYTg0ZjAxYWY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MmU3MTJkMzgzMTJjMWRiNWFhZDhjMTE2MDExMzJkYWYyNWZjNWUzOGEwYjA3
|
14
|
-
Y2I1NzE5M2JjMTY4NjdhMzZkNDdlMjE4OWFkNTE2ZmMyZTAzMmZlMjlkMWRm
|
15
|
-
MWJiYmU0OTg4ZWEyOTZkZTM1NzE2Y2U2NzgzMjliMmMzYmNlZTk=
|
6
|
+
metadata.gz: 5eca4e7746b16a2d0c4b29d56054cac26fac6b03e46a130c769a846e3112363d9cf60e5369515e1b8f106bd464a5c3b7f6406fa4ee3f7a780c68a40f2d03b2b2
|
7
|
+
data.tar.gz: 7d6c29fc9ca25f6a2767025e9c15160a297e7f2d7ca7a2532b4a02cdf7e2494c5500111cc2cda1c5827de5230a4659a82e867dc8cf8e79f37ce4ded7d0375fdf
|
data/lib/hookworm/emailer.rb
CHANGED
@@ -3,13 +3,16 @@ require 'uri'
|
|
3
3
|
|
4
4
|
module Hookworm
|
5
5
|
class Emailer
|
6
|
-
|
6
|
+
attr_reader :email_uri, :helo
|
7
|
+
|
8
|
+
def initialize(email_uri, helo = 'localhost')
|
7
9
|
@email_uri = URI(email_uri)
|
10
|
+
@helo = helo
|
8
11
|
end
|
9
12
|
|
10
|
-
def
|
13
|
+
def send_email(from, to, msg)
|
11
14
|
Net::SMTP.start(*smtp_args) do |smtp|
|
12
|
-
smtp.enable_ssl if
|
15
|
+
smtp.enable_ssl if email_uri.scheme == 'smtps'
|
13
16
|
smtp.send_message(msg, from, to)
|
14
17
|
end
|
15
18
|
end
|
@@ -18,12 +21,12 @@ module Hookworm
|
|
18
21
|
|
19
22
|
def smtp_args
|
20
23
|
[
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
email_uri.host,
|
25
|
+
email_uri.port,
|
26
|
+
helo,
|
27
|
+
email_uri.user ? URI.unescape(email_uri.user) : nil,
|
28
|
+
email_uri.password ? URI.unescape(email_uri.password) : nil,
|
29
|
+
email_uri.user ? :plain : nil
|
27
30
|
]
|
28
31
|
end
|
29
32
|
end
|
@@ -1,4 +1,73 @@
|
|
1
1
|
require 'hookworm/emailer'
|
2
2
|
|
3
3
|
describe Hookworm::Emailer do
|
4
|
+
subject { described_class.new(email_uri) }
|
5
|
+
let(:email_uri) { 'smtp://localhost:25' }
|
6
|
+
let(:mock_smtp) { double('smtp', enable_ssl: true, send_message: true) }
|
7
|
+
|
8
|
+
before do
|
9
|
+
Net::SMTP.stub(:start).and_yield(mock_smtp)
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'when the email uri is invalid' do
|
13
|
+
let(:email_uri) { 'fribble://@@@../bzz:;xr?!!' }
|
14
|
+
it { expect { subject }.to raise_error }
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'defaults helo to localhost' do
|
18
|
+
subject.helo.should == 'localhost'
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when helo is given' do
|
22
|
+
subject { described_class.new(email_uri, 'app.example.com') }
|
23
|
+
|
24
|
+
it 'uses the given helo' do
|
25
|
+
subject.send(:smtp_args)[2].should == 'app.example.com'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when auth is given' do
|
30
|
+
let(:email_uri) { 'smtp://foo:bar@mail.example.com:587' }
|
31
|
+
|
32
|
+
it 'sets auth type to :plain' do
|
33
|
+
subject.send(:smtp_args)[5].should == :plain
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when the auth is urlencoded' do
|
38
|
+
let(:email_uri) { 'smtp://foo%40bar:h%40mmer@mail.example.com:587' }
|
39
|
+
|
40
|
+
it 'unescapes the user' do
|
41
|
+
subject.send(:smtp_args)[3].should == 'foo@bar'
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'unescapes the password' do
|
45
|
+
subject.send(:smtp_args)[4].should == 'h@mmer'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when there is no auth' do
|
50
|
+
let(:email_uri) { 'smtp://mail.example.com:587' }
|
51
|
+
|
52
|
+
it 'has nil user' do
|
53
|
+
subject.send(:smtp_args)[3].should be_nil
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'has nil password' do
|
57
|
+
subject.send(:smtp_args)[4].should be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'has nil auth type' do
|
61
|
+
subject.send(:smtp_args)[5].should be_nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when scheme is smtps' do
|
66
|
+
let(:email_uri) { 'smtps://mail.example.com:587' }
|
67
|
+
|
68
|
+
it 'enables ssl' do
|
69
|
+
mock_smtp.should_receive(:enable_ssl)
|
70
|
+
subject.send_email('from', 'to', 'w00t')
|
71
|
+
end
|
72
|
+
end
|
4
73
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hookworm-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Buch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,70 +28,70 @@ dependencies:
|
|
28
28
|
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubocop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: ''
|
@@ -139,17 +139,17 @@ require_paths:
|
|
139
139
|
- lib
|
140
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
|
-
- -
|
142
|
+
- - '>='
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
146
|
requirements:
|
147
|
-
- -
|
147
|
+
- - '>='
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
150
|
requirements: []
|
151
151
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.
|
152
|
+
rubygems_version: 2.0.14
|
153
153
|
signing_key:
|
154
154
|
specification_version: 4
|
155
155
|
summary: ''
|