aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionmailer/lib/action_mailer/base.rb25
-rw-r--r--actionmailer/lib/action_mailer/delivery_methods.rb5
-rw-r--r--actionmailer/lib/action_mailer/deprecated_api.rb29
-rw-r--r--actionmailer/lib/action_mailer/old_api.rb10
-rw-r--r--railties/lib/generators/rails/mailer/templates/mailer.rb2
-rw-r--r--railties/test/generators/mailer_generator_test.rb2
6 files changed, 45 insertions, 28 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index 868d785129..f677ab629e 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -270,18 +270,6 @@ module ActionMailer #:nodoc:
:parts_order => [ "text/plain", "text/enriched", "text/html" ]
}
- extlib_inheritable_accessor :default_charset
- self.default_charset = self.default_params[:charset]
-
- extlib_inheritable_accessor :default_content_type
- self.default_content_type = self.default_params[:content_type]
-
- extlib_inheritable_accessor :default_mime_version
- self.default_mime_version = self.default_params[:mime_version]
-
- extlib_inheritable_accessor :default_implicit_parts_order
- self.default_implicit_parts_order = self.default_params[:parts_order]
-
class << self
def mailer_name
@@ -505,7 +493,7 @@ module ActionMailer #:nodoc:
quote_fields!(headers, charset)
# Render the templates and blocks
- responses, explicit_order = collect_responses_and_sort_order(headers, &block)
+ responses, explicit_order = collect_responses_and_parts_order(headers, &block)
create_parts_from_responses(m, responses, charset)
# Finally setup content type and parts order
@@ -561,18 +549,18 @@ module ActionMailer #:nodoc:
m.reply_to ||= quote_address_if_necessary(headers[:reply_to], charset) if headers[:reply_to]
end
- def collect_responses_and_sort_order(headers) #:nodoc:
- responses, sort_order = [], nil
+ def collect_responses_and_parts_order(headers) #:nodoc:
+ responses, parts_order = [], nil
if block_given?
collector = ActionMailer::Collector.new(self) { render(action_name) }
yield(collector)
- sort_order = collector.responses.map { |r| r[:content_type] }
+ parts_order = collector.responses.map { |r| r[:content_type] }
responses = collector.responses
elsif headers[:body]
responses << {
:body => headers[:body],
- :content_type => self.class.default_content_type.dup
+ :content_type => self.class.defaults[:content_type] || "text/plain"
}
else
each_template do |template|
@@ -583,7 +571,7 @@ module ActionMailer #:nodoc:
end
end
- [responses, sort_order]
+ [responses, parts_order]
end
def each_template(&block) #:nodoc:
@@ -601,7 +589,6 @@ module ActionMailer #:nodoc:
def create_parts_from_responses(m, responses, charset) #:nodoc:
if responses.size == 1 && !m.has_attachments?
responses[0].each { |k,v| m[k] = v }
- return responses[0][:content_type]
elsif responses.size > 1 && m.has_attachments?
container = Mail::Part.new
container.content_type = "multipart/alternative"
diff --git a/actionmailer/lib/action_mailer/delivery_methods.rb b/actionmailer/lib/action_mailer/delivery_methods.rb
index 34bfe6000a..f6321a240c 100644
--- a/actionmailer/lib/action_mailer/delivery_methods.rb
+++ b/actionmailer/lib/action_mailer/delivery_methods.rb
@@ -65,7 +65,10 @@ module ActionMailer
method ||= self.delivery_method
mail.delivery_handler = self
- if method.is_a?(Symbol)
+ case method
+ when NilClass
+ raise "Delivery method cannot be nil"
+ when Symbol
if klass = delivery_methods[method.to_sym]
mail.delivery_method(klass, send(:"#{method}_settings"))
else
diff --git a/actionmailer/lib/action_mailer/deprecated_api.rb b/actionmailer/lib/action_mailer/deprecated_api.rb
index 0eb8d85676..61101c26a1 100644
--- a/actionmailer/lib/action_mailer/deprecated_api.rb
+++ b/actionmailer/lib/action_mailer/deprecated_api.rb
@@ -5,8 +5,25 @@ module ActionMailer
module DeprecatedApi #:nodoc:
extend ActiveSupport::Concern
- module ClassMethods
+ included do
+ [:charset, :content_type, :mime_version, :implicit_parts_order].each do |method|
+ class_eval <<-FILE, __FILE__, __LINE__ + 1
+ def self.default_#{method}
+ @@default_#{method}
+ end
+
+ def self.default_#{method}=(value)
+ ActiveSupport::Deprecation.warn "ActionMailer::Base.default_#{method}=value is deprecated, " <<
+ "use defaults :#{method} => value instead"
+ @@default_#{method} = value
+ end
+
+ @@default_#{method} = nil
+ FILE
+ end
+ end
+ module ClassMethods
# Deliver the given mail object directly. This can be used to deliver
# a preconstructed mail object, like:
#
@@ -99,7 +116,15 @@ module ActionMailer
end
private
-
+
+ def initialize_defaults(*)
+ @charset ||= self.class.default_charset.try(:dup)
+ @content_type ||= self.class.default_content_type.try(:dup)
+ @implicit_parts_order ||= self.class.default_implicit_parts_order.try(:dup)
+ @mime_version ||= self.class.default_mime_version.try(:dup)
+ super
+ end
+
def create_parts
if @body.is_a?(Hash) && !@body.empty?
ActiveSupport::Deprecation.warn "Giving a hash to body is deprecated, please use instance variables instead", caller[0,2]
diff --git a/actionmailer/lib/action_mailer/old_api.rb b/actionmailer/lib/action_mailer/old_api.rb
index f5b077ab98..22c3c518b1 100644
--- a/actionmailer/lib/action_mailer/old_api.rb
+++ b/actionmailer/lib/action_mailer/old_api.rb
@@ -1,3 +1,5 @@
+require 'active_support/core_ext/object/try'
+
module ActionMailer
module OldApi #:nodoc:
extend ActiveSupport::Concern
@@ -185,10 +187,10 @@ module ActionMailer
# mailer. Subclasses may override this method to provide different
# defaults.
def initialize_defaults(method_name)
- @charset ||= self.class.default_charset.dup
- @content_type ||= self.class.default_content_type.dup
- @implicit_parts_order ||= self.class.default_implicit_parts_order.dup
- @mime_version ||= self.class.default_mime_version.dup if self.class.default_mime_version
+ @charset ||= self.class.defaults[:charset].try(:dup)
+ @content_type ||= self.class.defaults[:content_type].try(:dup)
+ @implicit_parts_order ||= self.class.defaults[:parts_order].try(:dup)
+ @mime_version ||= self.class.defaults[:mime_version].try(:dup)
@mailer_name ||= self.class.mailer_name.dup
@template ||= method_name
diff --git a/railties/lib/generators/rails/mailer/templates/mailer.rb b/railties/lib/generators/rails/mailer/templates/mailer.rb
index df9d0a0923..cdc6e41266 100644
--- a/railties/lib/generators/rails/mailer/templates/mailer.rb
+++ b/railties/lib/generators/rails/mailer/templates/mailer.rb
@@ -1,5 +1,5 @@
class <%= class_name %> < ActionMailer::Base
- self.defaults = { :from => "from@example.com" }
+ self.defaults :from => "from@example.com"
<% for action in actions -%>
# Subject can be set in your I18n file at config/locales/en.yml
diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb
index e585298a93..0b7f5c6817 100644
--- a/railties/test/generators/mailer_generator_test.rb
+++ b/railties/test/generators/mailer_generator_test.rb
@@ -9,7 +9,7 @@ class MailerGeneratorTest < Rails::Generators::TestCase
run_generator
assert_file "app/mailers/notifier.rb" do |mailer|
assert_match /class Notifier < ActionMailer::Base/, mailer
- assert_match /self\.defaults\ =\ \{\ :from\ =>\ "from@example\.com"\ \}/, mailer
+ assert_match /self\.defaults :from => "from@example.com"/, mailer
end
end