actionmailer 2.2.3 → 2.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +19 -11
- data/MIT-LICENSE +1 -1
- data/Rakefile +1 -1
- data/lib/action_mailer.rb +24 -14
- data/lib/action_mailer/base.rb +30 -26
- data/lib/action_mailer/helpers.rb +2 -0
- data/lib/action_mailer/mail_helper.rb +0 -2
- data/lib/action_mailer/part.rb +6 -9
- data/lib/action_mailer/part_container.rb +5 -1
- data/lib/action_mailer/quoting.rb +1 -1
- data/lib/action_mailer/test_case.rb +1 -1
- data/lib/action_mailer/test_helper.rb +1 -0
- data/lib/action_mailer/utils.rb +0 -1
- data/lib/action_mailer/vendor/text-format-0.6.3/text/format.rb +1 -1
- data/lib/action_mailer/vendor/text_format.rb +10 -0
- data/lib/action_mailer/vendor/tmail.rb +17 -0
- data/lib/action_mailer/version.rb +2 -2
- data/test/abstract_unit.rb +12 -9
- data/test/asset_host_test.rb +54 -0
- data/test/fixtures/asset_host_mailer/email_with_asset.html.erb +1 -0
- data/test/mail_layout_test.rb +29 -1
- data/test/mail_service_test.rb +26 -8
- data/test/quoting_test.rb +4 -3
- data/test/test_helper_test.rb +5 -5
- metadata +28 -8
- data/lib/action_mailer/vendor.rb +0 -14
data/CHANGELOG
CHANGED
@@ -1,12 +1,20 @@
|
|
1
|
-
*2.2
|
1
|
+
*2.3.2 [Final] (March 15, 2009)*
|
2
2
|
|
3
|
-
|
3
|
+
* Fixed that ActionMailer should send correctly formatted Return-Path in MAIL FROM for SMTP #1842 [Matt Jones]
|
4
4
|
|
5
|
-
*
|
5
|
+
* Fixed RFC-2045 quoted-printable bug #1421 [squadette]
|
6
|
+
|
7
|
+
* Fixed that no body charset would be set when there are attachments present #740 [Paweł Kondzior]
|
8
|
+
|
9
|
+
|
10
|
+
*2.2.1 [RC2] (November 14th, 2008)*
|
6
11
|
|
7
12
|
* Turn on STARTTLS if it is available in Net::SMTP (added in Ruby 1.8.7) and the SMTP server supports it (This is required for Gmail's SMTP server) #1336 [Grant Hollingworth]
|
8
13
|
|
9
|
-
|
14
|
+
|
15
|
+
*2.2.0 [RC1] (October 24th, 2008)*
|
16
|
+
|
17
|
+
* Add layout functionality to mailers [Pratik Naik]
|
10
18
|
|
11
19
|
Mailer layouts behaves just like controller layouts, except layout names need to
|
12
20
|
have '_mailer' postfix for them to be automatically picked up.
|
@@ -18,7 +26,7 @@ Version bump.
|
|
18
26
|
|
19
27
|
* Less verbose mail logging: just recipients for :info log level; the whole email for :debug only. #8000 [iaddict, Tarmo Tänav]
|
20
28
|
|
21
|
-
* Updated TMail to version 1.2.1 [
|
29
|
+
* Updated TMail to version 1.2.1 [Mikel Lindsaar]
|
22
30
|
|
23
31
|
* Fixed that you don't have to call super in ActionMailer::TestCase#setup #10406 [jamesgolick]
|
24
32
|
|
@@ -30,7 +38,7 @@ Version bump.
|
|
30
38
|
|
31
39
|
*2.0.1* (December 7th, 2007)
|
32
40
|
|
33
|
-
* Update ActionMailer so it treats ActionView the same way that ActionController does. Closes #10244 [
|
41
|
+
* Update ActionMailer so it treats ActionView the same way that ActionController does. Closes #10244 [Rick Olson]
|
34
42
|
|
35
43
|
* Pass the template_root as an array as ActionView's view_path
|
36
44
|
* Request templates with the "#{mailer_name}/#{action}" as opposed to just "#{action}"
|
@@ -39,11 +47,11 @@ Version bump.
|
|
39
47
|
|
40
48
|
* Update README to use new smtp settings configuration API. Closes #10060 [psq]
|
41
49
|
|
42
|
-
* Allow ActionMailer subclasses to individually set their delivery method (so two subclasses can have different delivery methods) #10033 [
|
50
|
+
* Allow ActionMailer subclasses to individually set their delivery method (so two subclasses can have different delivery methods) #10033 [Zach Dennis]
|
43
51
|
|
44
|
-
* Update TMail to v1.1.0. Use an updated version of TMail if available. [
|
52
|
+
* Update TMail to v1.1.0. Use an updated version of TMail if available. [Mikel Lindsaar]
|
45
53
|
|
46
|
-
* Introduce a new base test class for testing Mailers. ActionMailer::TestCase [
|
54
|
+
* Introduce a new base test class for testing Mailers. ActionMailer::TestCase [Michael Koziarski]
|
47
55
|
|
48
56
|
* Fix silent failure of rxml templates. #9879 [jstewart]
|
49
57
|
|
@@ -78,7 +86,7 @@ Version bump.
|
|
78
86
|
|
79
87
|
*1.3.2* (February 5th, 2007)
|
80
88
|
|
81
|
-
* Deprecate server_settings renaming it to smtp_settings, add sendmail_settings to allow you to override the arguments to and location of the sendmail executable. [
|
89
|
+
* Deprecate server_settings renaming it to smtp_settings, add sendmail_settings to allow you to override the arguments to and location of the sendmail executable. [Michael Koziarski]
|
82
90
|
|
83
91
|
|
84
92
|
*1.3.1* (January 16th, 2007)
|
@@ -98,7 +106,7 @@ Version bump.
|
|
98
106
|
|
99
107
|
* Tighten rescue clauses. #5985 [james@grayproductions.net]
|
100
108
|
|
101
|
-
* Automatically included ActionController::UrlWriter, such that URL generation can happen within ActionMailer controllers. [
|
109
|
+
* Automatically included ActionController::UrlWriter, such that URL generation can happen within ActionMailer controllers. [David Heinemeier Hansson]
|
102
110
|
|
103
111
|
* Replace Reloadable with Reloadable::Deprecated. [Nicholas Seckar]
|
104
112
|
|
data/MIT-LICENSE
CHANGED
data/Rakefile
CHANGED
@@ -55,7 +55,7 @@ spec = Gem::Specification.new do |s|
|
|
55
55
|
s.rubyforge_project = "actionmailer"
|
56
56
|
s.homepage = "http://www.rubyonrails.org"
|
57
57
|
|
58
|
-
s.add_dependency('actionpack', '= 2.2
|
58
|
+
s.add_dependency('actionpack', '= 2.3.2' + PKG_BUILD)
|
59
59
|
|
60
60
|
s.has_rdoc = true
|
61
61
|
s.requirements << 'none'
|
data/lib/action_mailer.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2004-
|
2
|
+
# Copyright (c) 2004-2009 David Heinemeier Hansson
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -31,22 +31,32 @@ rescue LoadError
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
require '
|
35
|
-
require 'tmail'
|
34
|
+
require 'action_view'
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
require 'action_mailer/test_helper'
|
36
|
+
module ActionMailer
|
37
|
+
def self.load_all!
|
38
|
+
[Base, Part, ::Text::Format, ::Net::SMTP]
|
39
|
+
end
|
42
40
|
|
43
|
-
|
41
|
+
autoload :AdvAttrAccessor, 'action_mailer/adv_attr_accessor'
|
42
|
+
autoload :Base, 'action_mailer/base'
|
43
|
+
autoload :Helpers, 'action_mailer/helpers'
|
44
|
+
autoload :Part, 'action_mailer/part'
|
45
|
+
autoload :PartContainer, 'action_mailer/part_container'
|
46
|
+
autoload :Quoting, 'action_mailer/quoting'
|
47
|
+
autoload :TestCase, 'action_mailer/test_case'
|
48
|
+
autoload :TestHelper, 'action_mailer/test_helper'
|
49
|
+
autoload :Utils, 'action_mailer/utils'
|
50
|
+
end
|
44
51
|
|
45
|
-
|
46
|
-
|
47
|
-
|
52
|
+
module Text
|
53
|
+
autoload :Format, 'action_mailer/vendor/text_format'
|
54
|
+
end
|
48
55
|
|
49
|
-
|
56
|
+
module Net
|
57
|
+
autoload :SMTP, 'net/smtp'
|
50
58
|
end
|
51
59
|
|
52
|
-
|
60
|
+
autoload :MailHelper, 'action_mailer/mail_helper'
|
61
|
+
|
62
|
+
require 'action_mailer/vendor/tmail'
|
data/lib/action_mailer/base.rb
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
require 'action_mailer/adv_attr_accessor'
|
2
|
-
require 'action_mailer/part'
|
3
|
-
require 'action_mailer/part_container'
|
4
|
-
require 'action_mailer/utils'
|
5
|
-
require 'tmail/net'
|
6
|
-
|
7
1
|
module ActionMailer #:nodoc:
|
8
2
|
# Action Mailer allows you to send email from your application using a mailer model and views.
|
9
3
|
#
|
@@ -23,6 +17,7 @@ module ActionMailer #:nodoc:
|
|
23
17
|
# class Notifier < ActionMailer::Base
|
24
18
|
# def signup_notification(recipient)
|
25
19
|
# recipients recipient.email_address_with_name
|
20
|
+
# bcc ["bcc@example.com", "Order Watcher <watcher@example.com>"]
|
26
21
|
# from "system@example.com"
|
27
22
|
# subject "New account information"
|
28
23
|
# body :account => recipient
|
@@ -218,6 +213,8 @@ module ActionMailer #:nodoc:
|
|
218
213
|
# * <tt>:password</tt> - If your mail server requires authentication, set the password in this setting.
|
219
214
|
# * <tt>:authentication</tt> - If your mail server requires authentication, you need to specify the authentication type here.
|
220
215
|
# This is a symbol and one of <tt>:plain</tt>, <tt>:login</tt>, <tt>:cram_md5</tt>.
|
216
|
+
# * <tt>:enable_starttls_auto</tt> - When set to true, detects if STARTTLS is enabled in your SMTP server and starts to use it.
|
217
|
+
# It works only on Ruby >= 1.8.7 and Ruby >= 1.9. Default is true.
|
221
218
|
#
|
222
219
|
# * <tt>sendmail_settings</tt> - Allows you to override options for the <tt>:sendmail</tt> delivery method.
|
223
220
|
# * <tt>:location</tt> - The location of the sendmail executable. Defaults to <tt>/usr/sbin/sendmail</tt>.
|
@@ -235,17 +232,20 @@ module ActionMailer #:nodoc:
|
|
235
232
|
#
|
236
233
|
# * <tt>default_charset</tt> - The default charset used for the body and to encode the subject. Defaults to UTF-8. You can also
|
237
234
|
# pick a different charset from inside a method with +charset+.
|
235
|
+
#
|
238
236
|
# * <tt>default_content_type</tt> - The default content type used for the main part of the message. Defaults to "text/plain". You
|
239
237
|
# can also pick a different content type from inside a method with +content_type+.
|
238
|
+
#
|
240
239
|
# * <tt>default_mime_version</tt> - The default mime version used for the message. Defaults to <tt>1.0</tt>. You
|
241
240
|
# can also pick a different value from inside a method with +mime_version+.
|
241
|
+
#
|
242
242
|
# * <tt>default_implicit_parts_order</tt> - When a message is built implicitly (i.e. multiple parts are assembled from templates
|
243
243
|
# which specify the content type in their filenames) this variable controls how the parts are ordered. Defaults to
|
244
244
|
# <tt>["text/html", "text/enriched", "text/plain"]</tt>. Items that appear first in the array have higher priority in the mail client
|
245
245
|
# and appear last in the mime encoded message. You can also pick a different order from inside a method with
|
246
246
|
# +implicit_parts_order+.
|
247
247
|
class Base
|
248
|
-
include AdvAttrAccessor, PartContainer
|
248
|
+
include AdvAttrAccessor, PartContainer, Quoting, Utils
|
249
249
|
if Object.const_defined?(:ActionController)
|
250
250
|
include ActionController::UrlWriter
|
251
251
|
include ActionController::Layout
|
@@ -254,15 +254,18 @@ module ActionMailer #:nodoc:
|
|
254
254
|
private_class_method :new #:nodoc:
|
255
255
|
|
256
256
|
class_inheritable_accessor :view_paths
|
257
|
+
self.view_paths = []
|
258
|
+
|
257
259
|
cattr_accessor :logger
|
258
260
|
|
259
261
|
@@smtp_settings = {
|
260
|
-
:address
|
261
|
-
:port
|
262
|
-
:domain
|
263
|
-
:user_name
|
264
|
-
:password
|
265
|
-
:authentication
|
262
|
+
:address => "localhost",
|
263
|
+
:port => 25,
|
264
|
+
:domain => 'localhost.localdomain',
|
265
|
+
:user_name => nil,
|
266
|
+
:password => nil,
|
267
|
+
:authentication => nil,
|
268
|
+
:enable_starttls_auto => true,
|
266
269
|
}
|
267
270
|
cattr_accessor :smtp_settings
|
268
271
|
|
@@ -426,12 +429,6 @@ module ActionMailer #:nodoc:
|
|
426
429
|
new.deliver!(mail)
|
427
430
|
end
|
428
431
|
|
429
|
-
def register_template_extension(extension)
|
430
|
-
ActiveSupport::Deprecation.warn(
|
431
|
-
"ActionMailer::Base.register_template_extension has been deprecated." +
|
432
|
-
"Use ActionView::Template.register_template_handler instead", caller)
|
433
|
-
end
|
434
|
-
|
435
432
|
def template_root
|
436
433
|
self.view_paths && self.view_paths.first
|
437
434
|
end
|
@@ -482,7 +479,7 @@ module ActionMailer #:nodoc:
|
|
482
479
|
)
|
483
480
|
end
|
484
481
|
unless @parts.empty?
|
485
|
-
@content_type = "multipart/alternative"
|
482
|
+
@content_type = "multipart/alternative" if @content_type !~ /^multipart/
|
486
483
|
@parts = sort_parts(@parts, @implicit_parts_order)
|
487
484
|
end
|
488
485
|
end
|
@@ -581,7 +578,9 @@ module ActionMailer #:nodoc:
|
|
581
578
|
end
|
582
579
|
|
583
580
|
def candidate_for_layout?(options)
|
584
|
-
|
581
|
+
!self.view_paths.find_template(default_template_name, default_template_format).exempt_from_layout?
|
582
|
+
rescue ActionView::MissingTemplate
|
583
|
+
return true
|
585
584
|
end
|
586
585
|
|
587
586
|
def template_root
|
@@ -597,7 +596,7 @@ module ActionMailer #:nodoc:
|
|
597
596
|
end
|
598
597
|
|
599
598
|
def initialize_template_class(assigns)
|
600
|
-
template = ActionView::Base.new(view_paths, assigns, self)
|
599
|
+
template = ActionView::Base.new(self.class.view_paths, assigns, self)
|
601
600
|
template.template_format = default_template_format
|
602
601
|
template
|
603
602
|
end
|
@@ -648,11 +647,11 @@ module ActionMailer #:nodoc:
|
|
648
647
|
|
649
648
|
if @parts.empty?
|
650
649
|
m.set_content_type(real_content_type, nil, ctype_attrs)
|
651
|
-
m.body =
|
650
|
+
m.body = normalize_new_lines(body)
|
652
651
|
else
|
653
652
|
if String === body
|
654
653
|
part = TMail::Mail.new
|
655
|
-
part.body =
|
654
|
+
part.body = normalize_new_lines(body)
|
656
655
|
part.set_content_type(real_content_type, nil, ctype_attrs)
|
657
656
|
part.set_content_disposition "inline"
|
658
657
|
m.parts << part
|
@@ -675,10 +674,10 @@ module ActionMailer #:nodoc:
|
|
675
674
|
def perform_delivery_smtp(mail)
|
676
675
|
destinations = mail.destinations
|
677
676
|
mail.ready_to_send
|
678
|
-
sender = mail['return-path'] || mail.from
|
677
|
+
sender = (mail['return-path'] && mail['return-path'].spec) || mail.from
|
679
678
|
|
680
679
|
smtp = Net::SMTP.new(smtp_settings[:address], smtp_settings[:port])
|
681
|
-
smtp.enable_starttls_auto if smtp.respond_to?(:enable_starttls_auto)
|
680
|
+
smtp.enable_starttls_auto if smtp_settings[:enable_starttls_auto] && smtp.respond_to?(:enable_starttls_auto)
|
682
681
|
smtp.start(smtp_settings[:domain], smtp_settings[:user_name], smtp_settings[:password],
|
683
682
|
smtp_settings[:authentication]) do |smtp|
|
684
683
|
smtp.sendmail(mail.encoded, sender, destinations)
|
@@ -698,4 +697,9 @@ module ActionMailer #:nodoc:
|
|
698
697
|
deliveries << mail
|
699
698
|
end
|
700
699
|
end
|
700
|
+
|
701
|
+
Base.class_eval do
|
702
|
+
include Helpers
|
703
|
+
helper MailHelper
|
704
|
+
end
|
701
705
|
end
|
data/lib/action_mailer/part.rb
CHANGED
@@ -1,15 +1,10 @@
|
|
1
|
-
require 'action_mailer/adv_attr_accessor'
|
2
|
-
require 'action_mailer/part_container'
|
3
|
-
require 'action_mailer/utils'
|
4
|
-
|
5
1
|
module ActionMailer
|
6
2
|
# Represents a subpart of an email message. It shares many similar
|
7
3
|
# attributes of ActionMailer::Base. Although you can create parts manually
|
8
4
|
# and add them to the +parts+ list of the mailer, it is easier
|
9
5
|
# to use the helper methods in ActionMailer::PartContainer.
|
10
6
|
class Part
|
11
|
-
include
|
12
|
-
include ActionMailer::PartContainer
|
7
|
+
include AdvAttrAccessor, PartContainer, Utils
|
13
8
|
|
14
9
|
# Represents the body of the part, as a string. This should not be a
|
15
10
|
# Hash (like ActionMailer::Base), but if you want a template to be rendered
|
@@ -64,7 +59,7 @@ module ActionMailer
|
|
64
59
|
when "base64" then
|
65
60
|
part.body = TMail::Base64.folding_encode(body)
|
66
61
|
when "quoted-printable"
|
67
|
-
part.body = [
|
62
|
+
part.body = [normalize_new_lines(body)].pack("M*")
|
68
63
|
else
|
69
64
|
part.body = body
|
70
65
|
end
|
@@ -93,7 +88,10 @@ module ActionMailer
|
|
93
88
|
part.parts << prt
|
94
89
|
end
|
95
90
|
|
96
|
-
|
91
|
+
if real_content_type =~ /multipart/
|
92
|
+
ctype_attrs.delete 'charset'
|
93
|
+
part.set_content_type(real_content_type, nil, ctype_attrs)
|
94
|
+
end
|
97
95
|
end
|
98
96
|
|
99
97
|
headers.each { |k,v| part[k] = v }
|
@@ -102,7 +100,6 @@ module ActionMailer
|
|
102
100
|
end
|
103
101
|
|
104
102
|
private
|
105
|
-
|
106
103
|
def squish(values={})
|
107
104
|
values.delete_if { |k,v| v.nil? }
|
108
105
|
end
|
@@ -41,7 +41,11 @@ module ActionMailer
|
|
41
41
|
private
|
42
42
|
|
43
43
|
def parse_content_type(defaults=nil)
|
44
|
-
|
44
|
+
if content_type.blank?
|
45
|
+
return defaults ?
|
46
|
+
[ defaults.content_type, { 'charset' => defaults.charset } ] :
|
47
|
+
[ nil, {} ]
|
48
|
+
end
|
45
49
|
ctype, *attrs = content_type.split(/;\s*/)
|
46
50
|
attrs = attrs.inject({}) { |h,s| k,v = s.split(/=/, 2); h[k] = v; h }
|
47
51
|
[ctype, {"charset" => charset || defaults && defaults.charset}.merge(attrs)]
|
@@ -12,7 +12,7 @@ module ActionMailer
|
|
12
12
|
# account multi-byte characters (if executing with $KCODE="u", for instance)
|
13
13
|
def quoted_printable_encode(character)
|
14
14
|
result = ""
|
15
|
-
character.each_byte { |b| result << "=%
|
15
|
+
character.each_byte { |b| result << "=%02X" % b }
|
16
16
|
result
|
17
17
|
end
|
18
18
|
|
data/lib/action_mailer/utils.rb
CHANGED
@@ -1150,7 +1150,7 @@ if __FILE__ == $0
|
|
1150
1150
|
assert_equal(Text::Format::JUSTIFY, @format_o.format_style)
|
1151
1151
|
assert_match(/^of freedom, and that government of the people, by the people, for the$/,
|
1152
1152
|
@format_o.format(GETTYSBURG).split("\n")[-3])
|
1153
|
-
|
1153
|
+
assert_raise(ArgumentError) { @format_o.format_style = 33 }
|
1154
1154
|
end
|
1155
1155
|
|
1156
1156
|
def test_tag_paragraph
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Prefer gems to the bundled libs.
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
begin
|
5
|
+
gem 'tmail', '~> 1.2.3'
|
6
|
+
rescue Gem::LoadError
|
7
|
+
$:.unshift "#{File.dirname(__FILE__)}/tmail-1.2.3"
|
8
|
+
end
|
9
|
+
|
10
|
+
module TMail
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'tmail'
|
14
|
+
|
15
|
+
silence_warnings do
|
16
|
+
TMail::Encoder.const_set("MAX_LINE_LEN", 200)
|
17
|
+
end
|
data/test/abstract_unit.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'test/unit'
|
2
3
|
|
4
|
+
gem 'mocha', '>= 0.9.5'
|
5
|
+
require 'mocha'
|
6
|
+
|
3
7
|
$:.unshift "#{File.dirname(__FILE__)}/../lib"
|
4
8
|
$:.unshift "#{File.dirname(__FILE__)}/../../activesupport/lib"
|
5
9
|
$:.unshift "#{File.dirname(__FILE__)}/../../actionpack/lib"
|
@@ -9,8 +13,15 @@ require 'action_mailer/test_case'
|
|
9
13
|
# Show backtraces for deprecated behavior for quicker cleanup.
|
10
14
|
ActiveSupport::Deprecation.debug = true
|
11
15
|
|
16
|
+
# Bogus template processors
|
17
|
+
ActionView::Template.register_template_handler :haml, lambda { |template| "Look its HAML!".inspect }
|
18
|
+
ActionView::Template.register_template_handler :bak, lambda { |template| "Lame backup".inspect }
|
19
|
+
|
12
20
|
$:.unshift "#{File.dirname(__FILE__)}/fixtures/helpers"
|
13
|
-
|
21
|
+
|
22
|
+
ActionView::Base.cache_template_loading = true
|
23
|
+
FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures')
|
24
|
+
ActionMailer::Base.template_root = FIXTURE_LOAD_PATH
|
14
25
|
|
15
26
|
class MockSMTP
|
16
27
|
def self.deliveries
|
@@ -37,7 +48,6 @@ class Net::SMTP
|
|
37
48
|
end
|
38
49
|
|
39
50
|
def uses_gem(gem_name, test_name, version = '> 0')
|
40
|
-
require 'rubygems'
|
41
51
|
gem gem_name.to_s, version
|
42
52
|
require gem_name.to_s
|
43
53
|
yield
|
@@ -45,13 +55,6 @@ rescue LoadError
|
|
45
55
|
$stderr.puts "Skipping #{test_name} tests. `gem install #{gem_name}` and try again."
|
46
56
|
end
|
47
57
|
|
48
|
-
# Wrap tests that use Mocha and skip if unavailable.
|
49
|
-
unless defined? uses_mocha
|
50
|
-
def uses_mocha(test_name, &block)
|
51
|
-
uses_gem('mocha', test_name, '>= 0.5.5', &block)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
58
|
def set_delivery_method(delivery_method)
|
56
59
|
@old_delivery_method = ActionMailer::Base.delivery_method
|
57
60
|
ActionMailer::Base.delivery_method = delivery_method
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
|
3
|
+
class AssetHostMailer < ActionMailer::Base
|
4
|
+
def email_with_asset(recipient)
|
5
|
+
recipients recipient
|
6
|
+
subject "testing email containing asset path while asset_host is set"
|
7
|
+
from "tester@example.com"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class AssetHostTest < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
set_delivery_method :test
|
14
|
+
ActionMailer::Base.perform_deliveries = true
|
15
|
+
ActionMailer::Base.deliveries = []
|
16
|
+
|
17
|
+
@recipient = 'test@localhost'
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
restore_delivery_method
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_asset_host_as_string
|
25
|
+
ActionController::Base.asset_host = "http://www.example.com"
|
26
|
+
mail = AssetHostMailer.deliver_email_with_asset(@recipient)
|
27
|
+
assert_equal "<img alt=\"Somelogo\" src=\"http://www.example.com/images/somelogo.png\" />", mail.body.strip
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_asset_host_as_one_arguement_proc
|
31
|
+
ActionController::Base.asset_host = Proc.new { |source|
|
32
|
+
if source.starts_with?('/images')
|
33
|
+
"http://images.example.com"
|
34
|
+
else
|
35
|
+
"http://assets.example.com"
|
36
|
+
end
|
37
|
+
}
|
38
|
+
mail = AssetHostMailer.deliver_email_with_asset(@recipient)
|
39
|
+
assert_equal "<img alt=\"Somelogo\" src=\"http://images.example.com/images/somelogo.png\" />", mail.body.strip
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_asset_host_as_two_arguement_proc
|
43
|
+
ActionController::Base.asset_host = Proc.new {|source,request|
|
44
|
+
if request && request.ssl?
|
45
|
+
"https://www.example.com"
|
46
|
+
else
|
47
|
+
"http://www.example.com"
|
48
|
+
end
|
49
|
+
}
|
50
|
+
mail = nil
|
51
|
+
assert_nothing_raised { mail = AssetHostMailer.deliver_email_with_asset(@recipient) }
|
52
|
+
assert_equal "<img alt=\"Somelogo\" src=\"http://www.example.com/images/somelogo.png\" />", mail.body.strip
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= image_tag "somelogo.png" %>
|
data/test/mail_layout_test.rb
CHANGED
@@ -21,10 +21,12 @@ class AutoLayoutMailer < ActionMailer::Base
|
|
21
21
|
body render(:inline => "Hello, <%= @world %>", :layout => false, :body => { :world => "Earth" })
|
22
22
|
end
|
23
23
|
|
24
|
-
def multipart(recipient)
|
24
|
+
def multipart(recipient, type = nil)
|
25
25
|
recipients recipient
|
26
26
|
subject "You have a mail"
|
27
27
|
from "tester@example.com"
|
28
|
+
|
29
|
+
content_type(type) if type
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -64,6 +66,19 @@ class LayoutMailerTest < Test::Unit::TestCase
|
|
64
66
|
|
65
67
|
def test_should_pickup_multipart_layout
|
66
68
|
mail = AutoLayoutMailer.create_multipart(@recipient)
|
69
|
+
assert_equal "multipart/alternative", mail.content_type
|
70
|
+
assert_equal 2, mail.parts.size
|
71
|
+
|
72
|
+
assert_equal 'text/plain', mail.parts.first.content_type
|
73
|
+
assert_equal "text/plain layout - text/plain multipart", mail.parts.first.body
|
74
|
+
|
75
|
+
assert_equal 'text/html', mail.parts.last.content_type
|
76
|
+
assert_equal "Hello from layout text/html multipart", mail.parts.last.body
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_should_pickup_multipartmixed_layout
|
80
|
+
mail = AutoLayoutMailer.create_multipart(@recipient, "multipart/mixed")
|
81
|
+
assert_equal "multipart/mixed", mail.content_type
|
67
82
|
assert_equal 2, mail.parts.size
|
68
83
|
|
69
84
|
assert_equal 'text/plain', mail.parts.first.content_type
|
@@ -73,6 +88,19 @@ class LayoutMailerTest < Test::Unit::TestCase
|
|
73
88
|
assert_equal "Hello from layout text/html multipart", mail.parts.last.body
|
74
89
|
end
|
75
90
|
|
91
|
+
def test_should_fix_multipart_layout
|
92
|
+
mail = AutoLayoutMailer.create_multipart(@recipient, "text/plain")
|
93
|
+
assert_equal "multipart/alternative", mail.content_type
|
94
|
+
assert_equal 2, mail.parts.size
|
95
|
+
|
96
|
+
assert_equal 'text/plain', mail.parts.first.content_type
|
97
|
+
assert_equal "text/plain layout - text/plain multipart", mail.parts.first.body
|
98
|
+
|
99
|
+
assert_equal 'text/html', mail.parts.last.content_type
|
100
|
+
assert_equal "Hello from layout text/html multipart", mail.parts.last.body
|
101
|
+
end
|
102
|
+
|
103
|
+
|
76
104
|
def test_should_pickup_layout_given_to_render
|
77
105
|
mail = AutoLayoutMailer.create_spam(@recipient)
|
78
106
|
assert_equal "Spammer layout Hello, Earth", mail.body.strip
|
data/test/mail_service_test.rb
CHANGED
@@ -289,8 +289,6 @@ class TestMailer < ActionMailer::Base
|
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
|
-
uses_mocha 'ActionMailerTest' do
|
293
|
-
|
294
292
|
class ActionMailerTest < Test::Unit::TestCase
|
295
293
|
include ActionMailer::Quoting
|
296
294
|
|
@@ -332,6 +330,7 @@ class ActionMailerTest < Test::Unit::TestCase
|
|
332
330
|
assert_equal "multipart/mixed", created.content_type
|
333
331
|
assert_equal "multipart/alternative", created.parts.first.content_type
|
334
332
|
assert_equal "bar", created.parts.first.header['foo'].to_s
|
333
|
+
assert_nil created.parts.first.charset
|
335
334
|
assert_equal "text/plain", created.parts.first.parts.first.content_type
|
336
335
|
assert_equal "text/html", created.parts.first.parts[1].content_type
|
337
336
|
assert_equal "application/octet-stream", created.parts[1].content_type
|
@@ -389,6 +388,8 @@ class ActionMailerTest < Test::Unit::TestCase
|
|
389
388
|
end
|
390
389
|
|
391
390
|
def test_custom_templating_extension
|
391
|
+
assert ActionView::Template.template_handler_extensions.include?("haml"), "haml extension was not registered"
|
392
|
+
|
392
393
|
# N.b., custom_templating_extension.text.plain.haml is expected to be in fixtures/test_mailer directory
|
393
394
|
expected = new_mail
|
394
395
|
expected.to = @recipient
|
@@ -799,6 +800,8 @@ EOF
|
|
799
800
|
end
|
800
801
|
|
801
802
|
def test_implicitly_multipart_messages
|
803
|
+
assert ActionView::Template.template_handler_extensions.include?("bak"), "bak extension was not registered"
|
804
|
+
|
802
805
|
mail = TestMailer.create_implicitly_multipart_example(@recipient)
|
803
806
|
assert_equal 3, mail.parts.length
|
804
807
|
assert_equal "1.0", mail.mime_version
|
@@ -812,6 +815,8 @@ EOF
|
|
812
815
|
end
|
813
816
|
|
814
817
|
def test_implicitly_multipart_messages_with_custom_order
|
818
|
+
assert ActionView::Template.template_handler_extensions.include?("bak"), "bak extension was not registered"
|
819
|
+
|
815
820
|
mail = TestMailer.create_implicitly_multipart_example(@recipient, nil, ["text/yaml", "text/plain"])
|
816
821
|
assert_equal 3, mail.parts.length
|
817
822
|
assert_equal "text/html", mail.parts[0].content_type
|
@@ -915,6 +920,8 @@ EOF
|
|
915
920
|
def test_multipart_with_template_path_with_dots
|
916
921
|
mail = FunkyPathMailer.create_multipart_with_template_path_with_dots(@recipient)
|
917
922
|
assert_equal 2, mail.parts.length
|
923
|
+
assert_equal 'text/plain', mail.parts[0].content_type
|
924
|
+
assert_equal 'utf-8', mail.parts[0].charset
|
918
925
|
end
|
919
926
|
|
920
927
|
def test_custom_content_type_attributes
|
@@ -932,6 +939,7 @@ EOF
|
|
932
939
|
ActionMailer::Base.delivery_method = :smtp
|
933
940
|
TestMailer.deliver_return_path
|
934
941
|
assert_match %r{^Return-Path: <another@somewhere.test>}, MockSMTP.deliveries[0][0]
|
942
|
+
assert_equal "another@somewhere.test", MockSMTP.deliveries[0][1].to_s
|
935
943
|
end
|
936
944
|
|
937
945
|
def test_body_is_stored_as_an_ivar
|
@@ -940,6 +948,7 @@ EOF
|
|
940
948
|
end
|
941
949
|
|
942
950
|
def test_starttls_is_enabled_if_supported
|
951
|
+
ActionMailer::Base.smtp_settings[:enable_starttls_auto] = true
|
943
952
|
MockSMTP.any_instance.expects(:respond_to?).with(:enable_starttls_auto).returns(true)
|
944
953
|
MockSMTP.any_instance.expects(:enable_starttls_auto)
|
945
954
|
ActionMailer::Base.delivery_method = :smtp
|
@@ -947,25 +956,34 @@ EOF
|
|
947
956
|
end
|
948
957
|
|
949
958
|
def test_starttls_is_disabled_if_not_supported
|
959
|
+
ActionMailer::Base.smtp_settings[:enable_starttls_auto] = true
|
950
960
|
MockSMTP.any_instance.expects(:respond_to?).with(:enable_starttls_auto).returns(false)
|
951
961
|
MockSMTP.any_instance.expects(:enable_starttls_auto).never
|
952
962
|
ActionMailer::Base.delivery_method = :smtp
|
953
963
|
TestMailer.deliver_signed_up(@recipient)
|
954
964
|
end
|
955
|
-
end
|
956
965
|
|
957
|
-
|
966
|
+
def test_starttls_is_not_enabled
|
967
|
+
ActionMailer::Base.smtp_settings[:enable_starttls_auto] = false
|
968
|
+
MockSMTP.any_instance.expects(:respond_to?).never
|
969
|
+
MockSMTP.any_instance.expects(:enable_starttls_auto).never
|
970
|
+
ActionMailer::Base.delivery_method = :smtp
|
971
|
+
TestMailer.deliver_signed_up(@recipient)
|
972
|
+
ensure
|
973
|
+
ActionMailer::Base.smtp_settings[:enable_starttls_auto] = true
|
974
|
+
end
|
975
|
+
end
|
958
976
|
|
959
977
|
class InheritableTemplateRootTest < Test::Unit::TestCase
|
960
978
|
def test_attr
|
961
979
|
expected = "#{File.dirname(__FILE__)}/fixtures/path.with.dots"
|
962
|
-
assert_equal expected, FunkyPathMailer.template_root
|
980
|
+
assert_equal expected, FunkyPathMailer.template_root.to_s
|
963
981
|
|
964
982
|
sub = Class.new(FunkyPathMailer)
|
965
983
|
sub.template_root = 'test/path'
|
966
984
|
|
967
|
-
assert_equal 'test/path', sub.template_root
|
968
|
-
assert_equal expected, FunkyPathMailer.template_root
|
985
|
+
assert_equal 'test/path', sub.template_root.to_s
|
986
|
+
assert_equal expected, FunkyPathMailer.template_root.to_s
|
969
987
|
end
|
970
988
|
end
|
971
989
|
|
@@ -1051,7 +1069,7 @@ class RespondToTest < Test::Unit::TestCase
|
|
1051
1069
|
end
|
1052
1070
|
|
1053
1071
|
def test_should_still_raise_exception_with_expected_message_when_calling_an_undefined_method
|
1054
|
-
error =
|
1072
|
+
error = assert_raise NoMethodError do
|
1055
1073
|
RespondToMailer.not_a_method
|
1056
1074
|
end
|
1057
1075
|
|
data/test/quoting_test.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'abstract_unit'
|
3
|
-
require 'tmail'
|
4
3
|
require 'tempfile'
|
5
4
|
|
6
5
|
class QuotingTest < Test::Unit::TestCase
|
@@ -49,8 +48,10 @@ class QuotingTest < Test::Unit::TestCase
|
|
49
48
|
|
50
49
|
result = execute_in_sandbox(<<-CODE)
|
51
50
|
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
52
|
-
|
53
|
-
|
51
|
+
if RUBY_VERSION < '1.9'
|
52
|
+
$KCODE = 'u'
|
53
|
+
require 'jcode'
|
54
|
+
end
|
54
55
|
require 'action_mailer/quoting'
|
55
56
|
include ActionMailer::Quoting
|
56
57
|
quoted_printable(#{original.inspect}, "UTF-8")
|
data/test/test_helper_test.rb
CHANGED
@@ -26,7 +26,7 @@ class TestHelperMailerTest < ActionMailer::TestCase
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_determine_default_mailer_raises_correct_error
|
29
|
-
|
29
|
+
assert_raise(ActionMailer::NonInferrableMailerError) do
|
30
30
|
self.class.determine_default_mailer("NotAMailerTest")
|
31
31
|
end
|
32
32
|
end
|
@@ -36,7 +36,7 @@ class TestHelperMailerTest < ActionMailer::TestCase
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_encode
|
39
|
-
assert_equal "=?utf-8?Q?=
|
39
|
+
assert_equal "=?utf-8?Q?=0Aasdf=0A?=", encode("\nasdf\n")
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_assert_emails
|
@@ -84,7 +84,7 @@ class TestHelperMailerTest < ActionMailer::TestCase
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def test_assert_emails_too_few_sent
|
87
|
-
error =
|
87
|
+
error = assert_raise ActiveSupport::TestCase::Assertion do
|
88
88
|
assert_emails 2 do
|
89
89
|
TestHelperMailer.deliver_test
|
90
90
|
end
|
@@ -94,7 +94,7 @@ class TestHelperMailerTest < ActionMailer::TestCase
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def test_assert_emails_too_many_sent
|
97
|
-
error =
|
97
|
+
error = assert_raise ActiveSupport::TestCase::Assertion do
|
98
98
|
assert_emails 1 do
|
99
99
|
TestHelperMailer.deliver_test
|
100
100
|
TestHelperMailer.deliver_test
|
@@ -105,7 +105,7 @@ class TestHelperMailerTest < ActionMailer::TestCase
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def test_assert_no_emails_failure
|
108
|
-
error =
|
108
|
+
error = assert_raise ActiveSupport::TestCase::Assertion do
|
109
109
|
assert_no_emails do
|
110
110
|
TestHelperMailer.deliver_test
|
111
111
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionmailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2
|
4
|
+
version: 2.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -9,7 +9,7 @@ autorequire: action_mailer
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-15 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.2
|
23
|
+
version: 2.3.2
|
24
24
|
version:
|
25
25
|
description: Makes it trivial to test and deliver emails sent from a single service layer.
|
26
26
|
email: david@loudthinking.com
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- README
|
37
37
|
- CHANGELOG
|
38
38
|
- MIT-LICENSE
|
39
|
+
- lib/action_mailer
|
39
40
|
- lib/action_mailer/adv_attr_accessor.rb
|
40
41
|
- lib/action_mailer/base.rb
|
41
42
|
- lib/action_mailer/helpers.rb
|
@@ -46,7 +47,13 @@ files:
|
|
46
47
|
- lib/action_mailer/test_case.rb
|
47
48
|
- lib/action_mailer/test_helper.rb
|
48
49
|
- lib/action_mailer/utils.rb
|
50
|
+
- lib/action_mailer/vendor
|
51
|
+
- lib/action_mailer/vendor/text-format-0.6.3
|
52
|
+
- lib/action_mailer/vendor/text-format-0.6.3/text
|
49
53
|
- lib/action_mailer/vendor/text-format-0.6.3/text/format.rb
|
54
|
+
- lib/action_mailer/vendor/text_format.rb
|
55
|
+
- lib/action_mailer/vendor/tmail-1.2.3
|
56
|
+
- lib/action_mailer/vendor/tmail-1.2.3/tmail
|
50
57
|
- lib/action_mailer/vendor/tmail-1.2.3/tmail/address.rb
|
51
58
|
- lib/action_mailer/vendor/tmail-1.2.3/tmail/attachments.rb
|
52
59
|
- lib/action_mailer/vendor/tmail-1.2.3/tmail/base64.rb
|
@@ -74,26 +81,38 @@ files:
|
|
74
81
|
- lib/action_mailer/vendor/tmail-1.2.3/tmail/utils.rb
|
75
82
|
- lib/action_mailer/vendor/tmail-1.2.3/tmail/version.rb
|
76
83
|
- lib/action_mailer/vendor/tmail-1.2.3/tmail.rb
|
77
|
-
- lib/action_mailer/vendor.rb
|
84
|
+
- lib/action_mailer/vendor/tmail.rb
|
78
85
|
- lib/action_mailer/version.rb
|
79
86
|
- lib/action_mailer.rb
|
80
87
|
- lib/actionmailer.rb
|
81
88
|
- test/abstract_unit.rb
|
89
|
+
- test/asset_host_test.rb
|
82
90
|
- test/delivery_method_test.rb
|
91
|
+
- test/fixtures
|
92
|
+
- test/fixtures/asset_host_mailer
|
93
|
+
- test/fixtures/asset_host_mailer/email_with_asset.html.erb
|
94
|
+
- test/fixtures/auto_layout_mailer
|
83
95
|
- test/fixtures/auto_layout_mailer/hello.html.erb
|
84
96
|
- test/fixtures/auto_layout_mailer/multipart.text.html.erb
|
85
97
|
- test/fixtures/auto_layout_mailer/multipart.text.plain.erb
|
98
|
+
- test/fixtures/explicit_layout_mailer
|
86
99
|
- test/fixtures/explicit_layout_mailer/logout.html.erb
|
87
100
|
- test/fixtures/explicit_layout_mailer/signup.html.erb
|
101
|
+
- test/fixtures/first_mailer
|
88
102
|
- test/fixtures/first_mailer/share.erb
|
103
|
+
- test/fixtures/helper_mailer
|
89
104
|
- test/fixtures/helper_mailer/use_example_helper.erb
|
90
105
|
- test/fixtures/helper_mailer/use_helper.erb
|
91
106
|
- test/fixtures/helper_mailer/use_helper_method.erb
|
92
107
|
- test/fixtures/helper_mailer/use_mail_helper.erb
|
108
|
+
- test/fixtures/helpers
|
93
109
|
- test/fixtures/helpers/example_helper.rb
|
110
|
+
- test/fixtures/layouts
|
94
111
|
- test/fixtures/layouts/auto_layout_mailer.html.erb
|
95
112
|
- test/fixtures/layouts/auto_layout_mailer.text.erb
|
96
113
|
- test/fixtures/layouts/spam.html.erb
|
114
|
+
- test/fixtures/path.with.dots
|
115
|
+
- test/fixtures/path.with.dots/funky_path_mailer
|
97
116
|
- test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.erb
|
98
117
|
- test/fixtures/raw_email
|
99
118
|
- test/fixtures/raw_email10
|
@@ -111,8 +130,11 @@ files:
|
|
111
130
|
- test/fixtures/raw_email_with_invalid_characters_in_content_type
|
112
131
|
- test/fixtures/raw_email_with_nested_attachment
|
113
132
|
- test/fixtures/raw_email_with_partially_quoted_subject
|
133
|
+
- test/fixtures/second_mailer
|
114
134
|
- test/fixtures/second_mailer/share.erb
|
135
|
+
- test/fixtures/templates
|
115
136
|
- test/fixtures/templates/signed_up.erb
|
137
|
+
- test/fixtures/test_mailer
|
116
138
|
- test/fixtures/test_mailer/_subtemplate.text.plain.erb
|
117
139
|
- test/fixtures/test_mailer/body_ivar.erb
|
118
140
|
- test/fixtures/test_mailer/custom_templating_extension.text.html.haml
|
@@ -138,8 +160,6 @@ files:
|
|
138
160
|
- test/url_test.rb
|
139
161
|
has_rdoc: true
|
140
162
|
homepage: http://www.rubyonrails.org
|
141
|
-
licenses: []
|
142
|
-
|
143
163
|
post_install_message:
|
144
164
|
rdoc_options: []
|
145
165
|
|
@@ -160,9 +180,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
180
|
requirements:
|
161
181
|
- none
|
162
182
|
rubyforge_project: actionmailer
|
163
|
-
rubygems_version: 1.3.
|
183
|
+
rubygems_version: 1.3.1
|
164
184
|
signing_key:
|
165
|
-
specification_version:
|
185
|
+
specification_version: 2
|
166
186
|
summary: Service layer for easy email delivery and testing.
|
167
187
|
test_files: []
|
168
188
|
|
data/lib/action_mailer/vendor.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# Prefer gems to the bundled libs.
|
2
|
-
require 'rubygems'
|
3
|
-
|
4
|
-
begin
|
5
|
-
gem 'tmail', '~> 1.2.3'
|
6
|
-
rescue Gem::LoadError
|
7
|
-
$:.unshift "#{File.dirname(__FILE__)}/vendor/tmail-1.2.3"
|
8
|
-
end
|
9
|
-
|
10
|
-
begin
|
11
|
-
gem 'text-format', '>= 0.6.3'
|
12
|
-
rescue Gem::LoadError
|
13
|
-
$:.unshift "#{File.dirname(__FILE__)}/vendor/text-format-0.6.3"
|
14
|
-
end
|