# File lib/ruote/util/filter.rb, line 185
    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 ] ] # validation break
      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