def run
keys = @rule.keys - SKIP
validation = (@rule.keys & BOOLEANS).empty?
if validation and @fields.empty? and keys.empty?
fl = @rule['fields'] || @rule['field'] || @rule['f']
return [ [ @rule, fl, nil ] ]
end
@fields.collect { |field, value, matches|
valid = nil
if keys.empty?
valid = (value != nil)
else
keys.each do |k|
v = @rule[k]
m = "_#{k}"
next unless self.respond_to?(m)
r = self.send(m, field, value, matches, k, v)
valid = false if r == false
end
end
raise_or_and(valid, field, value)
}.compact
end