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,6 +106,17 @@ class Comment < ActiveRecord::Base | ||
106 | 106 | ||
107 | include Noosfero::Plugin::HotSpot | 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 | def verify_and_notify | 120 | def verify_and_notify |
110 | check_for_spam | 121 | check_for_spam |
111 | unless spam? | 122 | unless spam? |
@@ -113,10 +124,6 @@ class Comment < ActiveRecord::Base | @@ -113,10 +124,6 @@ class Comment < ActiveRecord::Base | ||
113 | end | 124 | end |
114 | end | 125 | end |
115 | 126 | ||
116 | - def check_for_spam | ||
117 | - plugins.dispatch(:check_comment_for_spam, self) | ||
118 | - end | ||
119 | - | ||
120 | def notify_by_mail | 127 | def notify_by_mail |
121 | if source.kind_of?(Article) && article.notify_comments? | 128 | if source.kind_of?(Article) && article.notify_comments? |
122 | if !notification_emails.empty? | 129 | if !notification_emails.empty? |
@@ -203,25 +210,6 @@ class Comment < ActiveRecord::Base | @@ -203,25 +210,6 @@ class Comment < ActiveRecord::Base | ||
203 | @rejected = true | 210 | @rejected = true |
204 | end | 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 | def need_moderation? | 213 | def need_moderation? |
226 | article.moderate_comments? && (author.nil? || article.author != author) | 214 | article.moderate_comments? && (author.nil? || article.author != author) |
227 | end | 215 | end |
app/models/suggest_article.rb
@@ -23,10 +23,6 @@ class SuggestArticle < Task | @@ -23,10 +23,6 @@ class SuggestArticle < Task | ||
23 | 23 | ||
24 | include Noosfero::Plugin::HotSpot | 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 | def sender | 26 | def sender |
31 | "#{name} (#{email})" | 27 | "#{name} (#{email})" |
32 | end | 28 | end |
@@ -84,13 +80,4 @@ class SuggestArticle < Task | @@ -84,13 +80,4 @@ class SuggestArticle < Task | ||
84 | def after_ham! | 80 | def after_ham! |
85 | self.delay.marked_as_ham | 81 | self.delay.marked_as_ham |
86 | end | 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 | end | 83 | end |
config/initializers/plugins.rb
@@ -4,4 +4,5 @@ require 'noosfero/plugin/manager' | @@ -4,4 +4,5 @@ require 'noosfero/plugin/manager' | ||
4 | require 'noosfero/plugin/active_record' | 4 | require 'noosfero/plugin/active_record' |
5 | require 'noosfero/plugin/mailer_base' | 5 | require 'noosfero/plugin/mailer_base' |
6 | require 'noosfero/plugin/settings' | 6 | require 'noosfero/plugin/settings' |
7 | +require 'noosfero/plugin/spammable' | ||
7 | Noosfero::Plugin.init_system if $NOOSFERO_LOAD_PLUGINS | 8 | Noosfero::Plugin.init_system if $NOOSFERO_LOAD_PLUGINS |
lib/noosfero/plugin.rb
@@ -308,45 +308,16 @@ class Noosfero::Plugin | @@ -308,45 +308,16 @@ class Noosfero::Plugin | ||
308 | scope | 308 | scope |
309 | end | 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 | end | 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 | end | 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 | end | 321 | end |
351 | 322 | ||
352 | # Adds extra actions for comments | 323 | # Adds extra actions for comments |
@@ -0,0 +1,13 @@ | @@ -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
@@ -4,6 +4,8 @@ class AntiSpamPluginTest < ActiveSupport::TestCase | @@ -4,6 +4,8 @@ class AntiSpamPluginTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | class SpammableContent | 5 | class SpammableContent |
6 | attr_accessor :spam | 6 | attr_accessor :spam |
7 | + def self.named_scope(*args); end | ||
8 | + | ||
7 | include Spammable | 9 | include Spammable |
8 | 10 | ||
9 | def save!; end | 11 | def save!; end |
test/unit/comment_test.rb
@@ -447,7 +447,7 @@ class CommentTest < ActiveSupport::TestCase | @@ -447,7 +447,7 @@ class CommentTest < ActiveSupport::TestCase | ||
447 | end | 447 | end |
448 | 448 | ||
449 | class EverythingIsSpam < Noosfero::Plugin | 449 | class EverythingIsSpam < Noosfero::Plugin |
450 | - def check_comment_for_spam(comment) | 450 | + def check_for_spam(comment) |
451 | comment.spam! | 451 | comment.spam! |
452 | end | 452 | end |
453 | end | 453 | end |
@@ -469,11 +469,11 @@ class CommentTest < ActiveSupport::TestCase | @@ -469,11 +469,11 @@ class CommentTest < ActiveSupport::TestCase | ||
469 | attr_accessor :marked_as_ham | 469 | attr_accessor :marked_as_ham |
470 | end | 470 | end |
471 | 471 | ||
472 | - def comment_marked_as_spam(c) | 472 | + def marked_as_spam(c) |
473 | self.class.marked_as_spam = c | 473 | self.class.marked_as_spam = c |
474 | end | 474 | end |
475 | 475 | ||
476 | - def comment_marked_as_ham(c) | 476 | + def marked_as_ham(c) |
477 | self.class.marked_as_ham = c | 477 | self.class.marked_as_ham = c |
478 | end | 478 | end |
479 | end | 479 | end |
test/unit/suggest_article_test.rb
@@ -151,8 +151,8 @@ class SuggestArticleTest < ActiveSupport::TestCase | @@ -151,8 +151,8 @@ class SuggestArticleTest < ActiveSupport::TestCase | ||
151 | end | 151 | end |
152 | 152 | ||
153 | class EverythingIsSpam < Noosfero::Plugin | 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 | end | 156 | end |
157 | end | 157 | end |
158 | 158 | ||
@@ -161,7 +161,7 @@ class SuggestArticleTest < ActiveSupport::TestCase | @@ -161,7 +161,7 @@ class SuggestArticleTest < ActiveSupport::TestCase | ||
161 | 161 | ||
162 | t1 = build(SuggestArticle, :target => @profile, :article_name => 'suggested article', :name => 'johndoe', :email => 'johndoe@example.com') | 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 | t1.check_for_spam | 166 | t1.check_for_spam |
167 | end | 167 | end |
@@ -172,15 +172,15 @@ class SuggestArticleTest < ActiveSupport::TestCase | @@ -172,15 +172,15 @@ class SuggestArticleTest < ActiveSupport::TestCase | ||
172 | attr_accessor :marked_as_ham | 172 | attr_accessor :marked_as_ham |
173 | end | 173 | end |
174 | 174 | ||
175 | - def check_suggest_article_for_spam(c) | 175 | + def check_for_spam(c) |
176 | # do nothing | 176 | # do nothing |
177 | end | 177 | end |
178 | 178 | ||
179 | - def suggest_article_marked_as_spam(c) | 179 | + def marked_as_spam(c) |
180 | self.class.marked_as_spam = c | 180 | self.class.marked_as_spam = c |
181 | end | 181 | end |
182 | 182 | ||
183 | - def suggest_article_marked_as_ham(c) | 183 | + def marked_as_ham(c) |
184 | self.class.marked_as_ham = c | 184 | self.class.marked_as_ham = c |
185 | end | 185 | end |
186 | end | 186 | end |