Commit 52500266c38b2aa7839757cdf8a73ef10eb7875f
1 parent
eb86a964
Exists in
master
and in
29 other branches
spammable_hot_spot: encapsulating spammable hot_spots
Showing
8 changed files
with
42 additions
and
80 deletions
Show diff stats
app/models/comment.rb
... | ... | @@ -106,6 +106,17 @@ class Comment < ActiveRecord::Base |
106 | 106 | |
107 | 107 | include Noosfero::Plugin::HotSpot |
108 | 108 | |
109 | + include Spammable | |
110 | + | |
111 | + def after_spam! | |
112 | + SpammerLogger.log(ip_address, self) | |
113 | + Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_spam)) | |
114 | + end | |
115 | + | |
116 | + def after_ham! | |
117 | + Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_ham)) | |
118 | + end | |
119 | + | |
109 | 120 | def verify_and_notify |
110 | 121 | check_for_spam |
111 | 122 | unless spam? |
... | ... | @@ -113,10 +124,6 @@ class Comment < ActiveRecord::Base |
113 | 124 | end |
114 | 125 | end |
115 | 126 | |
116 | - def check_for_spam | |
117 | - plugins.dispatch(:check_comment_for_spam, self) | |
118 | - end | |
119 | - | |
120 | 127 | def notify_by_mail |
121 | 128 | if source.kind_of?(Article) && article.notify_comments? |
122 | 129 | if !notification_emails.empty? |
... | ... | @@ -203,25 +210,6 @@ class Comment < ActiveRecord::Base |
203 | 210 | @rejected = true |
204 | 211 | end |
205 | 212 | |
206 | - include Spammable | |
207 | - | |
208 | - def after_spam! | |
209 | - SpammerLogger.log(ip_address, self) | |
210 | - Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_spam)) | |
211 | - end | |
212 | - | |
213 | - def after_ham! | |
214 | - Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_ham)) | |
215 | - end | |
216 | - | |
217 | - def marked_as_spam | |
218 | - plugins.dispatch(:comment_marked_as_spam, self) | |
219 | - end | |
220 | - | |
221 | - def marked_as_ham | |
222 | - plugins.dispatch(:comment_marked_as_ham, self) | |
223 | - end | |
224 | - | |
225 | 213 | def need_moderation? |
226 | 214 | article.moderate_comments? && (author.nil? || article.author != author) |
227 | 215 | end | ... | ... |
app/models/suggest_article.rb
... | ... | @@ -23,10 +23,6 @@ class SuggestArticle < Task |
23 | 23 | |
24 | 24 | include Noosfero::Plugin::HotSpot |
25 | 25 | |
26 | - def check_for_spam | |
27 | - plugins.dispatch(:check_suggest_article_for_spam, self) | |
28 | - end | |
29 | - | |
30 | 26 | def sender |
31 | 27 | "#{name} (#{email})" |
32 | 28 | end |
... | ... | @@ -84,13 +80,4 @@ class SuggestArticle < Task |
84 | 80 | def after_ham! |
85 | 81 | self.delay.marked_as_ham |
86 | 82 | end |
87 | - | |
88 | - def marked_as_spam | |
89 | - plugins.dispatch(:suggest_article_marked_as_spam, self) | |
90 | - end | |
91 | - | |
92 | - def marked_as_ham | |
93 | - plugins.dispatch(:suggest_article_marked_as_ham, self) | |
94 | - end | |
95 | - | |
96 | 83 | end | ... | ... |
config/initializers/plugins.rb
lib/noosfero/plugin.rb
... | ... | @@ -308,45 +308,16 @@ class Noosfero::Plugin |
308 | 308 | scope |
309 | 309 | end |
310 | 310 | |
311 | - # This method is called by the CommentHandler background job before sending | |
312 | - # the notification email. If the comment is marked as spam (i.e. by calling | |
313 | - # <tt>comment.spam!</tt>), then the notification email will *not* be sent. | |
314 | - # | |
315 | - # example: | |
316 | - # | |
317 | - # def check_comment_for_spam(comment) | |
318 | - # if anti_spam_service.is_spam?(comment) | |
319 | - # comment.spam! | |
320 | - # end | |
321 | - # end | |
322 | - # | |
323 | - def check_comment_for_spam(comment) | |
311 | + # -> Allows plugins to check weather object is a spam | |
312 | + def check_for_spam(object) | |
324 | 313 | end |
325 | 314 | |
326 | - # This method is called when the user manually marks a comment as SPAM. A | |
327 | - # plugin implementing this method should train its spam detection mechanism | |
328 | - # by submitting this comment as a confirmed spam. | |
329 | - # | |
330 | - # example: | |
331 | - # | |
332 | - # def comment_marked_as_spam(comment) | |
333 | - # anti_spam_service.train_with_spam(comment) | |
334 | - # end | |
335 | - # | |
336 | - def comment_marked_as_spam(comment) | |
315 | + # -> Allows plugins to know when an object is marked as a spam | |
316 | + def marked_as_spam(object) | |
337 | 317 | end |
338 | 318 | |
339 | - # This method is called when the user manually marks a comment a NOT SPAM. A | |
340 | - # plugin implementing this method should train its spam detection mechanism | |
341 | - # by submitting this coimment as a confirmed ham. | |
342 | - # | |
343 | - # example: | |
344 | - # | |
345 | - # def comment_marked_as_ham(comment) | |
346 | - # anti_spam_service.train_with_ham(comment) | |
347 | - # end | |
348 | - # | |
349 | - def comment_marked_as_ham(comment) | |
319 | + # -> Allows plugins to know when an object is marked as a ham | |
320 | + def marked_as_ham(object) | |
350 | 321 | end |
351 | 322 | |
352 | 323 | # Adds extra actions for comments | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +Spammable.module_eval do | |
2 | + def marked_as_spam | |
3 | + plugins.dispatch(:marked_as_spam, self) | |
4 | + end | |
5 | + | |
6 | + def marked_as_ham | |
7 | + plugins.dispatch(:marked_as_ham, self) | |
8 | + end | |
9 | + | |
10 | + def check_for_spam | |
11 | + plugins.dispatch(:check_for_spam, self) | |
12 | + end | |
13 | +end | ... | ... |
plugins/anti_spam/test/unit/anti_spam_plugin_test.rb
test/unit/comment_test.rb
... | ... | @@ -447,7 +447,7 @@ class CommentTest < ActiveSupport::TestCase |
447 | 447 | end |
448 | 448 | |
449 | 449 | class EverythingIsSpam < Noosfero::Plugin |
450 | - def check_comment_for_spam(comment) | |
450 | + def check_for_spam(comment) | |
451 | 451 | comment.spam! |
452 | 452 | end |
453 | 453 | end |
... | ... | @@ -469,11 +469,11 @@ class CommentTest < ActiveSupport::TestCase |
469 | 469 | attr_accessor :marked_as_ham |
470 | 470 | end |
471 | 471 | |
472 | - def comment_marked_as_spam(c) | |
472 | + def marked_as_spam(c) | |
473 | 473 | self.class.marked_as_spam = c |
474 | 474 | end |
475 | 475 | |
476 | - def comment_marked_as_ham(c) | |
476 | + def marked_as_ham(c) | |
477 | 477 | self.class.marked_as_ham = c |
478 | 478 | end |
479 | 479 | end | ... | ... |
test/unit/suggest_article_test.rb
... | ... | @@ -151,8 +151,8 @@ class SuggestArticleTest < ActiveSupport::TestCase |
151 | 151 | end |
152 | 152 | |
153 | 153 | class EverythingIsSpam < Noosfero::Plugin |
154 | - def check_suggest_article_for_spam(suggest_article) | |
155 | - suggest_article.spam! | |
154 | + def check_for_spam(object) | |
155 | + object.spam! | |
156 | 156 | end |
157 | 157 | end |
158 | 158 | |
... | ... | @@ -161,7 +161,7 @@ class SuggestArticleTest < ActiveSupport::TestCase |
161 | 161 | |
162 | 162 | t1 = build(SuggestArticle, :target => @profile, :article_name => 'suggested article', :name => 'johndoe', :email => 'johndoe@example.com') |
163 | 163 | |
164 | - EverythingIsSpam.any_instance.expects(:check_suggest_article_for_spam) | |
164 | + EverythingIsSpam.any_instance.expects(:check_for_spam) | |
165 | 165 | |
166 | 166 | t1.check_for_spam |
167 | 167 | end |
... | ... | @@ -172,15 +172,15 @@ class SuggestArticleTest < ActiveSupport::TestCase |
172 | 172 | attr_accessor :marked_as_ham |
173 | 173 | end |
174 | 174 | |
175 | - def check_suggest_article_for_spam(c) | |
175 | + def check_for_spam(c) | |
176 | 176 | # do nothing |
177 | 177 | end |
178 | 178 | |
179 | - def suggest_article_marked_as_spam(c) | |
179 | + def marked_as_spam(c) | |
180 | 180 | self.class.marked_as_spam = c |
181 | 181 | end |
182 | 182 | |
183 | - def suggest_article_marked_as_ham(c) | |
183 | + def marked_as_ham(c) | |
184 | 184 | self.class.marked_as_ham = c |
185 | 185 | end |
186 | 186 | end | ... | ... |