From 4fdb1cf0afeffb67c519fc3405388164f3592ea4 Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Fri, 6 Sep 2013 01:09:13 +0000 Subject: [PATCH] rails3: fix and rewrite task_mailer --- app/models/task_mailer.rb | 68 ++++++++++++++++++++++++++++++-------------------------------------- test/unit/task_mailer_test.rb | 20 ++++++++++---------- 2 files changed, 40 insertions(+), 48 deletions(-) diff --git a/app/models/task_mailer.rb b/app/models/task_mailer.rb index ba298ef..fbe6c60 100644 --- a/app/models/task_mailer.rb +++ b/app/models/task_mailer.rb @@ -1,39 +1,44 @@ class TaskMailer < ActionMailer::Base - def method_missing(name, *args) - task = args.shift - if task.kind_of?(Task) && task.respond_to?("#{name}_message") - send_message(task, task.send("#{name}_message"), *args) - else - super - end - end - def target_notification(task, message) - msg = extract_message(message) - - recipients task.target.notification_emails - + @message = extract_message(message) + @target = task.target.name + @environment = task.environment.name + @url = generate_environment_url(task, :controller => 'home') url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.tasks_url) + @tasks_url = url_for_tasks_list - from self.class.generate_from(task) - subject '[%s] %s' % [task.environment.name, task.target_notification_description] - body :target => task.target.name, - :message => msg, - :environment => task.environment.name, - :url => generate_environment_url(task, :controller => 'home'), - :tasks_url => url_for_tasks_list + mail( + to: task.target.notification_emails, + from: self.class.generate_from(task), + subject: "[%s] %s" % [task.environment.name, task.target_notification_description] + ) end def invitation_notification(task) msg = task.expanded_message - msg = msg.gsub //, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code) + @message = msg.gsub //, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code) - recipients task.friend_email + mail( + to: task.friend_email, + from: self.class.generate_from(task), + subject: '[%s] %s' % [ task.requestor.environment.name, task.target_notification_description ] + ) + end - from self.class.generate_from(task) - subject '[%s] %s' % [ task.requestor.environment.name, task.target_notification_description ] - body :message => msg + def generic_message(name, task) + return if !task.respond_to?("#{name}_message") + + @message = extract_message(task.send("#{name}_message")) + @requestor = task.requestor.name + @environment = task.requestor.environment.name + @url = url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') + + mail( + to: task.requestor.notification_emails, + from: self.class.generate_from(task), + subject: '[%s] %s' % [task.requestor.environment.name, task.target_notification_description] + ) end protected @@ -46,19 +51,6 @@ class TaskMailer < ActionMailer::Base end end - def send_message(task, message) - - text = extract_message(message) - - recipients task.requestor.notification_emails - from self.class.generate_from(task) - subject '[%s] %s' % [task.requestor.environment.name, task.target_notification_description] - body :requestor => task.requestor.name, - :message => text, - :environment => task.requestor.environment.name, - :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') - end - def self.generate_from(task) "#{task.environment.name} <#{task.environment.contact_email}>" end diff --git a/test/unit/task_mailer_test.rb b/test/unit/task_mailer_test.rb index a7f2a3a..f48a78a 100644 --- a/test/unit/task_mailer_test.rb +++ b/test/unit/task_mailer_test.rb @@ -4,8 +4,6 @@ class TaskMailerTest < ActiveSupport::TestCase FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' CHARSET = "utf-8" - include ActionMailer::Quoting - def setup ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true @@ -32,7 +30,7 @@ class TaskMailerTest < ActiveSupport::TestCase requestor.expects(:environment).returns(environment).at_least_once task.expects(:environment).returns(environment).at_least_once - TaskMailer.deliver_task_finished(task) + TaskMailer.generic_message(:task_finished, task).deliver assert !ActionMailer::Base.deliveries.empty? end @@ -55,7 +53,7 @@ class TaskMailerTest < ActiveSupport::TestCase requestor.expects(:environment).returns(environment).at_least_once task.expects(:environment).returns(environment).at_least_once - TaskMailer.deliver_task_cancelled(task) + TaskMailer.generic_message(:task_cancelled, task).deliver assert !ActionMailer::Base.deliveries.empty? end @@ -79,15 +77,17 @@ class TaskMailerTest < ActiveSupport::TestCase requestor.expects(:environment).returns(environment).at_least_once task.expects(:environment).returns(environment).at_least_once - TaskMailer.deliver_task_created(task) + TaskMailer.generic_message(:task_created, task).deliver assert !ActionMailer::Base.deliveries.empty? end should 'be able to send a "target notification" message' do - task = Task.new(:target => fast_create(Person)) + requestor = fast_create(Person) + requestor.expects(:notification_emails).returns(['requestor@example.com']) + task = Task.new(:target => requestor) task.expects(:target_notification_description).returns('the task') - TaskMailer.deliver_target_notification(task, 'the message') + TaskMailer.target_notification(task, 'the message').deliver assert !ActionMailer::Base.deliveries.empty? end @@ -114,13 +114,13 @@ class TaskMailerTest < ActiveSupport::TestCase requestor.expects(:environment).returns(environment).at_least_once task.expects(:environment).returns(environment).at_least_once - mail = TaskMailer.create_invitation_notification(task) + mail = TaskMailer.invitation_notification(task) assert_match(/#{task.target_notification_description}/, mail.subject) - assert_equal "Hello friend name, my name invite you, please follow this link: http://example.com/account/signup?invitation_code=123456", mail.body + assert_equal "Hello friend name, my name invite you, please follow this link: http://example.com/account/signup?invitation_code=123456", mail.body.to_s - TaskMailer.deliver(mail) + mail.deliver assert !ActionMailer::Base.deliveries.empty? end -- libgit2 0.21.2