actionmailer 4.2.0.beta1 → 4.2.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -6
- data/README.rdoc +3 -3
- data/lib/action_mailer/base.rb +18 -6
- data/lib/action_mailer/delivery_job.rb +2 -2
- data/lib/action_mailer/gem_version.rb +2 -2
- data/lib/action_mailer/mail_helper.rb +1 -1
- data/lib/action_mailer/message_delivery.rb +76 -17
- data/lib/action_mailer/railtie.rb +1 -0
- data/lib/action_mailer/test_helper.rb +6 -6
- metadata +22 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0bc83dd8e3d6e0dc2a2c465cec4353f5b5f38b21
|
4
|
+
data.tar.gz: 2d58f9767f0129b86e0b55e8efbc5de107e0e198
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c256f706c7a3e161616067951e18fe8b40492d80888aedcee325063042602e06b807ce3cb780fe278e6d17a4d5bdae371d2687ebe37f6483a02f035588db1cfe
|
7
|
+
data.tar.gz: 38e1ad4db887bf5b561b40a8dceefadee960c1f1f1ac6c427bba146cfd8e21720257789569e9c901740171135e4a230ec542cf2454332c637d5c4adad21453be
|
data/CHANGELOG.md
CHANGED
@@ -1,11 +1,19 @@
|
|
1
|
-
*
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
* Attachments can be added while rendering the mail template.
|
2
|
+
|
3
|
+
Fixes #16974.
|
4
|
+
|
5
|
+
*Christian Felder*
|
6
|
+
|
7
|
+
* Added `#deliver_later`, `#deliver_now` and deprecate `#deliver` in favour of
|
8
|
+
`#deliver_now`. `#deliver_later` will enqueue a job to render and deliver
|
9
|
+
the mail instead of delivering it right at that moment. The job is enqueued
|
10
|
+
using the new Active Job framework in Rails, and will use whatever queue is
|
11
|
+
configured for Rails.
|
12
|
+
|
5
13
|
*DHH/Abdelkader Boudih/Cristian Bica*
|
6
14
|
|
7
|
-
* Make ActionMailer::Previews methods class methods. Previously they were
|
8
|
-
instance methods and ActionMailer tries to render a message when they
|
15
|
+
* Make `ActionMailer::Previews` methods class methods. Previously they were
|
16
|
+
instance methods and `ActionMailer` tries to render a message when they
|
9
17
|
are called.
|
10
18
|
|
11
19
|
*Cristian Bica*
|
data/README.rdoc
CHANGED
@@ -65,12 +65,12 @@ In order to send mails, you simply call the method and then call +deliver+ on th
|
|
65
65
|
|
66
66
|
Calling the method returns a Mail Message object:
|
67
67
|
|
68
|
-
message = Notifier.welcome("david@loudthinking.com")
|
69
|
-
message.
|
68
|
+
message = Notifier.welcome("david@loudthinking.com") # => Returns a Mail::Message object
|
69
|
+
message.deliver_now # => delivers the email
|
70
70
|
|
71
71
|
Or you can just chain the methods together like:
|
72
72
|
|
73
|
-
Notifier.welcome("david@loudthinking.com").
|
73
|
+
Notifier.welcome("david@loudthinking.com").deliver_now # Creates the email and sends it immediately
|
74
74
|
|
75
75
|
== Setting defaults
|
76
76
|
|
data/lib/action_mailer/base.rb
CHANGED
@@ -138,9 +138,20 @@ module ActionMailer
|
|
138
138
|
# Once a mailer action and template are defined, you can deliver your message or create it and save it
|
139
139
|
# for delivery later:
|
140
140
|
#
|
141
|
-
# Notifier.welcome(
|
142
|
-
# mail = Notifier.welcome(
|
143
|
-
# mail.
|
141
|
+
# Notifier.welcome(User.first).deliver_now # sends the email
|
142
|
+
# mail = Notifier.welcome(User.first) # => an ActionMailer::MessageDelivery object
|
143
|
+
# mail.deliver_now # sends the email
|
144
|
+
#
|
145
|
+
# The <tt>ActionMailer::MessageDelivery</tt> class is a wrapper around a <tt>Mail::Message</tt> object. If
|
146
|
+
# you want direct access to the <tt>Mail::Message</tt> object you can call the <tt>message</tt> method on
|
147
|
+
# the <tt>ActionMailer::MessageDelivery</tt> object.
|
148
|
+
#
|
149
|
+
# Notifier.welcome(User.first).message # => a Mail::Message object
|
150
|
+
#
|
151
|
+
# Action Mailer is nicely integrated with Active Job so you can send emails in the background (example: outside
|
152
|
+
# of the request-response cycle, so the user doesn't have to wait on it):
|
153
|
+
#
|
154
|
+
# Notifier.welcome(User.first).deliver_later # enqueue the email sending to Active Job
|
144
155
|
#
|
145
156
|
# You never instantiate your mailer class. Rather, you just call the method you defined on the class itself.
|
146
157
|
#
|
@@ -322,8 +333,8 @@ module ActionMailer
|
|
322
333
|
# end
|
323
334
|
#
|
324
335
|
# Methods must return a <tt>Mail::Message</tt> object which can be generated by calling the mailer
|
325
|
-
# method without the additional <tt>
|
326
|
-
# directory can be configured using the <tt>preview_path</tt> option which has a default
|
336
|
+
# method without the additional <tt>deliver_now</tt> / <tt>deliver_later</tt>. The location of the
|
337
|
+
# mailer previews directory can be configured using the <tt>preview_path</tt> option which has a default
|
327
338
|
# of <tt>test/mailers/previews</tt>:
|
328
339
|
#
|
329
340
|
# config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
|
@@ -764,7 +775,6 @@ module ActionMailer
|
|
764
775
|
def mail(headers = {}, &block)
|
765
776
|
return @_message if @_mail_was_called && headers.blank? && !block
|
766
777
|
|
767
|
-
@_mail_was_called = true
|
768
778
|
m = @_message
|
769
779
|
|
770
780
|
# At the beginning, do not consider class default for content_type
|
@@ -792,6 +802,8 @@ module ActionMailer
|
|
792
802
|
|
793
803
|
# Render the templates and blocks
|
794
804
|
responses = collect_responses(headers, &block)
|
805
|
+
@_mail_was_called = true
|
806
|
+
|
795
807
|
create_parts_from_responses(m, responses)
|
796
808
|
|
797
809
|
# Setup content type, reapply charset and handle parts order
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'active_job'
|
2
2
|
|
3
3
|
module ActionMailer
|
4
|
-
class DeliveryJob < ActiveJob::Base
|
4
|
+
class DeliveryJob < ActiveJob::Base #:nodoc:
|
5
5
|
queue_as :mailers
|
6
6
|
|
7
|
-
def perform(mailer, mail_method, delivery_method, *args)
|
7
|
+
def perform(mailer, mail_method, delivery_method, *args) #:nodoc#
|
8
8
|
mailer.constantize.public_send(mail_method, *args).send(delivery_method)
|
9
9
|
end
|
10
10
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ActionMailer
|
2
|
-
# Returns the version of the currently loaded
|
2
|
+
# Returns the version of the currently loaded Action Mailer as a <tt>Gem::Version</tt>
|
3
3
|
def self.gem_version
|
4
4
|
Gem::Version.new VERSION::STRING
|
5
5
|
end
|
@@ -8,7 +8,7 @@ module ActionMailer
|
|
8
8
|
MAJOR = 4
|
9
9
|
MINOR = 2
|
10
10
|
TINY = 0
|
11
|
-
PRE = "
|
11
|
+
PRE = "beta2"
|
12
12
|
|
13
13
|
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
14
14
|
end
|
@@ -1,45 +1,104 @@
|
|
1
1
|
require 'delegate'
|
2
2
|
|
3
3
|
module ActionMailer
|
4
|
+
|
5
|
+
# The <tt>ActionMailer::MessageDelivery</tt> class is used by
|
6
|
+
# <tt>ActionMailer::Base</tt> when creating a new mailer.
|
7
|
+
# <tt>MessageDelivery</tt> is a wrapper (+Delegator+ subclass) around a lazy
|
8
|
+
# created <tt>Mail::Message</tt>. You can get direct access to the
|
9
|
+
# <tt>Mail::Message</tt>, deliver the email or schedule the email to be sent
|
10
|
+
# through Active Job.
|
11
|
+
#
|
12
|
+
# Notifier.welcome(User.first) # an ActionMailer::MessageDelivery object
|
13
|
+
# Notifier.welcome(User.first).deliver_now # sends the email
|
14
|
+
# Notifier.welcome(User.first).deliver_later # enqueue email delivery as a job through Active Job
|
15
|
+
# Notifier.welcome(User.first).message # a Mail::Message object
|
4
16
|
class MessageDelivery < Delegator
|
5
|
-
def initialize(mailer, mail_method, *args)
|
17
|
+
def initialize(mailer, mail_method, *args) #:nodoc:
|
6
18
|
@mailer = mailer
|
7
19
|
@mail_method = mail_method
|
8
20
|
@args = args
|
9
21
|
end
|
10
22
|
|
11
|
-
def __getobj__
|
23
|
+
def __getobj__ #:nodoc:
|
12
24
|
@obj ||= @mailer.send(:new, @mail_method, *@args).message
|
13
25
|
end
|
14
26
|
|
15
|
-
def __setobj__(obj)
|
27
|
+
def __setobj__(obj) #:nodoc:
|
16
28
|
@obj = obj
|
17
29
|
end
|
18
30
|
|
19
|
-
|
31
|
+
# Returns the Mail::Message object
|
32
|
+
def message
|
20
33
|
__getobj__
|
21
34
|
end
|
22
35
|
|
36
|
+
# Enqueues the email to be delivered through Active Job. When the
|
37
|
+
# job runs it will send the email using +deliver_now!+. That means
|
38
|
+
# that the message will be sent bypassing checking +perform_deliveries+
|
39
|
+
# and +raise_delivery_errors+, so use with caution.
|
40
|
+
#
|
41
|
+
# Notifier.welcome(User.first).deliver_later!
|
42
|
+
# Notifier.welcome(User.first).deliver_later!(wait: 1.hour)
|
43
|
+
# Notifier.welcome(User.first).deliver_later!(wait_until: 10.hours.from_now)
|
44
|
+
#
|
45
|
+
# Options:
|
46
|
+
#
|
47
|
+
# * <tt>:wait</tt> - Enqueue the email to be delivered with a delay
|
48
|
+
# * <tt>:wait_until</tt> - Enqueue the email to be delivered at (after) a specific date / time
|
23
49
|
def deliver_later!(options={})
|
24
|
-
enqueue_delivery :
|
50
|
+
enqueue_delivery :deliver_now!, options
|
25
51
|
end
|
26
52
|
|
53
|
+
# Enqueues the email to be delivered through Active Job. When the
|
54
|
+
# job runs it will send the email using +deliver_now+.
|
55
|
+
#
|
56
|
+
# Notifier.welcome(User.first).deliver_later
|
57
|
+
# Notifier.welcome(User.first).deliver_later(wait: 1.hour)
|
58
|
+
# Notifier.welcome(User.first).deliver_later(wait_until: 10.hours.from_now)
|
59
|
+
#
|
60
|
+
# Options:
|
61
|
+
#
|
62
|
+
# * <tt>:wait</tt> - Enqueue the email to be delivered with a delay
|
63
|
+
# * <tt>:wait_until</tt> - Enqueue the email to be delivered at (after) a specific date / time
|
27
64
|
def deliver_later(options={})
|
28
|
-
enqueue_delivery :
|
65
|
+
enqueue_delivery :deliver_now, options
|
66
|
+
end
|
67
|
+
|
68
|
+
# Delivers an email without checking +perform_deliveries+ and +raise_delivery_errors+,
|
69
|
+
# so use with caution.
|
70
|
+
#
|
71
|
+
# Notifier.welcome(User.first).deliver_now!
|
72
|
+
#
|
73
|
+
def deliver_now!
|
74
|
+
message.deliver!
|
75
|
+
end
|
76
|
+
|
77
|
+
# Delivers an email:
|
78
|
+
#
|
79
|
+
# Notifier.welcome(User.first).deliver_now
|
80
|
+
#
|
81
|
+
def deliver_now
|
82
|
+
message.deliver
|
83
|
+
end
|
84
|
+
|
85
|
+
def deliver! #:nodoc:
|
86
|
+
ActiveSupport::Deprecation.warn "#deliver! is deprecated and will be removed in Rails 5. " \
|
87
|
+
"Use #deliver_now! to deliver immediately or #deliver_later! to deliver through Active Job."
|
88
|
+
deliver_now!
|
89
|
+
end
|
90
|
+
|
91
|
+
def deliver #:nodoc:
|
92
|
+
ActiveSupport::Deprecation.warn "#deliver is deprecated and will be removed in Rails 5. " \
|
93
|
+
"Use #deliver_now to deliver immediately or #deliver_later to deliver through Active Job."
|
94
|
+
deliver_now
|
29
95
|
end
|
30
96
|
|
31
97
|
private
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
enqueue_method = :enqueue_at
|
37
|
-
args.unshift options[:at]
|
38
|
-
elsif options[:in]
|
39
|
-
enqueue_method = :enqueue_in
|
40
|
-
args.unshift options[:in]
|
98
|
+
|
99
|
+
def enqueue_delivery(delivery_method, options={})
|
100
|
+
args = @mailer.name, @mail_method.to_s, delivery_method.to_s, *@args
|
101
|
+
ActionMailer::DeliveryJob.set(options).perform_later(*args)
|
41
102
|
end
|
42
|
-
ActionMailer::DeliveryJob.send enqueue_method, *args
|
43
|
-
end
|
44
103
|
end
|
45
104
|
end
|
@@ -6,9 +6,9 @@ module ActionMailer
|
|
6
6
|
#
|
7
7
|
# def test_emails
|
8
8
|
# assert_emails 0
|
9
|
-
# ContactMailer.welcome.
|
9
|
+
# ContactMailer.welcome.deliver_now
|
10
10
|
# assert_emails 1
|
11
|
-
# ContactMailer.welcome.
|
11
|
+
# ContactMailer.welcome.deliver_now
|
12
12
|
# assert_emails 2
|
13
13
|
# end
|
14
14
|
#
|
@@ -17,12 +17,12 @@ module ActionMailer
|
|
17
17
|
#
|
18
18
|
# def test_emails_again
|
19
19
|
# assert_emails 1 do
|
20
|
-
# ContactMailer.welcome.
|
20
|
+
# ContactMailer.welcome.deliver_now
|
21
21
|
# end
|
22
22
|
#
|
23
23
|
# assert_emails 2 do
|
24
|
-
# ContactMailer.welcome.
|
25
|
-
# ContactMailer.welcome.
|
24
|
+
# ContactMailer.welcome.deliver_now
|
25
|
+
# ContactMailer.welcome.deliver_now
|
26
26
|
# end
|
27
27
|
# end
|
28
28
|
def assert_emails(number)
|
@@ -40,7 +40,7 @@ module ActionMailer
|
|
40
40
|
#
|
41
41
|
# def test_emails
|
42
42
|
# assert_no_emails
|
43
|
-
# ContactMailer.welcome.
|
43
|
+
# ContactMailer.welcome.deliver_now
|
44
44
|
# assert_emails 1
|
45
45
|
# end
|
46
46
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionmailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.0.
|
4
|
+
version: 4.2.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -16,28 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.2.0.
|
19
|
+
version: 4.2.0.beta2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.2.0.
|
26
|
+
version: 4.2.0.beta2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: actionview
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.2.0.
|
33
|
+
version: 4.2.0.beta2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.2.0.
|
40
|
+
version: 4.2.0.beta2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activejob
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 4.2.0.beta2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.2.0.beta2
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: mail
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
version: '1.0'
|
68
82
|
- - ">="
|
69
83
|
- !ruby/object:Gem::Version
|
70
|
-
version: 1.0.
|
84
|
+
version: 1.0.3
|
71
85
|
type: :runtime
|
72
86
|
prerelease: false
|
73
87
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -77,7 +91,7 @@ dependencies:
|
|
77
91
|
version: '1.0'
|
78
92
|
- - ">="
|
79
93
|
- !ruby/object:Gem::Version
|
80
|
-
version: 1.0.
|
94
|
+
version: 1.0.3
|
81
95
|
description: Email on Rails. Compose, deliver, receive, and test emails using the
|
82
96
|
familiar controller/view pattern. First-class support for multipart email and attachments.
|
83
97
|
email: david@loudthinking.com
|