提交 e201fc75 编写于 作者: J Joshua Peek

use autoload instead of explicit requires for ActionMailer

上级 04d2d043
...@@ -31,22 +31,32 @@ ...@@ -31,22 +31,32 @@
end end
end end
require 'action_mailer/vendor' module ActionMailer
require 'tmail' def self.load_all!
[Base, Part, ::Text::Format, ::Net::SMTP]
require 'action_mailer/base' end
require 'action_mailer/helpers'
require 'action_mailer/mail_helper'
require 'action_mailer/quoting'
require 'action_mailer/test_helper'
require 'net/smtp' autoload :AdvAttrAccessor, 'action_mailer/adv_attr_accessor'
autoload :Base, 'action_mailer/base'
autoload :Helpers, 'action_mailer/helpers'
autoload :Part, 'action_mailer/part'
autoload :PartContainer, 'action_mailer/part_container'
autoload :Quoting, 'action_mailer/quoting'
autoload :TestCase, 'action_mailer/test_case'
autoload :TestHelper, 'action_mailer/test_helper'
autoload :Utils, 'action_mailer/utils'
end
ActionMailer::Base.class_eval do module Text
include ActionMailer::Quoting autoload :Format, 'action_mailer/vendor/text_format'
include ActionMailer::Helpers end
helper MailHelper module Net
autoload :SMTP, 'net/smtp'
end end
silence_warnings { TMail::Encoder.const_set("MAX_LINE_LEN", 200) } autoload :MailHelper, 'action_mailer/mail_helper'
autoload :TMail, 'action_mailer/vendor/tmail'
# TODO: Don't explicitly load entire lib
ActionMailer.load_all!
require 'action_mailer/adv_attr_accessor'
require 'action_mailer/part'
require 'action_mailer/part_container'
require 'action_mailer/utils'
require 'tmail/net' require 'tmail/net'
module ActionMailer #:nodoc: module ActionMailer #:nodoc:
...@@ -245,7 +241,7 @@ module ActionMailer #:nodoc: ...@@ -245,7 +241,7 @@ module ActionMailer #:nodoc:
# and appear last in the mime encoded message. You can also pick a different order from inside a method with # and appear last in the mime encoded message. You can also pick a different order from inside a method with
# +implicit_parts_order+. # +implicit_parts_order+.
class Base class Base
include AdvAttrAccessor, PartContainer include AdvAttrAccessor, PartContainer, Quoting, Utils
if Object.const_defined?(:ActionController) if Object.const_defined?(:ActionController)
include ActionController::UrlWriter include ActionController::UrlWriter
include ActionController::Layout include ActionController::Layout
...@@ -648,11 +644,11 @@ def create_mail ...@@ -648,11 +644,11 @@ def create_mail
if @parts.empty? if @parts.empty?
m.set_content_type(real_content_type, nil, ctype_attrs) m.set_content_type(real_content_type, nil, ctype_attrs)
m.body = Utils.normalize_new_lines(body) m.body = normalize_new_lines(body)
else else
if String === body if String === body
part = TMail::Mail.new part = TMail::Mail.new
part.body = Utils.normalize_new_lines(body) part.body = normalize_new_lines(body)
part.set_content_type(real_content_type, nil, ctype_attrs) part.set_content_type(real_content_type, nil, ctype_attrs)
part.set_content_disposition "inline" part.set_content_disposition "inline"
m.parts << part m.parts << part
...@@ -698,4 +694,9 @@ def perform_delivery_test(mail) ...@@ -698,4 +694,9 @@ def perform_delivery_test(mail)
deliveries << mail deliveries << mail
end end
end end
Base.class_eval do
include Helpers
helper MailHelper
end
end end
require 'text/format'
module MailHelper module MailHelper
# Uses Text::Format to take the text and format it, indented two spaces for # Uses Text::Format to take the text and format it, indented two spaces for
# each line, and wrapped at 72 columns. # each line, and wrapped at 72 columns.
......
require 'action_mailer/adv_attr_accessor'
require 'action_mailer/part_container'
require 'action_mailer/utils'
module ActionMailer module ActionMailer
# Represents a subpart of an email message. It shares many similar # Represents a subpart of an email message. It shares many similar
# attributes of ActionMailer::Base. Although you can create parts manually # attributes of ActionMailer::Base. Although you can create parts manually
# and add them to the +parts+ list of the mailer, it is easier # and add them to the +parts+ list of the mailer, it is easier
# to use the helper methods in ActionMailer::PartContainer. # to use the helper methods in ActionMailer::PartContainer.
class Part class Part
include ActionMailer::AdvAttrAccessor include AdvAttrAccessor, PartContainer, Utils
include ActionMailer::PartContainer
# Represents the body of the part, as a string. This should not be a # Represents the body of the part, as a string. This should not be a
# Hash (like ActionMailer::Base), but if you want a template to be rendered # Hash (like ActionMailer::Base), but if you want a template to be rendered
...@@ -64,7 +59,7 @@ def to_mail(defaults) ...@@ -64,7 +59,7 @@ def to_mail(defaults)
when "base64" then when "base64" then
part.body = TMail::Base64.folding_encode(body) part.body = TMail::Base64.folding_encode(body)
when "quoted-printable" when "quoted-printable"
part.body = [Utils.normalize_new_lines(body)].pack("M*") part.body = [normalize_new_lines(body)].pack("M*")
else else
part.body = body part.body = body
end end
...@@ -102,7 +97,6 @@ def to_mail(defaults) ...@@ -102,7 +97,6 @@ def to_mail(defaults)
end end
private private
def squish(values={}) def squish(values={})
values.delete_if { |k,v| v.nil? } values.delete_if { |k,v| v.nil? }
end end
......
...@@ -10,7 +10,7 @@ def initialize(name) ...@@ -10,7 +10,7 @@ def initialize(name)
end end
class TestCase < ActiveSupport::TestCase class TestCase < ActiveSupport::TestCase
include ActionMailer::Quoting include Quoting, TestHelper
setup :initialize_test_deliveries setup :initialize_test_deliveries
setup :set_expected_mail setup :set_expected_mail
......
...@@ -58,6 +58,7 @@ def assert_no_emails(&block) ...@@ -58,6 +58,7 @@ def assert_no_emails(&block)
end end
end end
# TODO: Deprecate this
module Test module Test
module Unit module Unit
class TestCase class TestCase
......
...@@ -3,6 +3,5 @@ module Utils #:nodoc: ...@@ -3,6 +3,5 @@ module Utils #:nodoc:
def normalize_new_lines(text) def normalize_new_lines(text)
text.to_s.gsub(/\r\n?/, "\n") text.to_s.gsub(/\r\n?/, "\n")
end end
module_function :normalize_new_lines
end end
end end
# Prefer gems to the bundled libs. # Prefer gems to the bundled libs.
require 'rubygems' require 'rubygems'
begin
gem 'tmail', '~> 1.2.3'
rescue Gem::LoadError
$:.unshift "#{File.dirname(__FILE__)}/vendor/tmail-1.2.3"
end
begin begin
gem 'text-format', '>= 0.6.3' gem 'text-format', '>= 0.6.3'
rescue Gem::LoadError rescue Gem::LoadError
$:.unshift "#{File.dirname(__FILE__)}/vendor/text-format-0.6.3" $:.unshift "#{File.dirname(__FILE__)}/text-format-0.6.3"
end end
require 'text/format'
# Prefer gems to the bundled libs.
require 'rubygems'
begin
gem 'tmail', '~> 1.2.3'
rescue Gem::LoadError
$:.unshift "#{File.dirname(__FILE__)}/tmail-1.2.3"
end
module TMail
end
require 'tmail'
silence_warnings do
TMail::Encoder.const_set("MAX_LINE_LEN", 200)
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册