has_emails 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.
- data/CHANGELOG.rdoc +4 -0
- data/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/app/models/email.rb +5 -3
- data/app/models/email_address.rb +18 -2
- data/lib/has_emails/extensions/action_mailer.rb +15 -1
- data/lib/has_emails.rb +5 -5
- metadata +6 -5
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -91,6 +91,6 @@ To run against a specific version of Rails:
|
|
91
91
|
== Dependencies
|
92
92
|
|
93
93
|
* Rails 2.1 or later
|
94
|
-
* plugins_plus[http://github.com/pluginaweek/plugins_plus]
|
95
94
|
* has_messages[http://github.com/pluginaweek/has_messages]
|
96
95
|
* state_machine[http://github.com/pluginaweek/state_machine]
|
96
|
+
* plugins_plus[http://github.com/pluginaweek/plugins_plugins] (optional if app files are copied to your project tree)
|
data/Rakefile
CHANGED
@@ -5,15 +5,15 @@ require 'rake/contrib/sshpublisher'
|
|
5
5
|
|
6
6
|
spec = Gem::Specification.new do |s|
|
7
7
|
s.name = 'has_emails'
|
8
|
-
s.version = '0.1.
|
8
|
+
s.version = '0.1.3'
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.summary = 'Demonstrates a reference implementation for sending emails with logging and asynchronous support.'
|
11
11
|
|
12
|
-
s.files = FileList['{app,db,lib,test}/**/*']
|
12
|
+
s.files = FileList['{app,db,lib,test}/**/*'] + %w(CHANGELOG.rdoc init.rb LICENSE Rakefile README.rdoc) - FileList['test/app_root/{log,log/*,script,script/*}']
|
13
13
|
s.require_path = 'lib'
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.test_files = Dir['test/**/*_test.rb']
|
16
|
-
s.add_dependency 'has_messages', '>= 0.1.
|
16
|
+
s.add_dependency 'has_messages', '>= 0.1.3'
|
17
17
|
s.add_dependency 'validates_as_email_address', '>= 0.0.2'
|
18
18
|
|
19
19
|
s.author = 'Aaron Pfeifer'
|
data/app/models/email.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# Represents an email which has been sent to one or more recipients. This is
|
2
|
-
# essentially the same as the Message class, but
|
2
|
+
# essentially the same as the Message class, but changes how the it is
|
3
3
|
# delivered.
|
4
4
|
class Email < Message
|
5
|
-
|
5
|
+
state_machine :state do
|
6
|
+
after_transition :on => 'deliver', :do => :deliver_email
|
7
|
+
end
|
6
8
|
|
7
9
|
private
|
8
|
-
# Actually delivers the email to the recipients
|
10
|
+
# Actually delivers the email to the recipients using ActionMailer
|
9
11
|
def deliver_email
|
10
12
|
ActionMailer::Base.deliver_email(self)
|
11
13
|
end
|
data/app/models/email_address.rb
CHANGED
@@ -1,4 +1,17 @@
|
|
1
|
-
# Represents a valid RFC822 email address
|
1
|
+
# Represents a valid RFC822 email address. See http://www.w3.org/Protocols/rfc822/
|
2
|
+
# for more information about the entire specification.
|
3
|
+
#
|
4
|
+
# Email addresses are directly associated with emails and, therefore, should be
|
5
|
+
# used for building and delivering new e-mails.
|
6
|
+
#
|
7
|
+
# == Associations
|
8
|
+
#
|
9
|
+
# Email addresses have the following associations defined as a result of using the
|
10
|
+
# +has_emails+ macro:
|
11
|
+
# * +emails+ - Emails that were composed and are visible to the owner. Emails may have been sent or unsent.
|
12
|
+
# * +received_emails+ - Emails that have been received from others and are visible. Emails may have been read or unread.
|
13
|
+
# * +unsent_emails+ - Emails that have not yet been delivered
|
14
|
+
# * +sent_emails+ - Emails that have already been delivered
|
2
15
|
class EmailAddress < ActiveRecord::Base
|
3
16
|
has_emails
|
4
17
|
|
@@ -14,7 +27,10 @@ class EmailAddress < ActiveRecord::Base
|
|
14
27
|
find_or_create_by_name_and_spec(name, spec)
|
15
28
|
end
|
16
29
|
|
17
|
-
# Splits the given address into a name and spec
|
30
|
+
# Splits the given address into a name and spec. For example,
|
31
|
+
#
|
32
|
+
# EmailAddress.split_address("John Smith <john.smith@gmail.com") # => ["John Smith", "john.smith@gmail.com"]
|
33
|
+
# EmailAddress.split_address("john.smith@gmail.com") # => [nil, "john.smith@gmail.com"]
|
18
34
|
def split_address(address)
|
19
35
|
if match = /^(\S.*)\s+<(.*)>$/.match(address)
|
20
36
|
name = match[1]
|
@@ -1,7 +1,21 @@
|
|
1
1
|
module PluginAWeek #:nodoc:
|
2
2
|
module HasEmails
|
3
3
|
module Extensions #:nodoc:
|
4
|
+
# Adds support for queueing emails so that they can be procssed in the
|
5
|
+
# background. Emails are stored in the database using the Email ActiveRecord
|
6
|
+
# model.
|
4
7
|
#
|
8
|
+
# == Queueing mail
|
9
|
+
#
|
10
|
+
# Once a mailer action and template are defined, you can queue your message
|
11
|
+
# for background processing like so:
|
12
|
+
#
|
13
|
+
# Notifier.queue_signup_notification(john_smith) # Queues the email
|
14
|
+
#
|
15
|
+
# If you were to deliver the mail immediately, the normal process would be
|
16
|
+
# used like so:
|
17
|
+
#
|
18
|
+
# Notifier.deliver_signup_notification(john_smith) # Delivers the email
|
5
19
|
module ActionMailer
|
6
20
|
def self.included(base) #:nodoc:
|
7
21
|
base.class_eval do
|
@@ -9,7 +23,7 @@ module PluginAWeek #:nodoc:
|
|
9
23
|
cattr_accessor :default_subject_prefix
|
10
24
|
|
11
25
|
# Specify the prefix to use for the subject. This defaults to the
|
12
|
-
# +default_subject_prefix+ specified for
|
26
|
+
# +default_subject_prefix+ specified for ActionMailer::Base.
|
13
27
|
adv_attr_accessor :subject_prefix
|
14
28
|
|
15
29
|
include PluginAWeek::HasEmails::Extensions::ActionMailer::InstanceMethods
|
data/lib/has_emails.rb
CHANGED
@@ -24,11 +24,9 @@ module PluginAWeek #:nodoc:
|
|
24
24
|
# email = user.emails.build
|
25
25
|
# email.subject = 'Hello'
|
26
26
|
# email.body = 'How are you?'
|
27
|
-
# email.to
|
27
|
+
# email.to EmailAddress.find(456)
|
28
28
|
# email.save!
|
29
29
|
# email.deliver!
|
30
|
-
#
|
31
|
-
# Alternatively,
|
32
30
|
def has_emails
|
33
31
|
has_many :emails,
|
34
32
|
:as => :sender,
|
@@ -47,12 +45,14 @@ module PluginAWeek #:nodoc:
|
|
47
45
|
end
|
48
46
|
|
49
47
|
module InstanceMethods
|
50
|
-
# Composed emails that have not yet been sent
|
48
|
+
# Composed emails that have not yet been sent. These consists of all
|
49
|
+
# emails that are currently in the "unsent" state.
|
51
50
|
def unsent_emails
|
52
51
|
emails.with_state('unsent')
|
53
52
|
end
|
54
53
|
|
55
|
-
# Composed emails that have already been sent
|
54
|
+
# Composed emails that have already been sent. These consist of all emails
|
55
|
+
# that are currently in the "queued" or "sent states.
|
56
56
|
def sent_emails
|
57
57
|
emails.with_states(%w(queued sent))
|
58
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_emails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Pfeifer
|
@@ -9,20 +9,22 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-09-07 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: has_messages
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
20
21
|
- - ">="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.1.
|
23
|
+
version: 0.1.3
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: validates_as_email_address
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
@@ -58,7 +60,6 @@ files:
|
|
58
60
|
- test/app_root/db/migrate
|
59
61
|
- test/app_root/db/migrate/001_migrate_has_messages_to_version_2.rb
|
60
62
|
- test/app_root/db/migrate/002_migrate_has_emails_to_version_1.rb
|
61
|
-
- test/app_root/log
|
62
63
|
- test/functional
|
63
64
|
- test/functional/has_emails_test.rb
|
64
65
|
- test/test_helper.rb
|
@@ -94,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
95
|
requirements: []
|
95
96
|
|
96
97
|
rubyforge_project: pluginaweek
|
97
|
-
rubygems_version: 1.
|
98
|
+
rubygems_version: 1.2.0
|
98
99
|
signing_key:
|
99
100
|
specification_version: 2
|
100
101
|
summary: Demonstrates a reference implementation for sending emails with logging and asynchronous support.
|