ez-email 0.1.2 → 0.1.3

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.
Files changed (6) hide show
  1. data/CHANGES +5 -0
  2. data/README +1 -1
  3. data/ez-email.gemspec +4 -2
  4. data/lib/ez/email.rb +128 -130
  5. data/test/test_ez_email.rb +137 -67
  6. metadata +39 -40
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.3 - 9-Jan-2013
2
+ * Fixed a bug where the default 'from' value was not actually being set
3
+ if it wasn't explicitly specified.
4
+ * Refactored the tests and use test-unit 2 instead.
5
+
1
6
  == 0.1.2 - 31-Aug-2011
2
7
  * Refactored the Rakefile. Removed the old install task, added a clean
3
8
  task, added a default task, and reorganized the gem tasks.
data/README CHANGED
@@ -30,7 +30,7 @@
30
30
  Artistic 2.0
31
31
 
32
32
  = Copyright
33
- (C) 2009-2011, Daniel J. Berger, All Rights Reserved
33
+ (C) 2009-2013, Daniel J. Berger, All Rights Reserved
34
34
 
35
35
  = Author
36
36
  Daniel Berger
data/ez-email.gemspec CHANGED
@@ -2,16 +2,18 @@ require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ez-email'
5
- s.version = '0.1.2'
5
+ s.version = '0.1.3'
6
6
  s.license = 'Artistic 2.0'
7
7
  s.summary = 'Really easy emails'
8
8
  s.description = 'A very simple interface for sending email'
9
9
  s.author = 'Daniel Berger'
10
10
  s.email = 'djberg96@gmail.com'
11
- s.homepage = 'http://www.rubyforge.org/projects/shards'
11
+ s.homepage = 'https://github.com/djberg96/ez-email'
12
12
  s.files = Dir['**/*'].reject{ |f| f.include?('git') }
13
13
  s.test_file = 'test/test_ez_email.rb'
14
14
 
15
15
  s.rubyforge_project = 'shards'
16
16
  s.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
17
+
18
+ s.add_development_dependency('test-unit')
17
19
  end
data/lib/ez/email.rb CHANGED
@@ -5,138 +5,136 @@ require 'net/smtp'
5
5
 
6
6
  # The EZ module serves as a namespace only.
7
7
  module EZ
8
-
9
- # The Email class encapsulates certain SMTP attributes, which are then
10
- # used to send simple emails.
11
- class Email
12
- # The version of the ez-email library
13
- VERSION = '0.1.2'
14
-
15
- begin
16
- @@mail_host = Resolv.getaddress('mailhost')
17
- rescue Resolv::ResolvError
18
- @@mail_host = 'localhost'
19
- end
20
8
 
9
+ # The Email class encapsulates certain SMTP attributes, which are then
10
+ # used to send simple emails.
11
+ class Email
12
+ # The version of the ez-email library
13
+ VERSION = '0.1.3'
14
+
15
+ begin
16
+ @@mail_host = Resolv.getaddress('mailhost')
17
+ rescue Resolv::ResolvError
18
+ @@mail_host = 'localhost'
19
+ end
20
+
21
+ @@mail_port = 25
22
+
23
+ # The name of the mail host to use when sending email. The default
24
+ # is whatever the address of your system's 'mailhost' resolves to.
25
+ # If that cannot be determined, your localhost is used.
26
+ #
27
+ def self.mail_host
28
+ @@mail_host
29
+ end
30
+
31
+ # Sets the mail host.
32
+ def self.mail_host=(host)
33
+ @@mail_host = host
34
+ end
35
+
36
+ # The port to use when sending email. The default is 25.
37
+ def self.mail_port
38
+ @@mail_port
39
+ end
40
+
41
+ # Sets the mail port.
42
+ def self.mail_port=(port)
21
43
  @@mail_port = 25
22
-
23
- # The name of the mail host to use when sending email. The default
24
- # is whatever the address of your system's 'mailhost' resolves to.
25
- # If that cannot be determined, your localhost is used.
26
- #
27
- def self.mail_host
28
- @@mail_host
29
- end
30
-
31
- # Sets the mail host.
32
- def self.mail_host=(host)
33
- @@mail_host = host
34
- end
35
-
36
- # The port to use when sending email. The default is 25.
37
- def self.mail_port
38
- @@mail_port
39
- end
40
-
41
- # Sets the mail port.
42
- def self.mail_port=(port)
43
- @@mail_port = 25
44
- end
45
-
46
- # A single email address or an array of email addresses to whom
47
- # the email should be sent. Mandatory.
48
- attr_accessor :to
49
-
50
- # A single email address from whom the email is being delivered. The
51
- # default is your login + '@' + your host name, though it is recommended
52
- # that you specify it explicitly.
53
- attr_accessor :from
54
-
55
- # The subject of the email. Mandatory.
56
- attr_accessor :subject
57
-
58
- # The body of the email. Mandatory.
59
- attr_accessor :body
60
-
61
- # Creates a new EZ::Email object. As a general rule you won't use
62
- # this method, but should use EZ::Email.deliver instead.
63
- #
64
- def initialize(options={})
65
- raise TypeError unless options.is_a?(Hash)
66
- validate_options(options)
67
- @options = options
68
- end
69
-
70
- # Sends the email based on the options passed to the constructor.
71
- # As a general rule you won't use this method directly, but should
72
- # use EZ::Email.deliver instead.
73
- #
74
- def deliver
75
- host = EZ::Email.mail_host
76
- port = EZ::Email.mail_port
77
-
78
- Net::SMTP.start(host, port, host){ |smtp|
79
- smtp.open_message_stream(self.from, self.to){ |stream|
80
- stream.puts "From: #{self.from}"
81
- stream.puts "To: " + self.to.to_a.join(', ')
82
- stream.puts "Subject: #{self.subject}"
83
- stream.puts
84
- stream.puts self.body
85
- }
86
- }
87
- end
44
+ end
88
45
 
89
- # Delivers a simple text email message using four options:
90
- #
91
- # * to
92
- # * from
93
- # * subject
94
- # * body
95
- #
96
- # Examples:
97
- #
98
- # # Send an email to a single user
99
- # EZ::Email.deliver(
100
- # :to => 'some_user@hotmail.com',
101
- # :from => 'me@hotmail.com',
102
- # :subject => 'Hi',
103
- # :body => 'How are you?'
104
- # )
105
- #
106
- # # Send an email to a multiple users
107
- # EZ::Email.deliver(
108
- # :to => ['jon@hotmail.com', 'mary@hotmail.com'],
109
- # :from => 'me@hotmail.com',
110
- # :subject => 'Hi',
111
- # :body => 'How are you?'
112
- # )
113
- #
114
- # This is a shortcut for EZ::Email.new + EZ::Email#deliver.
115
- #
116
- def self.deliver(options)
117
- new(options).deliver
118
- end
119
-
120
- private
121
-
122
- # Private method that both validates the hash options, and sets
123
- # the attribute values.
124
- #
125
- def validate_options(hash)
126
- valid = %w/to from subject body/
127
- hash.each{ |key, value|
128
- key = key.to_s.downcase
129
- raise ArgumentError unless valid.include?(key)
130
- send("#{key}=", value)
131
- }
132
-
133
- if to.nil? || subject.nil? || body.nil?
134
- raise ArgumentError, "Missing :to, :subject or :body"
135
- end
136
-
137
- if from.nil?
138
- from = Etc.getlogin + '@' + Socket.gethostname
139
- end
46
+ # A single email address or an array of email addresses to whom
47
+ # the email should be sent. Mandatory.
48
+ attr_accessor :to
49
+
50
+ # A single email address from whom the email is being delivered. The
51
+ # default is your login + '@' + your host name, though it is recommended
52
+ # that you specify it explicitly.
53
+ attr_accessor :from
54
+
55
+ # The subject of the email. Mandatory.
56
+ attr_accessor :subject
57
+
58
+ # The body of the email. Mandatory.
59
+ attr_accessor :body
60
+
61
+ # Creates a new EZ::Email object. As a general rule you won't use
62
+ # this method, but should use EZ::Email.deliver instead.
63
+ #
64
+ def initialize(options={})
65
+ raise TypeError unless options.is_a?(Hash)
66
+ options[:from] ||= Etc.getlogin + '@' + Socket.gethostname
67
+ validate_options(options)
68
+ @options = options
69
+ end
70
+
71
+ # Sends the email based on the options passed to the constructor.
72
+ # As a general rule you won't use this method directly, but should
73
+ # use EZ::Email.deliver instead.
74
+ #
75
+ def deliver
76
+ host = EZ::Email.mail_host
77
+ port = EZ::Email.mail_port
78
+
79
+ Net::SMTP.start(host, port, host){ |smtp|
80
+ smtp.open_message_stream(self.from, self.to){ |stream|
81
+ stream.puts "From: #{self.from}"
82
+ stream.puts "To: " + self.to.to_a.join(', ')
83
+ stream.puts "Subject: #{self.subject}"
84
+ stream.puts
85
+ stream.puts self.body
86
+ }
87
+ }
88
+ end
89
+
90
+ # Delivers a simple text email message using four options:
91
+ #
92
+ # * to
93
+ # * from
94
+ # * subject
95
+ # * body
96
+ #
97
+ # Examples:
98
+ #
99
+ # # Send an email to a single user
100
+ # EZ::Email.deliver(
101
+ # :to => 'some_user@hotmail.com',
102
+ # :from => 'me@hotmail.com',
103
+ # :subject => 'Hi',
104
+ # :body => 'How are you?'
105
+ # )
106
+ #
107
+ # # Send an email to a multiple users
108
+ # EZ::Email.deliver(
109
+ # :to => ['jon@hotmail.com', 'mary@hotmail.com'],
110
+ # :from => 'me@hotmail.com',
111
+ # :subject => 'Hi',
112
+ # :body => 'How are you?'
113
+ # )
114
+ #
115
+ # This is a shortcut for EZ::Email.new + EZ::Email#deliver.
116
+ #
117
+ def self.deliver(options)
118
+ new(options).deliver
119
+ end
120
+
121
+ private
122
+
123
+ # Private method that both validates the hash options, and sets
124
+ # the attribute values.
125
+ #
126
+ def validate_options(hash)
127
+ valid = %w[to from subject body]
128
+
129
+ hash.each{ |key, value|
130
+ key = key.to_s.downcase
131
+ raise ArgumentError unless valid.include?(key)
132
+ send("#{key}=", value)
133
+ }
134
+
135
+ if to.nil? || subject.nil? || body.nil?
136
+ raise ArgumentError, "Missing :to, :subject or :body"
140
137
  end
141
- end
138
+ end
139
+ end
142
140
  end
@@ -3,74 +3,144 @@
3
3
  #
4
4
  # Test suite for the EZ::Email library.
5
5
  ########################################################################
6
- require 'test/unit'
6
+ require 'test-unit'
7
7
  require 'ez/email'
8
+ require 'socket'
9
+ require 'etc'
8
10
 
9
11
  class TC_EZ_Email < Test::Unit::TestCase
10
- def setup
11
- @to = 'foo@some_mail_service.com'
12
- @from = 'bar@some_mail_service.com'
13
- @subj = 'This is a test'
14
- @body = 'How are you?'
15
-
16
- @opts = {:to => @to, :from => @from, :subject => @subj, :body => @body }
17
- @email = EZ::Email.new(@opts)
18
- end
19
-
20
- def test_version
21
- assert_equal('0.1.2', EZ::Email::VERSION)
22
- end
23
-
24
- def test_to
25
- assert_respond_to(@email, :to)
26
- assert_respond_to(@email, :to=)
27
- assert_equal(@to, @email.to)
28
- end
29
-
30
- def test_from
31
- assert_respond_to(@email, :from)
32
- assert_respond_to(@email, :from=)
33
- assert_equal(@from, @email.from)
34
- end
35
-
36
- def test_subject
37
- assert_respond_to(@email, :subject)
38
- assert_respond_to(@email, :subject=)
39
- assert_equal(@subj, @email.subject)
40
- end
41
-
42
- def test_body
43
- assert_respond_to(@email, :body)
44
- assert_respond_to(@email, :body=)
45
- assert_equal(@body, @email.body)
46
- end
47
-
48
- def test_mail_host
49
- assert_respond_to(EZ::Email, :mail_host)
50
- assert_respond_to(EZ::Email, :mail_host=)
51
- assert_kind_of(String, EZ::Email.mail_host)
52
- end
53
-
54
- def test_mail_port
55
- assert_respond_to(EZ::Email, :mail_port)
56
- assert_respond_to(EZ::Email, :mail_port=)
57
- assert_equal(25, EZ::Email.mail_port)
58
- end
59
-
60
- def test_deliver
61
- assert_respond_to(EZ::Email, :deliver)
62
- end
63
-
64
- def test_invalid_option_raises_error
65
- assert_raise(ArgumentError){ EZ::Email.send(:new, {:bogus => 77}) }
66
- end
67
-
68
- def teardown
69
- @to = nil
70
- @from = nil
71
- @subj = nil
72
- @body = nil
73
- @opts = nil
74
- @email = nil
75
- end
12
+ def self.startup
13
+ @@host = Socket.gethostname
14
+ @@login = Etc.getlogin
15
+ end
16
+
17
+ def setup
18
+ @to = 'foo@some_mail_service.com'
19
+ @from = 'bar@some_mail_service.com'
20
+ @subj = 'This is a test'
21
+ @body = 'How are you?'
22
+
23
+ @opts = {:to => @to, :from => @from, :subject => @subj, :body => @body }
24
+ @email = EZ::Email.new(@opts)
25
+ end
26
+
27
+ test "version is set to expected value" do
28
+ assert_equal('0.1.3', EZ::Email::VERSION)
29
+ end
30
+
31
+ test "to getter method basic functionality" do
32
+ assert_respond_to(@email, :to)
33
+ assert_nothing_raised{ @email.to }
34
+ assert_not_nil(@email.to)
35
+ end
36
+
37
+ test "to getter method returns expected value" do
38
+ assert_equal(@to, @email.to)
39
+ end
40
+
41
+ test "to setter method basic functionality" do
42
+ assert_respond_to(@email, :to=)
43
+ assert_nothing_raised{ @email.to = 'bogus@some_bogus.com' }
44
+ end
45
+
46
+ test "to setter actually sets value" do
47
+ @email.to = 'bogus@some_bogus.com'
48
+ assert_equal(@email.to, 'bogus@some_bogus.com')
49
+ end
50
+
51
+ test "from getter basic functionality" do
52
+ assert_respond_to(@email, :from)
53
+ assert_nothing_raised{ @email.from }
54
+ assert_not_nil(@email.from)
55
+ end
56
+
57
+ test "from setter basic functionality" do
58
+ assert_respond_to(@email, :from=)
59
+ assert_nothing_raised{ @email.from = 'bogus@some_bogus.com' }
60
+ end
61
+
62
+ test "from method returns expected value" do
63
+ assert_equal(@from, @email.from)
64
+ end
65
+
66
+ test "from defaults to username@host if not set in constructor" do
67
+ @email = EZ::Email.new(:to => 'x', :subject => 'x', :body => 'x')
68
+ expected = @@login << '@' << @@host
69
+ assert_equal(expected, @email.from)
70
+ end
71
+
72
+ test "subject getter basic functionality" do
73
+ assert_respond_to(@email, :subject)
74
+ assert_nothing_raised{ @email.subject }
75
+ assert_not_nil(@email.subject)
76
+ end
77
+
78
+ test "subject setter basic functionality" do
79
+ assert_respond_to(@email, :subject=)
80
+ assert_nothing_raised{ @email.subject = 'bogus@bogus.com' }
81
+ end
82
+
83
+ test "subject method returns expected value" do
84
+ assert_equal(@subj, @email.subject)
85
+ end
86
+
87
+ test "body getter basic functionality" do
88
+ assert_respond_to(@email, :body)
89
+ assert_nothing_raised{ @email.body }
90
+ assert_not_nil(@email.body)
91
+ end
92
+
93
+ test "body setter basic functionality" do
94
+ assert_respond_to(@email, :body=)
95
+ assert_nothing_raised{ @email.body = "Test" }
96
+ end
97
+
98
+ test "body method returns the expected value" do
99
+ assert_equal(@body, @email.body)
100
+ end
101
+
102
+ test "mail_host getter basic functionality" do
103
+ assert_respond_to(EZ::Email, :mail_host)
104
+ assert_nothing_raised{ EZ::Email.mail_host }
105
+ assert_not_nil(EZ::Email.mail_host)
106
+ end
107
+
108
+ test "mail_host setter basic functionality" do
109
+ assert_respond_to(EZ::Email, :mail_host=)
110
+ assert_nothing_raised{ EZ::Email.mail_host = "Test" }
111
+ end
112
+
113
+ test "mail_port singleton getter basic functionality" do
114
+ assert_respond_to(EZ::Email, :mail_port)
115
+ end
116
+
117
+ test "mail_port singleton setter basic functionality" do
118
+ assert_respond_to(EZ::Email, :mail_port=)
119
+ end
120
+
121
+ test "mail_port method returns the expected value" do
122
+ assert_equal(25, EZ::Email.mail_port)
123
+ end
124
+
125
+ test "deliver singleton method basic functionality" do
126
+ assert_respond_to(EZ::Email, :deliver)
127
+ end
128
+
129
+ test "passing an invalid option to the constructor raises an error" do
130
+ assert_raise(ArgumentError){ EZ::Email.send(:new, {:bogus => 77}) }
131
+ end
132
+
133
+ def teardown
134
+ @to = nil
135
+ @from = nil
136
+ @subj = nil
137
+ @body = nil
138
+ @opts = nil
139
+ @email = nil
140
+ end
141
+
142
+ def self.shutdown
143
+ @@host = nil
144
+ @@login = nil
145
+ end
76
146
  end
metadata CHANGED
@@ -1,34 +1,41 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ez-email
3
- version: !ruby/object:Gem::Version
4
- hash: 31
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Daniel Berger
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-01 00:00:00 Z
19
- dependencies: []
20
-
12
+ date: 2013-01-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: test-unit
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
21
30
  description: A very simple interface for sending email
22
31
  email: djberg96@gmail.com
23
32
  executables: []
24
-
25
33
  extensions: []
26
-
27
- extra_rdoc_files:
34
+ extra_rdoc_files:
28
35
  - README
29
36
  - CHANGES
30
37
  - MANIFEST
31
- files:
38
+ files:
32
39
  - CHANGES
33
40
  - ez-email.gemspec
34
41
  - lib/ez/email.rb
@@ -36,38 +43,30 @@ files:
36
43
  - Rakefile
37
44
  - README
38
45
  - test/test_ez_email.rb
39
- homepage: http://www.rubyforge.org/projects/shards
40
- licenses:
46
+ homepage: https://github.com/djberg96/ez-email
47
+ licenses:
41
48
  - Artistic 2.0
42
49
  post_install_message:
43
50
  rdoc_options: []
44
-
45
- require_paths:
51
+ require_paths:
46
52
  - lib
47
- required_ruby_version: !ruby/object:Gem::Requirement
53
+ required_ruby_version: !ruby/object:Gem::Requirement
48
54
  none: false
49
- requirements:
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- hash: 3
53
- segments:
54
- - 0
55
- version: "0"
56
- required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
60
  none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 3
62
- segments:
63
- - 0
64
- version: "0"
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
65
  requirements: []
66
-
67
66
  rubyforge_project: shards
68
- rubygems_version: 1.8.10
67
+ rubygems_version: 1.8.24
69
68
  signing_key:
70
69
  specification_version: 3
71
70
  summary: Really easy emails
72
- test_files:
71
+ test_files:
73
72
  - test/test_ez_email.rb