Commit 15e4262a4d36ee68f63ce368fb2a1bea39fd3ff7

Authored by Rodrigo Souto
1 parent 4d9ad46b

rails3: fix comment_notifier

app/mailers/comment_notifier.rb 0 → 100644
... ... @@ -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 122 def notify_by_mail
123 123 if source.kind_of?(Article) && article.notify_comments?
124 124 if !notification_emails.empty?
125   - Comment::Notifier.deliver_mail(self)
  125 + Comment::Notifier.notification(self).deliver
126 126 end
127 127 emails = article.followers - [author_email]
128 128 if !emails.empty?
129   - Comment::Notifier.deliver_mail_to_followers(self, emails)
  129 + Comment::Notifier.mail_to_followers(self, emails).deliver
130 130 end
131 131 end
132 132 end
... ... @@ -163,40 +163,6 @@ class Comment &lt; ActiveRecord::Base
163 163 body || ''
164 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 166 def rejected?
201 167 @rejected
202 168 end
... ...
app/views/comment/notifier/mail.html.erb
... ... @@ -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 @@
  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 28 should 'display author name in delivered mail' do
29 29 create_comment_and_notify(:author => @author, :title => 'test comment', :body => 'you suck!', :source => @article)
30 30 sent = ActionMailer::Base.deliveries.first
31   - assert_match /#{@author.name}/, sent.body
  31 + assert_match /#{@author.name}/, sent.body.to_s
32 32 end
33 33  
34 34 should 'display unauthenticated author name and email in delivered mail' do
35 35 create_comment_and_notify(:name => 'flatline', :email => 'flatline@invalid.com', :title => 'test comment', :body => 'you suck!', :source => @article )
36 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 39 end
40 40  
41 41 should 'not deliver mail if notify comments is false' do
... ... @@ -48,13 +48,13 @@ class CommentNotifierTest &lt; ActiveSupport::TestCase
48 48 should 'include comment title in the e-mail' do
49 49 create_comment_and_notify(:author => @author, :title => 'comment title', :body => 'comment body', :source => @article)
50 50 sent = ActionMailer::Base.deliveries.first
51   - assert_match /comment title/, sent.body
  51 + assert_match /comment title/, sent.body.to_s
52 52 end
53 53  
54 54 should 'include comment text in the e-mail' do
55 55 create_comment_and_notify(:author => @author, :title => 'comment title', :body => 'comment body', :source => @article)
56 56 sent = ActionMailer::Base.deliveries.first
57   - assert_match /comment body/, sent.body
  57 + assert_match /comment body/, sent.body.to_s
58 58 end
59 59  
60 60 should 'not deliver mail if has no notification emails' do
... ...