hookworm-base 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDMyMzVkMGNlZmVkZDcxNmIyMmU3NGU4NjY1NjllOTc3ZDVmNzFjNQ==
5
- data.tar.gz: !binary |-
6
- YWMwYTRlODUwMWIyYmY1ZWRjZDhiYjJkMzBjZDI4MmI3Zjg5ZGM4YQ==
2
+ SHA1:
3
+ metadata.gz: 13e89f5d28ed939f78bbea239eb25c40dc0171c5
4
+ data.tar.gz: b5b69f545de283979ad673cb5bc6399bf05d0d04
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- M2JkODczNjQ4NzM2MTc2ZTBmMjE5ODkwZTMwMDE2ZTg1NWNhMTA1MTEwYTE5
10
- ZmNjNmM4NGEyYTkzZGZiNTQ5ODZkNTA2Mjg4MmZlYWQ2NWFkZDc3NTM1ZWUy
11
- MTNmNmVlOGFjYWUzZjAxMzY1YzVhZGU1M2ZhNTFhYTg0ZjAxYWY=
12
- data.tar.gz: !binary |-
13
- MmU3MTJkMzgzMTJjMWRiNWFhZDhjMTE2MDExMzJkYWYyNWZjNWUzOGEwYjA3
14
- Y2I1NzE5M2JjMTY4NjdhMzZkNDdlMjE4OWFkNTE2ZmMyZTAzMmZlMjlkMWRm
15
- MWJiYmU0OTg4ZWEyOTZkZTM1NzE2Y2U2NzgzMjliMmMzYmNlZTk=
6
+ metadata.gz: 5eca4e7746b16a2d0c4b29d56054cac26fac6b03e46a130c769a846e3112363d9cf60e5369515e1b8f106bd464a5c3b7f6406fa4ee3f7a780c68a40f2d03b2b2
7
+ data.tar.gz: 7d6c29fc9ca25f6a2767025e9c15160a297e7f2d7ca7a2532b4a02cdf7e2494c5500111cc2cda1c5827de5230a4659a82e867dc8cf8e79f37ce4ded7d0375fdf
@@ -1,5 +1,5 @@
1
1
  module Hookworm
2
2
  module Base
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -3,13 +3,16 @@ require 'uri'
3
3
 
4
4
  module Hookworm
5
5
  class Emailer
6
- def initialize(email_uri)
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 send(from, to, msg)
13
+ def send_email(from, to, msg)
11
14
  Net::SMTP.start(*smtp_args) do |smtp|
12
- smtp.enable_ssl if @email_uri.scheme == 'smtps'
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
- @email_uri.host,
22
- @email_uri.port,
23
- 'localhost',
24
- @email_uri.user,
25
- @email_uri.password,
26
- @email_uri.user ? :plain : nil
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.1.1
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-01-30 00:00:00.000000000 Z
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.2.1
152
+ rubygems_version: 2.0.14
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: ''