Replace the spam observer with simple after_save callbacks
authorTom Hughes <tom@compton.nu>
Tue, 25 Jun 2013 20:54:02 +0000 (21:54 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 25 Jun 2013 20:54:02 +0000 (21:54 +0100)
app/models/diary_comment.rb
app/models/diary_entry.rb
app/models/spam_observer.rb [deleted file]
app/models/user.rb
config/application.rb

index 075d288edb8e0b644970b7b515a4f6967506abbe..bea1c7f0d5b83bac5e31b0761a0027694144d588 100644 (file)
@@ -8,6 +8,7 @@ class DiaryComment < ActiveRecord::Base
   attr_accessible :body
 
   after_initialize :set_defaults
+  after_save :spam_check
 
   def body
     RichText.new(read_attribute(:body_format), read_attribute(:body))
@@ -27,4 +28,8 @@ private
   def set_defaults
     self.body_format = "markdown" unless self.attribute_present?(:body_format)
   end
+
+  def spam_check
+    user.spam_check
+  end
 end
index 99a56b2ce1b8c4486110c4a9ba5662be171c3667..de2a42ae3a36c118edef60913b56d98aecb85316 100644 (file)
@@ -27,6 +27,7 @@ class DiaryEntry < ActiveRecord::Base
   attr_accessible :title, :body, :language_code, :latitude, :longitude
 
   after_initialize :set_defaults
+  after_save :spam_check
 
   def body
     RichText.new(read_attribute(:body_format), read_attribute(:body))
@@ -37,4 +38,8 @@ private
   def set_defaults
     self.body_format = "markdown" unless self.attribute_present?(:body_format)
   end
+
+  def spam_check
+    user.spam_check
+  end
 end
diff --git a/app/models/spam_observer.rb b/app/models/spam_observer.rb
deleted file mode 100644 (file)
index 07fa84f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-class SpamObserver < ActiveRecord::Observer
-  observe User, DiaryEntry, DiaryComment
-
-  def after_save(record)
-    case
-    when record.is_a?(User) then user = record
-    when record.is_a?(DiaryEntry) then user = record.user
-    when record.is_a?(DiaryComment) then user = record.user
-    end
-
-    if user.status == "active" and user.spam_score > SPAM_THRESHOLD
-      user.update_column(:status, "suspended")
-    end
-  end
-end
index 778afbf8a9c7ae26d76339905209a447ae9e92eb..6677d3b98372585e2a8ffacc1b5b6aa722fe17ca 100644 (file)
@@ -52,6 +52,7 @@ class User < ActiveRecord::Base
 
   after_initialize :set_defaults
   before_save :encrypt_password
+  after_save :spam_check
 
   has_attached_file :image,
     :default_url => "/assets/:class/:attachment/:style.png",
@@ -216,6 +217,14 @@ class User < ActiveRecord::Base
     return score.to_i
   end
 
+  ##
+  # perform a spam check on a user
+  def spam_check
+    if status == "active" and spam_score > SPAM_THRESHOLD
+      update_column(:status, "suspended")
+    end
+  end
+
   ##
   # return an oauth access token for a specified application
   def access_token(application_key)
index 879f5714d560659e2ebb876f72f95d7dc4e8efc1..d510a6a7c3ed31bc2f756baaf85d9bd95f959a0f 100644 (file)
@@ -32,11 +32,6 @@ module OpenStreetMap
     # :all can be used as a placeholder for all plugins not explicitly named.
     # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
 
-    # Activate observers that should always be running.
-    unless STATUS == :database_offline
-      config.active_record.observers = :spam_observer
-    end
-
     # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
     # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
     # config.time_zone = 'Central Time (US & Canada)'