class Splam::Rule

Attributes

default_rules[RW]

Global set of rules for all splammable classes. By default it is an array of all Splam::Rule subclasses. It can be set to a subset of all rules, or even a hash with specified weights.

self.default_rules = [:bad_words, :bbcode]
self.default_rules = {:bad_words => 0.5, :bbcode => 7}
rules[R]

Index linking all splam_keys to the rule classes. This is populated automatically.

splam_key[W]
body[R]
reasons[RW]
score[RW]
suite[R]
weight[R]

Public Class Methods

inherited(_subclass) click to toggle source
Calls superclass method
# File lib/splam/rule.rb, line 42
def self.inherited(_subclass)
  @rules      ||= {}
  @default_rules ||= []
  @default_rules << _subclass
  _subclass.splam_key
  super
end
new(suite, record, weight = 1.0, request = nil) click to toggle source
# File lib/splam/rule.rb, line 33
def initialize(suite, record, weight = 1.0, request = nil)
  @suite, @weight, @score, @reasons, @body, @request = suite, weight, 0, [], record.send(suite.body), request
  @user = record.user # todo: customize user field
end
run(*args) click to toggle source
# File lib/splam/rule.rb, line 26
def run(*args)
  rule = new(*args)
  rule.run
  rule
end
splam_key() click to toggle source
# File lib/splam/rule.rb, line 15
def splam_key
  @splam_key || (self.splam_key = name.demodulize.underscore.to_sym)
end

Public Instance Methods

add_score(points, reason) click to toggle source
# File lib/splam/rule.rb, line 66
def add_score(points, reason)
  @score ||= 0
  if points != 0
    @reasons << "#{name}: [#{points}#{" * #{weight}" if weight != 1}] #{reason}"
    points = points * weight.to_i
    @score += points
  end
end
line_safe?(string) click to toggle source
# File lib/splam/rule.rb, line 75
def line_safe?(string)
  ([
    /\.dylib\b/,
    /\b0x[0-9a-f]{6,16}\b/i,
    /\b\/Applications\//,
    /\b\/System\/Library\//,
    /\bLibrary\/Application Support\//
  ].map {|r| r.match string }).compact.size > 0
end
name() click to toggle source
# File lib/splam/rule.rb, line 38
def name
  self.class.splam_key
end
run() click to toggle source

Overload this method to run your rule. Call add_score to modify the suite's splam score.

def run
  add_score -5, 'water'
  add_score  5, 'PBR'
  add_score 10, 'black butte'
  add_score 30, 'red wine'
  add_score 95, 'everclear'
end
# File lib/splam/rule.rb, line 63
def run
end