+ self.openid_url = nil
+ self.status = "deleted"
+ save
+ end
+
+ ##
+ # return a spam score for a user
+ def spam_score
+ changeset_score = changesets.size * 50
+ trace_score = traces.size * 50
+ diary_entry_score = diary_entries.inject(0) { |a, e| a + e.body.spam_score }
+ diary_comment_score = diary_comments.inject(0) { |a, e| a + e.body.spam_score }
+
+ score = description.spam_score / 4.0
+ score += diary_entries.where("created_at > ?", 1.day.ago).count * 10
+ score += diary_entry_score / diary_entries.length if diary_entries.length > 0
+ score += diary_comment_score / diary_comments.length if diary_comments.length > 0
+ score -= changeset_score
+ score -= trace_score
+
+ score.to_i
+ end
+
+ ##
+ # perform a spam check on a user
+ def spam_check
+ if status == "active" && spam_score > SPAM_THRESHOLD
+ update_column(:status, "suspended")
+ end
+ end
+
+ ##
+ # return an oauth access token for a specified application
+ def access_token(application_key)
+ ClientApplication.find_by_key(application_key).access_token_for_user(self)