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