From 67f8b6b2bc7e7eca8723996b1303c3fafa5ed39b Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Tue, 12 Aug 2014 18:24:19 +0000 Subject: Added ActionMailer::DeliverLater --- actionmailer/lib/action_mailer/base.rb | 6 ++- actionmailer/lib/action_mailer/deliver_later.rb | 9 +++++ .../lib/action_mailer/deliver_later/job.rb | 11 ++++++ .../deliver_later/mail_message_wrapper.rb | 46 ++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 actionmailer/lib/action_mailer/deliver_later.rb create mode 100644 actionmailer/lib/action_mailer/deliver_later/job.rb create mode 100644 actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index bc540aece0..df0c945434 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -549,7 +549,11 @@ module ActionMailer def method_missing(method_name, *args) # :nodoc: if respond_to?(method_name) - new(method_name, *args).message + if defined?(::ActiveJob) && action_methods.include?(method_name.to_s) + DeliverLater::MailMessageWrapper.new(self, method_name, *args) + else + new(method_name, *args).message + end else super end diff --git a/actionmailer/lib/action_mailer/deliver_later.rb b/actionmailer/lib/action_mailer/deliver_later.rb new file mode 100644 index 0000000000..5609e35d01 --- /dev/null +++ b/actionmailer/lib/action_mailer/deliver_later.rb @@ -0,0 +1,9 @@ +require 'active_job' + +module ActionMailer + module DeliverLater + extend ActiveSupport::Autoload + autoload :Job + autoload :MailMessageWrapper + end +end \ No newline at end of file diff --git a/actionmailer/lib/action_mailer/deliver_later/job.rb b/actionmailer/lib/action_mailer/deliver_later/job.rb new file mode 100644 index 0000000000..fda3b626b2 --- /dev/null +++ b/actionmailer/lib/action_mailer/deliver_later/job.rb @@ -0,0 +1,11 @@ +module ActionMailer + module DeliverLater + class Job < ActiveJob::Base + queue_as :mailers + + def perform(mailer, mail_method, delivery_method, *args) + mailer.constantize.send(mail_method, *args).send(delivery_method) + end + end + end +end diff --git a/actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb b/actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb new file mode 100644 index 0000000000..5c0a5304d4 --- /dev/null +++ b/actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb @@ -0,0 +1,46 @@ +module ActionMailer + module DeliverLater + class MailMessageWrapper < Delegator + def initialize(mailer, mail_method, *args) + @mailer = mailer + @mail_method = mail_method + @args = args + __getobj__ + end + + def __getobj__ + @obj ||= @mailer.send(:new, @mail_method, *@args).message + end + + def __setobj__(obj) + @obj = obj + end + + def deliver_later!(options={}) + enqueue_delivery :deliver!, options + end + + def deliver_later(options={}) + enqueue_delivery :deliver, options + end + + def method_missing(m, *args, &block) + __getobj__.__send__(m, *args, &block) + end + + private + def enqueue_delivery(delivery_method, options={}) + args = @mailer.name, @mail_method.to_s, delivery_method.to_s, *@args + enqueue_method = :enqueue + if options[:at] + enqueue_method = :enqueue_at + args.unshift options[:at] + elsif options[:in] + enqueue_method = :enqueue_in + args.unshift options[:in] + end + ActionMailer::DeliverLater::Job.send enqueue_method, *args + end + end + end +end -- cgit v1.2.3 From b937ea893e5ad22f53a244ac17d085c1d40fdcc2 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Thu, 14 Aug 2014 10:50:46 +0000 Subject: Make ActionMailer::Previews methods class methods. --- actionmailer/lib/action_mailer/preview.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/preview.rb b/actionmailer/lib/action_mailer/preview.rb index 33de1dc049..44cf6665ba 100644 --- a/actionmailer/lib/action_mailer/preview.rb +++ b/actionmailer/lib/action_mailer/preview.rb @@ -22,7 +22,9 @@ module ActionMailer # :nodoc: mattr_accessor :preview_interceptors, instance_writer: false self.preview_interceptors = [] + end + module ClassMethods # Register one or more Interceptors which will be called before mail is previewed. def register_preview_interceptors(*interceptors) interceptors.flatten.compact.each { |interceptor| register_preview_interceptor(interceptor) } -- cgit v1.2.3 From 18303f6e82258c1d6175f1faf1becd260397fb57 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Wed, 13 Aug 2014 21:50:38 +0000 Subject: Refactor DeliverLater into MessageDelivery --- actionmailer/lib/action_mailer/base.rb | 8 +--- .../lib/action_mailer/delayed_delivery_job.rb | 11 +++++ actionmailer/lib/action_mailer/deliver_later.rb | 9 ----- .../lib/action_mailer/deliver_later/job.rb | 11 ----- .../deliver_later/mail_message_wrapper.rb | 46 --------------------- actionmailer/lib/action_mailer/message_delivery.rb | 47 ++++++++++++++++++++++ 6 files changed, 60 insertions(+), 72 deletions(-) create mode 100644 actionmailer/lib/action_mailer/delayed_delivery_job.rb delete mode 100644 actionmailer/lib/action_mailer/deliver_later.rb delete mode 100644 actionmailer/lib/action_mailer/deliver_later/job.rb delete mode 100644 actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb create mode 100644 actionmailer/lib/action_mailer/message_delivery.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index df0c945434..3c144c8e5c 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -548,12 +548,8 @@ module ActionMailer end def method_missing(method_name, *args) # :nodoc: - if respond_to?(method_name) - if defined?(::ActiveJob) && action_methods.include?(method_name.to_s) - DeliverLater::MailMessageWrapper.new(self, method_name, *args) - else - new(method_name, *args).message - end + if action_methods.include?(method_name.to_s) + MessageDelivery.new(self, method_name, *args) else super end diff --git a/actionmailer/lib/action_mailer/delayed_delivery_job.rb b/actionmailer/lib/action_mailer/delayed_delivery_job.rb new file mode 100644 index 0000000000..159198829f --- /dev/null +++ b/actionmailer/lib/action_mailer/delayed_delivery_job.rb @@ -0,0 +1,11 @@ +require 'active_job' + +module ActionMailer + class DelayedDeliveryJob < ActiveJob::Base + queue_as :mailers + + def perform(mailer, mail_method, delivery_method, *args) + mailer.constantize.send(mail_method, *args).send(delivery_method) + end + end +end diff --git a/actionmailer/lib/action_mailer/deliver_later.rb b/actionmailer/lib/action_mailer/deliver_later.rb deleted file mode 100644 index 5609e35d01..0000000000 --- a/actionmailer/lib/action_mailer/deliver_later.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'active_job' - -module ActionMailer - module DeliverLater - extend ActiveSupport::Autoload - autoload :Job - autoload :MailMessageWrapper - end -end \ No newline at end of file diff --git a/actionmailer/lib/action_mailer/deliver_later/job.rb b/actionmailer/lib/action_mailer/deliver_later/job.rb deleted file mode 100644 index fda3b626b2..0000000000 --- a/actionmailer/lib/action_mailer/deliver_later/job.rb +++ /dev/null @@ -1,11 +0,0 @@ -module ActionMailer - module DeliverLater - class Job < ActiveJob::Base - queue_as :mailers - - def perform(mailer, mail_method, delivery_method, *args) - mailer.constantize.send(mail_method, *args).send(delivery_method) - end - end - end -end diff --git a/actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb b/actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb deleted file mode 100644 index 5c0a5304d4..0000000000 --- a/actionmailer/lib/action_mailer/deliver_later/mail_message_wrapper.rb +++ /dev/null @@ -1,46 +0,0 @@ -module ActionMailer - module DeliverLater - class MailMessageWrapper < Delegator - def initialize(mailer, mail_method, *args) - @mailer = mailer - @mail_method = mail_method - @args = args - __getobj__ - end - - def __getobj__ - @obj ||= @mailer.send(:new, @mail_method, *@args).message - end - - def __setobj__(obj) - @obj = obj - end - - def deliver_later!(options={}) - enqueue_delivery :deliver!, options - end - - def deliver_later(options={}) - enqueue_delivery :deliver, options - end - - def method_missing(m, *args, &block) - __getobj__.__send__(m, *args, &block) - end - - private - def enqueue_delivery(delivery_method, options={}) - args = @mailer.name, @mail_method.to_s, delivery_method.to_s, *@args - enqueue_method = :enqueue - if options[:at] - enqueue_method = :enqueue_at - args.unshift options[:at] - elsif options[:in] - enqueue_method = :enqueue_in - args.unshift options[:in] - end - ActionMailer::DeliverLater::Job.send enqueue_method, *args - end - end - end -end diff --git a/actionmailer/lib/action_mailer/message_delivery.rb b/actionmailer/lib/action_mailer/message_delivery.rb new file mode 100644 index 0000000000..fa0aa43a2d --- /dev/null +++ b/actionmailer/lib/action_mailer/message_delivery.rb @@ -0,0 +1,47 @@ +module ActionMailer + class MessageDelivery < Delegator + def initialize(mailer, mail_method, *args) + @mailer = mailer + @mail_method = mail_method + @args = args + end + + def __getobj__ + @obj ||= @mailer.send(:new, @mail_method, *@args).message + end + + def __setobj__(obj) + @obj = obj + end + + def message #:nodoc: + __getobj__ + end + + def deliver_later!(options={}) + enqueue_delivery :deliver!, options + end + + def deliver_later(options={}) + enqueue_delivery :deliver, options + end + + def method_missing(m, *args, &block) + __getobj__.__send__(m, *args, &block) + end + + private + def enqueue_delivery(delivery_method, options={}) + args = @mailer.name, @mail_method.to_s, delivery_method.to_s, *@args + enqueue_method = :enqueue + if options[:at] + enqueue_method = :enqueue_at + args.unshift options[:at] + elsif options[:in] + enqueue_method = :enqueue_in + args.unshift options[:in] + end + ActionMailer::DelayedDeliveryJob.send enqueue_method, *args + end + end +end -- cgit v1.2.3 From e034ac33ea923cb068644a0fae4a8a8e7ed9dc2f Mon Sep 17 00:00:00 2001 From: Cristian Bica Date: Fri, 15 Aug 2014 23:20:55 +0300 Subject: Removed method missing from ActionMailer::MessageDelivery --- actionmailer/lib/action_mailer/base.rb | 4 ++++ actionmailer/lib/action_mailer/message_delivery.rb | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 3c144c8e5c..a229d9142c 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -586,6 +586,10 @@ module ActionMailer class NullMail #:nodoc: def body; '' end + def respond_to?(string, include_all=false) + true + end + def method_missing(*args) nil end diff --git a/actionmailer/lib/action_mailer/message_delivery.rb b/actionmailer/lib/action_mailer/message_delivery.rb index fa0aa43a2d..27e0671427 100644 --- a/actionmailer/lib/action_mailer/message_delivery.rb +++ b/actionmailer/lib/action_mailer/message_delivery.rb @@ -26,10 +26,6 @@ module ActionMailer enqueue_delivery :deliver, options end - def method_missing(m, *args, &block) - __getobj__.__send__(m, *args, &block) - end - private def enqueue_delivery(delivery_method, options={}) args = @mailer.name, @mail_method.to_s, delivery_method.to_s, *@args -- cgit v1.2.3 From 0e4e496a5775adf4d9204aaa38de916f74623ea9 Mon Sep 17 00:00:00 2001 From: Cristian Bica Date: Sat, 16 Aug 2014 00:30:20 +0300 Subject: Fixed indentation --- actionmailer/lib/action_mailer/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index a229d9142c..9aae14ec8c 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -549,7 +549,7 @@ module ActionMailer def method_missing(method_name, *args) # :nodoc: if action_methods.include?(method_name.to_s) - MessageDelivery.new(self, method_name, *args) + MessageDelivery.new(self, method_name, *args) else super end -- cgit v1.2.3 From 299d1f262629aaa25e070db6ae15438e95137054 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Thu, 14 Aug 2014 23:47:38 +0000 Subject: [ActionMailer] Rename ActionMailer::DelayedDeliveryJob to ActionMailer::DeliveryJob --- actionmailer/lib/action_mailer/delayed_delivery_job.rb | 11 ----------- actionmailer/lib/action_mailer/delivery_job.rb | 11 +++++++++++ actionmailer/lib/action_mailer/message_delivery.rb | 4 +++- 3 files changed, 14 insertions(+), 12 deletions(-) delete mode 100644 actionmailer/lib/action_mailer/delayed_delivery_job.rb create mode 100644 actionmailer/lib/action_mailer/delivery_job.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/delayed_delivery_job.rb b/actionmailer/lib/action_mailer/delayed_delivery_job.rb deleted file mode 100644 index 159198829f..0000000000 --- a/actionmailer/lib/action_mailer/delayed_delivery_job.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'active_job' - -module ActionMailer - class DelayedDeliveryJob < ActiveJob::Base - queue_as :mailers - - def perform(mailer, mail_method, delivery_method, *args) - mailer.constantize.send(mail_method, *args).send(delivery_method) - end - end -end diff --git a/actionmailer/lib/action_mailer/delivery_job.rb b/actionmailer/lib/action_mailer/delivery_job.rb new file mode 100644 index 0000000000..b2cfa245fd --- /dev/null +++ b/actionmailer/lib/action_mailer/delivery_job.rb @@ -0,0 +1,11 @@ +require 'active_job' + +module ActionMailer + class DeliveryJob < ActiveJob::Base + queue_as :mailers + + def perform(mailer, mail_method, delivery_method, *args) + mailer.constantize.public_send(mail_method, *args).send(delivery_method) + end + end +end diff --git a/actionmailer/lib/action_mailer/message_delivery.rb b/actionmailer/lib/action_mailer/message_delivery.rb index 27e0671427..80a0517bff 100644 --- a/actionmailer/lib/action_mailer/message_delivery.rb +++ b/actionmailer/lib/action_mailer/message_delivery.rb @@ -1,3 +1,5 @@ +require 'delegate' + module ActionMailer class MessageDelivery < Delegator def initialize(mailer, mail_method, *args) @@ -37,7 +39,7 @@ module ActionMailer enqueue_method = :enqueue_in args.unshift options[:in] end - ActionMailer::DelayedDeliveryJob.send enqueue_method, *args + ActionMailer::DeliveryJob.send enqueue_method, *args end end end -- cgit v1.2.3