Commit eb86a96443d743f02dbbd4393bee48269c4eda79
1 parent
13bd4e38
Exists in
master
and in
29 other branches
spammable: encapsulate the spam logic to a module
Showing
5 changed files
with
54 additions
and
49 deletions
Show diff stats
app/models/comment.rb
... | ... | @@ -16,9 +16,7 @@ class Comment < ActiveRecord::Base |
16 | 16 | has_many :children, :class_name => 'Comment', :foreign_key => 'reply_of_id', :dependent => :destroy |
17 | 17 | belongs_to :reply_of, :class_name => 'Comment', :foreign_key => 'reply_of_id' |
18 | 18 | |
19 | - named_scope :without_spam, :conditions => ['spam IS NULL OR spam = ?', false] | |
20 | 19 | named_scope :without_reply, :conditions => ['reply_of_id IS NULL'] |
21 | - named_scope :spam, :conditions => ['spam = ?', true] | |
22 | 20 | |
23 | 21 | # unauthenticated authors: |
24 | 22 | validates_presence_of :name, :if => (lambda { |record| !record.email.blank? }) |
... | ... | @@ -205,27 +203,15 @@ class Comment < ActiveRecord::Base |
205 | 203 | @rejected = true |
206 | 204 | end |
207 | 205 | |
208 | - def spam? | |
209 | - !spam.nil? && spam | |
210 | - end | |
211 | - | |
212 | - def ham? | |
213 | - !spam.nil? && !spam | |
214 | - end | |
206 | + include Spammable | |
215 | 207 | |
216 | - def spam! | |
217 | - self.spam = true | |
218 | - self.save! | |
208 | + def after_spam! | |
219 | 209 | SpammerLogger.log(ip_address, self) |
220 | 210 | Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_spam)) |
221 | - self | |
222 | 211 | end |
223 | 212 | |
224 | - def ham! | |
225 | - self.spam = false | |
226 | - self.save! | |
213 | + def after_ham! | |
227 | 214 | Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_ham)) |
228 | - self | |
229 | 215 | end |
230 | 216 | |
231 | 217 | def marked_as_spam | ... | ... |
app/models/suggest_article.rb
... | ... | @@ -76,17 +76,13 @@ class SuggestArticle < Task |
76 | 76 | _('You need to login on %{system} in order to approve or reject this article.') % { :system => target.environment.name } |
77 | 77 | end |
78 | 78 | |
79 | - def spam! | |
80 | - super | |
79 | + def after_spam! | |
81 | 80 | SpammerLogger.log(ip_address, self) |
82 | 81 | self.delay.marked_as_spam |
83 | - self | |
84 | 82 | end |
85 | 83 | |
86 | - def ham! | |
87 | - super | |
84 | + def after_ham! | |
88 | 85 | self.delay.marked_as_ham |
89 | - self | |
90 | 86 | end |
91 | 87 | |
92 | 88 | def marked_as_spam | ... | ... |
app/models/task.rb
... | ... | @@ -235,25 +235,7 @@ class Task < ActiveRecord::Base |
235 | 235 | end |
236 | 236 | end |
237 | 237 | |
238 | - def spam? | |
239 | - !spam.nil? && spam | |
240 | - end | |
241 | - | |
242 | - def ham? | |
243 | - !spam.nil? && !spam | |
244 | - end | |
245 | - | |
246 | - def spam! | |
247 | - self.spam = true | |
248 | - self.save! | |
249 | - self | |
250 | - end | |
251 | - | |
252 | - def ham! | |
253 | - self.spam = false | |
254 | - self.save! | |
255 | - self | |
256 | - end | |
238 | + include Spammable | |
257 | 239 | |
258 | 240 | protected |
259 | 241 | |
... | ... | @@ -294,8 +276,6 @@ class Task < ActiveRecord::Base |
294 | 276 | named_scope :opened, :conditions => { :status => [Task::Status::ACTIVE, Task::Status::HIDDEN] } |
295 | 277 | named_scope :of, lambda { |type| conditions = type ? "type LIKE '#{type}'" : "1=1"; {:conditions => [conditions]} } |
296 | 278 | named_scope :order_by, lambda { |attribute, ord| {:order => "#{attribute} #{ord}"} } |
297 | - named_scope :without_spam, :conditions => ['spam IS NULL OR spam = ?', false] | |
298 | - named_scope :spam, :conditions => ['spam = ?', true] | |
299 | 279 | |
300 | 280 | |
301 | 281 | named_scope :to, lambda { |profile| | ... | ... |
... | ... | @@ -0,0 +1,44 @@ |
1 | +module Spammable | |
2 | + def self.included(recipient) | |
3 | + recipient.extend(ClassMethods) | |
4 | + end | |
5 | + | |
6 | + module ClassMethods | |
7 | + def self.extended (base) | |
8 | + base.class_eval do | |
9 | + named_scope :without_spam, :conditions => ['spam IS NULL OR spam = ?', false] | |
10 | + named_scope :spam, :conditions => ['spam = ?', true] | |
11 | + end | |
12 | + end | |
13 | + end | |
14 | + | |
15 | + def spam? | |
16 | + !spam.nil? && spam | |
17 | + end | |
18 | + | |
19 | + def ham? | |
20 | + !spam.nil? && !spam | |
21 | + end | |
22 | + | |
23 | + def spam! | |
24 | + before_spam! | |
25 | + self.spam = true | |
26 | + self.save! | |
27 | + after_spam! | |
28 | + self | |
29 | + end | |
30 | + | |
31 | + def ham! | |
32 | + before_ham! | |
33 | + self.spam = false | |
34 | + self.save! | |
35 | + after_ham! | |
36 | + self | |
37 | + end | |
38 | + | |
39 | + def after_spam!; end | |
40 | + def before_spam!; end | |
41 | + | |
42 | + def after_ham!; end | |
43 | + def before_ham!; end | |
44 | +end | ... | ... |
plugins/anti_spam/test/unit/anti_spam_plugin_test.rb
... | ... | @@ -2,24 +2,23 @@ require 'test_helper' |
2 | 2 | |
3 | 3 | class AntiSpamPluginTest < ActiveSupport::TestCase |
4 | 4 | |
5 | - class Spammable | |
5 | + class SpammableContent | |
6 | 6 | attr_accessor :spam |
7 | + include Spammable | |
7 | 8 | |
8 | 9 | def save!; end |
9 | - def spam!; end | |
10 | - def ham!; end | |
11 | - def spam?; true; end | |
12 | 10 | def environment; Environment.default; end |
13 | 11 | end |
14 | 12 | |
15 | 13 | def setup |
16 | - @spammable = Spammable.new | |
14 | + @spammable = SpammableContent.new | |
17 | 15 | @plugin = AntiSpamPlugin.new |
18 | 16 | end |
19 | 17 | |
20 | 18 | attr_accessor :spammable |
21 | 19 | |
22 | 20 | should 'check for spam and mark as spam if server says it is spam' do |
21 | + spammable.expects(:spam?).returns(true) | |
23 | 22 | spammable.expects(:save!) |
24 | 23 | |
25 | 24 | @plugin.check_for_spam(spammable) | ... | ... |