Commit 4fdb1cf0afeffb67c519fc3405388164f3592ea4
1 parent
7c8e3b68
Exists in
staging
and in
42 other branches
rails3: fix and rewrite task_mailer
Showing
2 changed files
with
40 additions
and
48 deletions
Show diff stats
app/models/task_mailer.rb
1 | class TaskMailer < ActionMailer::Base | 1 | class TaskMailer < ActionMailer::Base |
2 | 2 | ||
3 | - def method_missing(name, *args) | ||
4 | - task = args.shift | ||
5 | - if task.kind_of?(Task) && task.respond_to?("#{name}_message") | ||
6 | - send_message(task, task.send("#{name}_message"), *args) | ||
7 | - else | ||
8 | - super | ||
9 | - end | ||
10 | - end | ||
11 | - | ||
12 | def target_notification(task, message) | 3 | def target_notification(task, message) |
13 | - msg = extract_message(message) | ||
14 | - | ||
15 | - recipients task.target.notification_emails | ||
16 | - | 4 | + @message = extract_message(message) |
5 | + @target = task.target.name | ||
6 | + @environment = task.environment.name | ||
7 | + @url = generate_environment_url(task, :controller => 'home') | ||
17 | url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.tasks_url) | 8 | url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.tasks_url) |
9 | + @tasks_url = url_for_tasks_list | ||
18 | 10 | ||
19 | - from self.class.generate_from(task) | ||
20 | - subject '[%s] %s' % [task.environment.name, task.target_notification_description] | ||
21 | - body :target => task.target.name, | ||
22 | - :message => msg, | ||
23 | - :environment => task.environment.name, | ||
24 | - :url => generate_environment_url(task, :controller => 'home'), | ||
25 | - :tasks_url => url_for_tasks_list | 11 | + mail( |
12 | + to: task.target.notification_emails, | ||
13 | + from: self.class.generate_from(task), | ||
14 | + subject: "[%s] %s" % [task.environment.name, task.target_notification_description] | ||
15 | + ) | ||
26 | end | 16 | end |
27 | 17 | ||
28 | def invitation_notification(task) | 18 | def invitation_notification(task) |
29 | msg = task.expanded_message | 19 | msg = task.expanded_message |
30 | - msg = msg.gsub /<url>/, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code) | 20 | + @message = msg.gsub /<url>/, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code) |
31 | 21 | ||
32 | - recipients task.friend_email | 22 | + mail( |
23 | + to: task.friend_email, | ||
24 | + from: self.class.generate_from(task), | ||
25 | + subject: '[%s] %s' % [ task.requestor.environment.name, task.target_notification_description ] | ||
26 | + ) | ||
27 | + end | ||
33 | 28 | ||
34 | - from self.class.generate_from(task) | ||
35 | - subject '[%s] %s' % [ task.requestor.environment.name, task.target_notification_description ] | ||
36 | - body :message => msg | 29 | + def generic_message(name, task) |
30 | + return if !task.respond_to?("#{name}_message") | ||
31 | + | ||
32 | + @message = extract_message(task.send("#{name}_message")) | ||
33 | + @requestor = task.requestor.name | ||
34 | + @environment = task.requestor.environment.name | ||
35 | + @url = url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') | ||
36 | + | ||
37 | + mail( | ||
38 | + to: task.requestor.notification_emails, | ||
39 | + from: self.class.generate_from(task), | ||
40 | + subject: '[%s] %s' % [task.requestor.environment.name, task.target_notification_description] | ||
41 | + ) | ||
37 | end | 42 | end |
38 | 43 | ||
39 | protected | 44 | protected |
@@ -46,19 +51,6 @@ class TaskMailer < ActionMailer::Base | @@ -46,19 +51,6 @@ class TaskMailer < ActionMailer::Base | ||
46 | end | 51 | end |
47 | end | 52 | end |
48 | 53 | ||
49 | - def send_message(task, message) | ||
50 | - | ||
51 | - text = extract_message(message) | ||
52 | - | ||
53 | - recipients task.requestor.notification_emails | ||
54 | - from self.class.generate_from(task) | ||
55 | - subject '[%s] %s' % [task.requestor.environment.name, task.target_notification_description] | ||
56 | - body :requestor => task.requestor.name, | ||
57 | - :message => text, | ||
58 | - :environment => task.requestor.environment.name, | ||
59 | - :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home') | ||
60 | - end | ||
61 | - | ||
62 | def self.generate_from(task) | 54 | def self.generate_from(task) |
63 | "#{task.environment.name} <#{task.environment.contact_email}>" | 55 | "#{task.environment.name} <#{task.environment.contact_email}>" |
64 | end | 56 | end |
test/unit/task_mailer_test.rb
@@ -4,8 +4,6 @@ class TaskMailerTest < ActiveSupport::TestCase | @@ -4,8 +4,6 @@ class TaskMailerTest < ActiveSupport::TestCase | ||
4 | FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' | 4 | FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' |
5 | CHARSET = "utf-8" | 5 | CHARSET = "utf-8" |
6 | 6 | ||
7 | - include ActionMailer::Quoting | ||
8 | - | ||
9 | def setup | 7 | def setup |
10 | ActionMailer::Base.delivery_method = :test | 8 | ActionMailer::Base.delivery_method = :test |
11 | ActionMailer::Base.perform_deliveries = true | 9 | ActionMailer::Base.perform_deliveries = true |
@@ -32,7 +30,7 @@ class TaskMailerTest < ActiveSupport::TestCase | @@ -32,7 +30,7 @@ class TaskMailerTest < ActiveSupport::TestCase | ||
32 | requestor.expects(:environment).returns(environment).at_least_once | 30 | requestor.expects(:environment).returns(environment).at_least_once |
33 | task.expects(:environment).returns(environment).at_least_once | 31 | task.expects(:environment).returns(environment).at_least_once |
34 | 32 | ||
35 | - TaskMailer.deliver_task_finished(task) | 33 | + TaskMailer.generic_message(:task_finished, task).deliver |
36 | assert !ActionMailer::Base.deliveries.empty? | 34 | assert !ActionMailer::Base.deliveries.empty? |
37 | end | 35 | end |
38 | 36 | ||
@@ -55,7 +53,7 @@ class TaskMailerTest < ActiveSupport::TestCase | @@ -55,7 +53,7 @@ class TaskMailerTest < ActiveSupport::TestCase | ||
55 | requestor.expects(:environment).returns(environment).at_least_once | 53 | requestor.expects(:environment).returns(environment).at_least_once |
56 | task.expects(:environment).returns(environment).at_least_once | 54 | task.expects(:environment).returns(environment).at_least_once |
57 | 55 | ||
58 | - TaskMailer.deliver_task_cancelled(task) | 56 | + TaskMailer.generic_message(:task_cancelled, task).deliver |
59 | assert !ActionMailer::Base.deliveries.empty? | 57 | assert !ActionMailer::Base.deliveries.empty? |
60 | end | 58 | end |
61 | 59 | ||
@@ -79,15 +77,17 @@ class TaskMailerTest < ActiveSupport::TestCase | @@ -79,15 +77,17 @@ class TaskMailerTest < ActiveSupport::TestCase | ||
79 | requestor.expects(:environment).returns(environment).at_least_once | 77 | requestor.expects(:environment).returns(environment).at_least_once |
80 | task.expects(:environment).returns(environment).at_least_once | 78 | task.expects(:environment).returns(environment).at_least_once |
81 | 79 | ||
82 | - TaskMailer.deliver_task_created(task) | 80 | + TaskMailer.generic_message(:task_created, task).deliver |
83 | assert !ActionMailer::Base.deliveries.empty? | 81 | assert !ActionMailer::Base.deliveries.empty? |
84 | end | 82 | end |
85 | 83 | ||
86 | should 'be able to send a "target notification" message' do | 84 | should 'be able to send a "target notification" message' do |
87 | - task = Task.new(:target => fast_create(Person)) | 85 | + requestor = fast_create(Person) |
86 | + requestor.expects(:notification_emails).returns(['requestor@example.com']) | ||
87 | + task = Task.new(:target => requestor) | ||
88 | task.expects(:target_notification_description).returns('the task') | 88 | task.expects(:target_notification_description).returns('the task') |
89 | 89 | ||
90 | - TaskMailer.deliver_target_notification(task, 'the message') | 90 | + TaskMailer.target_notification(task, 'the message').deliver |
91 | assert !ActionMailer::Base.deliveries.empty? | 91 | assert !ActionMailer::Base.deliveries.empty? |
92 | end | 92 | end |
93 | 93 | ||
@@ -114,13 +114,13 @@ class TaskMailerTest < ActiveSupport::TestCase | @@ -114,13 +114,13 @@ class TaskMailerTest < ActiveSupport::TestCase | ||
114 | requestor.expects(:environment).returns(environment).at_least_once | 114 | requestor.expects(:environment).returns(environment).at_least_once |
115 | task.expects(:environment).returns(environment).at_least_once | 115 | task.expects(:environment).returns(environment).at_least_once |
116 | 116 | ||
117 | - mail = TaskMailer.create_invitation_notification(task) | 117 | + mail = TaskMailer.invitation_notification(task) |
118 | 118 | ||
119 | assert_match(/#{task.target_notification_description}/, mail.subject) | 119 | assert_match(/#{task.target_notification_description}/, mail.subject) |
120 | 120 | ||
121 | - assert_equal "Hello friend name, my name invite you, please follow this link: http://example.com/account/signup?invitation_code=123456", mail.body | 121 | + 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 |
122 | 122 | ||
123 | - TaskMailer.deliver(mail) | 123 | + mail.deliver |
124 | assert !ActionMailer::Base.deliveries.empty? | 124 | assert !ActionMailer::Base.deliveries.empty? |
125 | end | 125 | end |
126 | 126 |