ez-email 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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