simple_mailer 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c29f8a54328df163579bbc2a52d4c88c700e2e8
4
- data.tar.gz: e7d81522d9e9059d860510eb2449a053e699cc1e
3
+ metadata.gz: a983756906bc274eb4c8a9f870af6cb17375ff4d
4
+ data.tar.gz: f0de651d59f07f38c9a3f885adc419f7a00bb2c6
5
5
  SHA512:
6
- metadata.gz: 9cc1a9501b92907e8a4a0b2fbf41c1a74ff3b01fed4d79da2009ea4582ba8609df215e55c1d30fea6a1d7b86a804e18c24666d5e9f9caa55bbbf345bc7283814
7
- data.tar.gz: 18cf8b2af821be2c7573ddd84a91a1128e35372e2a8d9f8cb69be9ffbe399cb3fc027ea554f452ca86a4996b48d65381bdc69eb99aa2843d10baabd66b4ccdbd
6
+ metadata.gz: 682559a504a4594ad1771b9349378f7b4e1733b70adab4a95370daf22105e0b34a8cde75381ecb35fcc313ee530e2b9fa1584ce5b25185baf647ecc798625d10
7
+ data.tar.gz: 29d1c3d59bed320f8fb1055bf679892f1cbf6f407ed6d6c60601e20d77d12956682ed69557e410eeabcce6dfdda758c029ef8117e5f78bac00eae8b9e55f7f8d
data/README CHANGED
@@ -55,6 +55,19 @@ There are four special headers that simple_mailer processes:
55
55
 
56
56
  All other headers are used verbatim in the message.
57
57
 
58
+ == Configuration
59
+
60
+ You can pass in options just like with the Mail gem.
61
+
62
+ SimpleMailer.smtp_settings.update(
63
+ :address => "smtp.gmail.com",
64
+ :port => 587,
65
+ :domain => "localhost",
66
+ :user_name => "bob",
67
+ :password => "secret",
68
+ :authentication => :plain,
69
+ )
70
+
58
71
  == Testing
59
72
 
60
73
  Testing support is probably the main reason to use simple_mailer over
@@ -15,6 +15,7 @@ module SimpleMailer
15
15
  extend self
16
16
 
17
17
  DEFAULT_SMTP_HOST = 'localhost'.freeze
18
+ DEFAULT_SMTP_DOMAIN = 'localhost'.freeze
18
19
 
19
20
  # The array of emails sent
20
21
  def self.emails_sent
@@ -37,6 +38,16 @@ module SimpleMailer
37
38
 
38
39
  # The smtp server to sent email to
39
40
  attr_accessor :smtp_server
41
+
42
+ # Custom SMTP configuration for any service (taken from the "mail" gem)
43
+ def smtp_settings
44
+ @smtp_settings ||= {
45
+ :address => smtp_server || DEFAULT_SMTP_HOST,
46
+ :port => 25,
47
+ :enable_starttls_auto => true,
48
+ :domain => DEFAULT_SMTP_DOMAIN,
49
+ }
50
+ end
40
51
 
41
52
  # The emails sent in test mode. Is an array of arrays. Each
42
53
  # element array is a array of three elements, the message, from address,
@@ -91,7 +102,9 @@ END_OF_MESSAGE
91
102
  if SimpleMailer.test_mode?
92
103
  test_mode_send_email(msg, from, to)
93
104
  else
94
- Net::SMTP.start(smtp_server || DEFAULT_SMTP_HOST){|s| s.send_message(msg, from, to)}
105
+ smtp.start(*smtp_settings.values_at(:domain, :user_name, :password, :authentication)) do |s|
106
+ s.send_message(msg, from, to)
107
+ end
95
108
  end
96
109
  end
97
110
 
@@ -100,4 +113,11 @@ END_OF_MESSAGE
100
113
  def test_mode_send_email(msg, from, to)
101
114
  emails_sent << [msg, from, to]
102
115
  end
116
+
117
+ def smtp
118
+ Net::SMTP.new(*smtp_settings.values_at(:address, :port)).tap do |smtp|
119
+ smtp.enable_starttls_auto unless smtp_settings[:enable_starttls_auto] == false
120
+ smtp.enable_tls if smtp_settings[:tls] || smtp_settings[:ssl]
121
+ end
122
+ end
103
123
  end
@@ -1,32 +1,54 @@
1
- #!/usr/bin/env spec
2
1
  require File.join(File.dirname(File.dirname(__FILE__)), '/lib/simple_mailer')
3
2
  Object.send(:remove_const, :Net)
4
3
 
4
+ gem 'minitest'
5
+ require 'minitest/autorun'
6
+
5
7
  $message = [nil, nil, nil]
6
8
  module Net
7
9
  class SMTP
8
- class Mock
9
- def initialize(host)
10
- @host = host
11
- end
12
- def send_message(msg, from, to)
13
- $message = [msg, from, to, @host]
14
- end
10
+ attr_reader :address, :port, :domain, :user_name, :password, :authentication,
11
+ :starttls_auto, :tls
12
+
13
+ def initialize(address, port = nil)
14
+ @address, @port = address, port
15
+ end
16
+
17
+ def enable_starttls_auto
18
+ @starttls_auto = true
19
+ end
20
+
21
+ def enable_tls
22
+ @tls = true
15
23
  end
16
- def self.start(host, *args)
17
- yield(Mock.new(host))
24
+
25
+ def start(domain = nil, user_name = nil, password = nil, authentication = nil)
26
+ @domain, @user_name, @password, @authentication = domain, user_name, password, authentication
27
+ yield self
28
+ end
29
+
30
+ def send_message(msg, from, to)
31
+ $message = [msg, from, to, @address]
32
+ self
18
33
  end
19
34
  end
20
35
  end
21
36
 
22
- shared_examples_for "simple_mailer" do
37
+ module SimpleMailerSpecs
38
+ extend Minitest::Spec::DSL
39
+
23
40
  before do
24
41
  $message = [nil, nil, nil]
25
42
  end
43
+ after do
44
+ @mailer.smtp_server = nil
45
+ @mailer.instance_variable_set(:@smtp_settings, nil)
46
+ SimpleMailer.instance_variable_set(:@test_mode, false)
47
+ end
26
48
 
27
- it "should sent email" do
49
+ it "should send email" do
28
50
  @mailer.send_email('from1@from.com', 'to1@to.com', 'Test Subject 1', 'Test Body 1')
29
- $message.should == [<<END_MESSAGE, 'from1@from.com', 'to1@to.com', 'localhost']
51
+ $message.must_equal [<<END_MESSAGE, 'from1@from.com', 'to1@to.com', 'localhost']
30
52
  From: from1@from.com
31
53
  To: to1@to.com
32
54
  Subject: Test Subject 1
@@ -37,7 +59,7 @@ END_MESSAGE
37
59
 
38
60
  it "should allow the setting of headers" do
39
61
  @mailer.send_email('from2@from.com', 'to2@to.com', 'Test Subject 2', 'Test Body 2', 'HeaderKey2'=>'HeaderValue2')
40
- $message.should == [<<END_MESSAGE, 'from2@from.com', 'to2@to.com', 'localhost']
62
+ $message.must_equal [<<END_MESSAGE, 'from2@from.com', 'to2@to.com', 'localhost']
41
63
  From: from2@from.com
42
64
  To: to2@to.com
43
65
  Subject: Test Subject 2
@@ -49,7 +71,7 @@ END_MESSAGE
49
71
 
50
72
  it "should recognize the special :cc header" do
51
73
  @mailer.send_email('from3@from.com', 'to3@to.com', 'Test Subject 3', 'Test Body 3', :cc=>'cc3@to.com')
52
- $message.should == [<<END_MESSAGE, 'from3@from.com', ['to3@to.com', 'cc3@to.com'], 'localhost']
74
+ $message.must_equal [<<END_MESSAGE, 'from3@from.com', ['to3@to.com', 'cc3@to.com'], 'localhost']
53
75
  From: from3@from.com
54
76
  To: to3@to.com
55
77
  Subject: Test Subject 3
@@ -61,7 +83,7 @@ END_MESSAGE
61
83
 
62
84
  it "should recognize the special :bcc header" do
63
85
  @mailer.send_email('from3@from.com', 'to3@to.com', 'Test Subject 3', 'Test Body 3', :bcc=>'cc3@to.com')
64
- $message.should == [<<END_MESSAGE, 'from3@from.com', ['to3@to.com', 'cc3@to.com'], 'localhost']
86
+ $message.must_equal [<<END_MESSAGE, 'from3@from.com', ['to3@to.com', 'cc3@to.com'], 'localhost']
65
87
  From: from3@from.com
66
88
  To: to3@to.com
67
89
  Subject: Test Subject 3
@@ -72,7 +94,7 @@ END_MESSAGE
72
94
 
73
95
  it "should recognize the special :smtp_from and :smtp_to headers" do
74
96
  @mailer.send_email('from3@from.com', 'to3@to.com', 'Test Subject 3', 'Test Body 3', 'HeaderKey3'=>'HeaderValue3', :smtp_from=>'from@to.com', :smtp_to=>'to@from.com')
75
- $message.should == [<<END_MESSAGE, 'from@to.com', 'to@from.com', 'localhost']
97
+ $message.must_equal [<<END_MESSAGE, 'from@to.com', 'to@from.com', 'localhost']
76
98
  From: from3@from.com
77
99
  To: to3@to.com
78
100
  Subject: Test Subject 3
@@ -85,13 +107,13 @@ END_MESSAGE
85
107
  it "should not modify input hash" do
86
108
  h = {:smtp_to=>'to@to.com'}
87
109
  @mailer.send_email('from3@from.com', 'to3@to.com', 'Test Subject 3', 'Test Body 3', h)
88
- h.should == {:smtp_to=>'to@to.com'}
110
+ h.must_equal(:smtp_to=>'to@to.com')
89
111
  end
90
112
 
91
113
  it "should allow the setting of smtp server" do
92
114
  @mailer.smtp_server = 'blah.com'
93
115
  @mailer.send_email('from1@from.com', 'to1@to.com', 'Test Subject 1', 'Test Body 1')
94
- $message.should == [<<END_MESSAGE, 'from1@from.com', 'to1@to.com', 'blah.com']
116
+ $message.must_equal [<<END_MESSAGE, 'from1@from.com', 'to1@to.com', 'blah.com']
95
117
  From: from1@from.com
96
118
  To: to1@to.com
97
119
  Subject: Test Subject 1
@@ -103,13 +125,13 @@ END_MESSAGE
103
125
  it "should not send emails in test mode" do
104
126
  SimpleMailer.test_mode!
105
127
  @mailer.send_email('from3@from.com', 'to3@to.com', 'Test Subject 3', 'Test Body 3', 'HeaderKey3'=>'HeaderValue3', :smtp_from=>'from@to.com', :smtp_to=>'to@from.com')
106
- $message.should == [nil, nil, nil]
128
+ $message.must_equal [nil, nil, nil]
107
129
  end
108
130
 
109
131
  it "should record emails sent to emails_sent in test mode" do
110
132
  SimpleMailer.test_mode!
111
133
  @mailer.send_email('from3@from.com', 'to3@to.com', 'Test Subject 3', 'Test Body 3', 'HeaderKey3'=>'HeaderValue3', :smtp_from=>'from@to.com', :smtp_to=>'to@from.com')
112
- @mailer.emails_sent.should == [[<<END_MESSAGE, 'from@to.com', 'to@from.com']]
134
+ @mailer.emails_sent.must_equal [[<<END_MESSAGE, 'from@to.com', 'to@from.com']]
113
135
  From: from3@from.com
114
136
  To: to3@to.com
115
137
  Subject: Test Subject 3
@@ -119,14 +141,52 @@ Test Body 3
119
141
  END_MESSAGE
120
142
  SimpleMailer.instance_variable_set(:@test_mode, false)
121
143
  end
144
+
145
+ it "should give proper default smtp settings" do
146
+ @mailer.send(:smtp).address.must_equal 'localhost'
147
+ @mailer.send(:smtp).port.must_equal 25
148
+ @mailer.send(:smtp).starttls_auto.must_equal true
149
+
150
+ smtp = @mailer.send_email('from@from.com', 'to@to.com', 'Test Subject', 'Test Body')
151
+ smtp.domain.must_equal 'localhost'
152
+ end
153
+
154
+ it "should take smtp_server as the address" do
155
+ @mailer.smtp_server = 'blah.com'
156
+ @mailer.send(:smtp).address.must_equal 'blah.com'
157
+ end
158
+
159
+ it "should have configurable smtp settings" do
160
+ @mailer.smtp_settings.update(
161
+ :address => 'smtp.gmail.com',
162
+ :port => 587,
163
+ :user_name => 'bob',
164
+ :password => 'secret',
165
+ :domain => 'mydomain.com',
166
+ :authentication => :plain,
167
+ :enable_starttls_auto => false,
168
+ :tls => true
169
+ )
170
+
171
+ @mailer.send(:smtp).address.must_equal 'smtp.gmail.com'
172
+ @mailer.send(:smtp).port.must_equal 587
173
+ @mailer.send(:smtp).starttls_auto.must_equal nil
174
+ @mailer.send(:smtp).tls.must_equal true
175
+
176
+ smtp = @mailer.send_email('from@from.com', 'to@to.com', 'Test Subject', 'Test Body')
177
+ smtp.domain.must_equal 'mydomain.com'
178
+ smtp.user_name.must_equal 'bob'
179
+ smtp.password.must_equal 'secret'
180
+ smtp.authentication.must_equal :plain
181
+ end
122
182
  end
123
183
 
124
184
  describe "SimpleMailer module itself" do
125
185
  before{@mailer = SimpleMailer}
126
- it_should_behave_like "simple_mailer"
186
+ include SimpleMailerSpecs
127
187
  end
128
188
 
129
189
  describe "Class including SimpleMailer" do
130
190
  before{@mailer = Class.new{include SimpleMailer}.new}
131
- it_should_behave_like "simple_mailer"
191
+ include SimpleMailerSpecs
132
192
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_mailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-20 00:00:00.000000000 Z
11
+ date: 2015-05-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: code@jeremyevans.net
@@ -17,8 +17,8 @@ extensions: []
17
17
  extra_rdoc_files:
18
18
  - MIT-LICENSE
19
19
  files:
20
- - README
21
20
  - MIT-LICENSE
21
+ - README
22
22
  - lib/simple_mailer.rb
23
23
  - spec/simple_mailer.rb
24
24
  homepage:
@@ -26,25 +26,25 @@ licenses: []
26
26
  metadata: {}
27
27
  post_install_message:
28
28
  rdoc_options:
29
- - --inline-source
30
- - --line-numbers
29
+ - "--inline-source"
30
+ - "--line-numbers"
31
31
  - README
32
32
  - lib
33
33
  require_paths:
34
34
  - lib
35
35
  required_ruby_version: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  requirements:
42
- - - '>='
42
+ - - ">="
43
43
  - !ruby/object:Gem::Version
44
44
  version: '0'
45
45
  requirements: []
46
46
  rubyforge_project:
47
- rubygems_version: 2.0.2
47
+ rubygems_version: 2.4.5
48
48
  signing_key:
49
49
  specification_version: 4
50
50
  summary: Simple email library with testing support