Commit 15e4262a4d36ee68f63ce368fb2a1bea39fd3ff7

Authored by Rodrigo Souto
1 parent 4d9ad46b

rails3: fix comment_notifier

app/mailers/comment_notifier.rb 0 → 100644
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
  1 +class Comment::Notifier < ActionMailer::Base
  2 + def notification(comment)
  3 + profile = comment.article.profile
  4 + @recipient = profile.nickname || profile.name
  5 + @sender = comment.author_name
  6 + @sender_link = comment.author_link
  7 + @article_title = comment.article.name
  8 + @comment_url = comment.url
  9 + @comment_title = comment.title
  10 + @comment_body = comment.body
  11 + @environment = profile.environment.name
  12 + @url = profile.environment.top_url
  13 +
  14 + mail(
  15 + to: comment.notification_emails,
  16 + from: "#{profile.environment.name} <#{profile.environment.contact_email}>",
  17 + subject: _("[%s] you got a new comment!") % [profile.environment.name]
  18 + )
  19 + end
  20 +
  21 + def mail_to_followers(comment, emails)
  22 + profile = comment.article.profile
  23 + @recipient = profile.nickname || profile.name
  24 + @sender = comment.author_name
  25 + @sender_link = comment.author_link
  26 + @article_title = comment.article.name
  27 + @comment_url = comment.url
  28 + @unsubscribe_url = comment.article.view_url.merge({:unfollow => true})
  29 + @comment_title = comment.title
  30 + @comment_body = comment.body
  31 + @environment = profile.environment.name
  32 + @url = profile.environment.top_url
  33 +
  34 + mail(
  35 + bcc: emails,
  36 + from: "#{profile.environment.name} <#{profile.environment.contact_email}>",
  37 + subject: _("[%s] %s commented on a content of %s") % [profile.environment.name, comment.author_name, profile.short_name]
  38 + )
  39 + end
  40 +end
app/models/comment.rb
@@ -122,11 +122,11 @@ class Comment &lt; ActiveRecord::Base @@ -122,11 +122,11 @@ class Comment &lt; ActiveRecord::Base
122 def notify_by_mail 122 def notify_by_mail
123 if source.kind_of?(Article) && article.notify_comments? 123 if source.kind_of?(Article) && article.notify_comments?
124 if !notification_emails.empty? 124 if !notification_emails.empty?
125 - Comment::Notifier.deliver_mail(self) 125 + Comment::Notifier.notification(self).deliver
126 end 126 end
127 emails = article.followers - [author_email] 127 emails = article.followers - [author_email]
128 if !emails.empty? 128 if !emails.empty?
129 - Comment::Notifier.deliver_mail_to_followers(self, emails) 129 + Comment::Notifier.mail_to_followers(self, emails).deliver
130 end 130 end
131 end 131 end
132 end 132 end
@@ -163,40 +163,6 @@ class Comment &lt; ActiveRecord::Base @@ -163,40 +163,6 @@ class Comment &lt; ActiveRecord::Base
163 body || '' 163 body || ''
164 end 164 end
165 165
166 - class Notifier < ActionMailer::Base  
167 - def mail(comment)  
168 - profile = comment.article.profile  
169 - recipients comment.notification_emails  
170 - from "#{profile.environment.name} <#{profile.environment.contact_email}>"  
171 - subject _("[%s] you got a new comment!") % [profile.environment.name]  
172 - body :recipient => profile.nickname || profile.name,  
173 - :sender => comment.author_name,  
174 - :sender_link => comment.author_link,  
175 - :article_title => comment.article.name,  
176 - :comment_url => comment.url,  
177 - :comment_title => comment.title,  
178 - :comment_body => comment.body,  
179 - :environment => profile.environment.name,  
180 - :url => profile.environment.top_url  
181 - end  
182 - def mail_to_followers(comment, emails)  
183 - profile = comment.article.profile  
184 - bcc emails  
185 - from "#{profile.environment.name} <#{profile.environment.contact_email}>"  
186 - subject _("[%s] %s commented on a content of %s") % [profile.environment.name, comment.author_name, profile.short_name]  
187 - body :recipient => profile.nickname || profile.name,  
188 - :sender => comment.author_name,  
189 - :sender_link => comment.author_link,  
190 - :article_title => comment.article.name,  
191 - :comment_url => comment.url,  
192 - :unsubscribe_url => comment.article.view_url.merge({:unfollow => true}),  
193 - :comment_title => comment.title,  
194 - :comment_body => comment.body,  
195 - :environment => profile.environment.name,  
196 - :url => profile.environment.top_url  
197 - end  
198 - end  
199 -  
200 def rejected? 166 def rejected?
201 @rejected 167 @rejected
202 end 168 end
app/views/comment/notifier/mail.html.erb
@@ -1,19 +0,0 @@ @@ -1,19 +0,0 @@
1 -<%= _('Hi, %{recipient}!') % { :recipient => @recipient } %>  
2 -  
3 -<%= word_wrap(_('%{sender} (%{sender_link}) created a new comment on your article "%{article_title}".') % { :sender => @sender, :sender_link => url_for(@sender_link), :article_title => @article_title }) %>  
4 -  
5 -<%= word_wrap(_('Title: %s') % @comment_title) %>  
6 -  
7 -<%= _("Comment:") %>  
8 --------------------------------------------------------------------------------  
9 -<%= word_wrap(@comment_body) %>  
10 --------------------------------------------------------------------------------  
11 -  
12 -<%= _('Access the address below to view this comment:') %>  
13 -<%= url_for @comment_url %>  
14 -  
15 -<%= _("Greetings,") %>  
16 -  
17 ---  
18 -<%= _('%s team.') % @environment %>  
19 -<%= url_for @url %>  
app/views/comment/notifier/notification.html.erb 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +<%= _('Hi, %{recipient}!') % { :recipient => @recipient } %>
  2 +
  3 +<%= word_wrap(_('%{sender} (%{sender_link}) created a new comment on your article "%{article_title}".') % { :sender => @sender, :sender_link => url_for(@sender_link), :article_title => @article_title }) %>
  4 +
  5 +<%= word_wrap(_('Title: %s') % @comment_title) %>
  6 +
  7 +<%= _("Comment:") %>
  8 +-------------------------------------------------------------------------------
  9 +<%= word_wrap(@comment_body) %>
  10 +-------------------------------------------------------------------------------
  11 +
  12 +<%= _('Access the address below to view this comment:') %>
  13 +<%= url_for @comment_url %>
  14 +
  15 +<%= _("Greetings,") %>
  16 +
  17 +--
  18 +<%= _('%s team.') % @environment %>
  19 +<%= url_for @url %>
test/unit/comment_notifier_test.rb
@@ -28,14 +28,14 @@ class CommentNotifierTest &lt; ActiveSupport::TestCase @@ -28,14 +28,14 @@ class CommentNotifierTest &lt; ActiveSupport::TestCase
28 should 'display author name in delivered mail' do 28 should 'display author name in delivered mail' do
29 create_comment_and_notify(:author => @author, :title => 'test comment', :body => 'you suck!', :source => @article) 29 create_comment_and_notify(:author => @author, :title => 'test comment', :body => 'you suck!', :source => @article)
30 sent = ActionMailer::Base.deliveries.first 30 sent = ActionMailer::Base.deliveries.first
31 - assert_match /#{@author.name}/, sent.body 31 + assert_match /#{@author.name}/, sent.body.to_s
32 end 32 end
33 33
34 should 'display unauthenticated author name and email in delivered mail' do 34 should 'display unauthenticated author name and email in delivered mail' do
35 create_comment_and_notify(:name => 'flatline', :email => 'flatline@invalid.com', :title => 'test comment', :body => 'you suck!', :source => @article ) 35 create_comment_and_notify(:name => 'flatline', :email => 'flatline@invalid.com', :title => 'test comment', :body => 'you suck!', :source => @article )
36 sent = ActionMailer::Base.deliveries.first 36 sent = ActionMailer::Base.deliveries.first
37 - assert_match /flatline/, sent.body  
38 - assert_match /flatline@invalid.com/, sent.body 37 + assert_match /flatline/, sent.body.to_s
  38 + assert_match /flatline@invalid.com/, sent.body.to_s
39 end 39 end
40 40
41 should 'not deliver mail if notify comments is false' do 41 should 'not deliver mail if notify comments is false' do
@@ -48,13 +48,13 @@ class CommentNotifierTest &lt; ActiveSupport::TestCase @@ -48,13 +48,13 @@ class CommentNotifierTest &lt; ActiveSupport::TestCase
48 should 'include comment title in the e-mail' do 48 should 'include comment title in the e-mail' do
49 create_comment_and_notify(:author => @author, :title => 'comment title', :body => 'comment body', :source => @article) 49 create_comment_and_notify(:author => @author, :title => 'comment title', :body => 'comment body', :source => @article)
50 sent = ActionMailer::Base.deliveries.first 50 sent = ActionMailer::Base.deliveries.first
51 - assert_match /comment title/, sent.body 51 + assert_match /comment title/, sent.body.to_s
52 end 52 end
53 53
54 should 'include comment text in the e-mail' do 54 should 'include comment text in the e-mail' do
55 create_comment_and_notify(:author => @author, :title => 'comment title', :body => 'comment body', :source => @article) 55 create_comment_and_notify(:author => @author, :title => 'comment title', :body => 'comment body', :source => @article)
56 sent = ActionMailer::Base.deliveries.first 56 sent = ActionMailer::Base.deliveries.first
57 - assert_match /comment body/, sent.body 57 + assert_match /comment body/, sent.body.to_s
58 end 58 end
59 59
60 should 'not deliver mail if has no notification emails' do 60 should 'not deliver mail if has no notification emails' do