aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer
diff options
context:
space:
mode:
Diffstat (limited to 'actionmailer/lib/action_mailer')
-rw-r--r--actionmailer/lib/action_mailer/adv_attr_accessor.rb36
-rw-r--r--actionmailer/lib/action_mailer/base.rb9
-rw-r--r--actionmailer/lib/action_mailer/deprecated_api.rb141
-rw-r--r--actionmailer/lib/action_mailer/old_api.rb32
4 files changed, 40 insertions, 178 deletions
diff --git a/actionmailer/lib/action_mailer/adv_attr_accessor.rb b/actionmailer/lib/action_mailer/adv_attr_accessor.rb
index be6b1feca9..c1aa8021ce 100644
--- a/actionmailer/lib/action_mailer/adv_attr_accessor.rb
+++ b/actionmailer/lib/action_mailer/adv_attr_accessor.rb
@@ -1,26 +1,28 @@
module ActionMailer
module AdvAttrAccessor #:nodoc:
- def adv_attr_accessor(*names)
- names.each do |name|
- ivar = "@#{name}"
+ def adv_attr_accessor(name, deprecation=nil)
+ ivar = "@#{name}"
+ deprecation ||= "Please pass :#{name} as hash key to mail() instead"
- class_eval <<-ACCESSORS, __FILE__, __LINE__ + 1
- def #{name}=(value)
- #{ivar} = value
- end
+ class_eval <<-ACCESSORS, __FILE__, __LINE__ + 1
+ def #{name}=(value)
+ ActiveSupport::Deprecation.warn "#{name}= is deprecated. #{deprecation}"
+ #{ivar} = value
+ end
- def #{name}(*args)
- raise ArgumentError, "expected 0 or 1 parameters" unless args.length <= 1
- if args.empty?
- #{ivar} if instance_variable_names.include?(#{ivar.inspect})
- else
- #{ivar} = args.first
- end
+ def #{name}(*args)
+ raise ArgumentError, "expected 0 or 1 parameters" unless args.length <= 1
+ if args.empty?
+ ActiveSupport::Deprecation.warn "#{name}() is deprecated and will be removed in future versions."
+ #{ivar} if instance_variable_names.include?(#{ivar.inspect})
+ else
+ ActiveSupport::Deprecation.warn "#{name}(value) is deprecated. #{deprecation}"
+ #{ivar} = args.first
end
- ACCESSORS
+ end
+ ACCESSORS
- self.protected_instance_variables << ivar if self.respond_to?(:protected_instance_variables)
- end
+ self.protected_instance_variables << ivar if self.respond_to?(:protected_instance_variables)
end
end
end
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index 8fe5868d52..31e1b26afd 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -341,10 +341,11 @@ module ActionMailer #:nodoc:
include AbstractController::Translation
include AbstractController::AssetPaths
- helper ActionMailer::MailHelper
+ cattr_reader :protected_instance_variables
+ @@protected_instance_variables = []
+ helper ActionMailer::MailHelper
include ActionMailer::OldApi
- include ActionMailer::DeprecatedApi
delegate :register_observer, :to => Mail
delegate :register_interceptor, :to => Mail
@@ -446,6 +447,10 @@ module ActionMailer #:nodoc:
super
end
+ def mailer_name
+ self.class.mailer_name
+ end
+
# Allows you to pass random and unusual headers to the new +Mail::Message+ object
# which will add them to itself.
#
diff --git a/actionmailer/lib/action_mailer/deprecated_api.rb b/actionmailer/lib/action_mailer/deprecated_api.rb
deleted file mode 100644
index 7d57feba04..0000000000
--- a/actionmailer/lib/action_mailer/deprecated_api.rb
+++ /dev/null
@@ -1,141 +0,0 @@
-require 'active_support/core_ext/object/try'
-
-module ActionMailer
- # This is the API which is deprecated and is going to be removed on Rails 3.1 release.
- # Part of the old API will be deprecated after 3.1, for a smoother deprecation process.
- # Check those in OldApi instead.
- module DeprecatedApi #:nodoc:
- extend ActiveSupport::Concern
-
- 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 default :#{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:
- #
- # email = MyMailer.create_some_mail(parameters)
- # email.set_some_obscure_header "frobnicate"
- # MyMailer.deliver(email)
- def deliver(mail, show_warning=true)
- if show_warning
- ActiveSupport::Deprecation.warn "#{self}.deliver is deprecated, call " <<
- "deliver in the mailer instance instead", caller[0,2]
- end
-
- raise "no mail object available for delivery!" unless mail
- wrap_delivery_behavior(mail)
- mail.deliver
- mail
- end
-
- def template_root
- self.view_paths && self.view_paths.first
- end
-
- def template_root=(root)
- ActiveSupport::Deprecation.warn "template_root= is deprecated, use prepend_view_path instead", caller[0,2]
- self.view_paths = ActionView::Base.process_view_paths(root)
- end
-
- def respond_to?(method_symbol, include_private = false)
- matches_dynamic_method?(method_symbol) || super
- end
-
- def method_missing(method_symbol, *parameters)
- if match = matches_dynamic_method?(method_symbol)
- case match[1]
- when 'create'
- ActiveSupport::Deprecation.warn "#{self}.create_#{match[2]} is deprecated, " <<
- "use #{self}.#{match[2]} instead", caller[0,2]
- new(match[2], *parameters).message
- when 'deliver'
- ActiveSupport::Deprecation.warn "#{self}.deliver_#{match[2]} is deprecated, " <<
- "use #{self}.#{match[2]}.deliver instead", caller[0,2]
- new(match[2], *parameters).message.deliver
- else super
- end
- else
- super
- end
- end
-
- private
-
- def matches_dynamic_method?(method_name)
- method_name = method_name.to_s
- /^(create|deliver)_([_a-z]\w*)/.match(method_name) || /^(new)$/.match(method_name)
- end
- end
-
- # Delivers a Mail object. By default, it delivers the cached mail
- # object (from the <tt>create!</tt> method). If no cached mail object exists, and
- # no alternate has been given as the parameter, this will fail.
- def deliver!(mail = @_message)
- ActiveSupport::Deprecation.warn "Calling deliver in the AM::Base object is deprecated, " <<
- "please call deliver in the Mail instance", caller[0,2]
- self.class.deliver(mail, false)
- end
- alias :deliver :deliver!
-
- def render(*args)
- options = args.last.is_a?(Hash) ? args.last : {}
-
- if options[:body].is_a?(Hash)
- ActiveSupport::Deprecation.warn(':body in render deprecated. Please use instance ' <<
- 'variables as assigns instead', caller[0,1])
-
- options[:body].each { |k,v| instance_variable_set(:"@#{k}", v) }
- end
- super
- end
-
- # Render a message but does not set it as mail body. Useful for rendering
- # data for part and attachments.
- #
- # Examples:
- #
- # render_message "special_message"
- # render_message :template => "special_message"
- # render_message :inline => "<%= 'Hi!' %>"
- #
- def render_message(*args)
- ActiveSupport::Deprecation.warn "render_message is deprecated, use render instead", caller[0,2]
- render(*args)
- 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]
- @body.each { |k, v| instance_variable_set(:"@#{k}", v) }
- end
- super
- end
-
- end
-end
diff --git a/actionmailer/lib/action_mailer/old_api.rb b/actionmailer/lib/action_mailer/old_api.rb
index 2a6289c22d..b8c15df263 100644
--- a/actionmailer/lib/action_mailer/old_api.rb
+++ b/actionmailer/lib/action_mailer/old_api.rb
@@ -8,9 +8,7 @@ module ActionMailer
included do
extend ActionMailer::AdvAttrAccessor
-
- @@protected_instance_variables = %w(@parts)
- cattr_reader :protected_instance_variables
+ self.protected_instance_variables.concat %w(@parts @mail_was_called)
# Specify the BCC addresses for the message
adv_attr_accessor :bcc
@@ -42,11 +40,11 @@ module ActionMailer
# The recipient addresses for the message, either as a string (for a single
# address) or an array (for multiple addresses).
- adv_attr_accessor :recipients
+ adv_attr_accessor :recipients, "Please pass :to as hash key to mail() instead"
# The date on which the message was sent. If not set (the default), the
# header will be set by the delivery agent.
- adv_attr_accessor :sent_on
+ adv_attr_accessor :sent_on, "Please pass :date as hash key to mail() instead"
# Specify the subject of the message.
adv_attr_accessor :subject
@@ -54,20 +52,12 @@ module ActionMailer
# Specify the template name to use for current message. This is the "base"
# template name, without the extension or directory, and may be used to
# have multiple mailer methods share the same template.
- adv_attr_accessor :template
-
- # Override the mailer name, which defaults to an inflected version of the
- # mailer's class name. If you want to use a template in a non-standard
- # location, you can use this to specify that location.
- adv_attr_accessor :mailer_name
+ adv_attr_accessor :template, "Please pass :template_name or :template_path as hash key to mail() instead"
# Define the body of the message. This is either a Hash (in which case it
# specifies the variables to pass to the template when it is rendered),
# or a string, in which case it specifies the actual text of the message.
adv_attr_accessor :body
-
- # Alias controller_path to mailer_name so render :partial in views work.
- alias :controller_path :mailer_name
end
def process(method_name, *args)
@@ -84,6 +74,8 @@ module ActionMailer
# part itself is yielded to the block so that other properties (charset,
# body, headers, etc.) can be set on it.
def part(params)
+ ActiveSupport::Deprecation.warn "part() is deprecated and will be removed in future versions. " <<
+ "Please pass a block to mail() instead."
params = {:content_type => params} if String === params
if custom_headers = params.delete(:headers)
@@ -99,6 +91,8 @@ module ActionMailer
# Add an attachment to a multipart message. This is simply a part with the
# content-disposition set to "attachment".
def attachment(params, &block)
+ ActiveSupport::Deprecation.warn "attachment() is deprecated and will be removed in future versions. " <<
+ "Please use the attachments[] API instead."
params = { :content_type => params } if String === params
params[:content] ||= params.delete(:data) || params.delete(:body)
@@ -148,11 +142,11 @@ module ActionMailer
def create_mail
m = @_message
- set_fields!({:subject => subject, :to => recipients, :from => from,
- :bcc => bcc, :cc => cc, :reply_to => reply_to}, charset)
+ set_fields!({:subject => @subject, :to => @recipients, :from => @from,
+ :bcc => @bcc, :cc => @cc, :reply_to => @reply_to}, @charset)
- m.mime_version = mime_version unless mime_version.nil?
- m.date = sent_on.to_time rescue sent_on if sent_on
+ m.mime_version = @mime_version if @mime_version
+ m.date = @sent_on.to_time rescue @sent_on if @sent_on
@headers.each { |k, v| m[k] = v }
@@ -191,6 +185,8 @@ module ActionMailer
@implicit_parts_order ||= self.class.default[:parts_order].try(:dup)
@mime_version ||= self.class.default[:mime_version].try(:dup)
+ @cc, @bcc, @reply_to, @subject, @from, @recipients = nil, nil, nil, nil, nil, nil
+
@mailer_name ||= self.class.mailer_name.dup
@template ||= method_name
@mail_was_called = false