require 'json' module GnipRule class Rule attr_accessor :value, :tag def initialize(value, tag=nil) @value = value @tag = tag end def valid? return false if too_long? return false if too_many_positive_terms? return false if contains_stop_word? return false if contains_empty_source? return false if contains_negated_or? true end # NOTE: Unused variable for consistency with other to_rule impls def to_rule(_=nil) self end def to_json to_hash.to_json end def to_hash obj = {:value => @value} obj[:tag] = @tag unless @tag.nil? obj end def to_s to_json end protected def contains_stop_word? stop_words = %W(a an and AND at but by com from http https if in is it its me my NOT or rt the this to too via we www you) (stop_words & @value.gsub(/\"[^\"]*\"/, '').split(/\s/)).size > 0 end def too_long? @value.size > 2048 end def contains_negated_or? !@value[/\-\w+ OR/].nil? || !@value[/OR \-\w+/].nil? end def too_many_positive_terms? @value.scan(/\b\w+|\"[\-\s\w]+\"\b/).size > 30 end def contains_empty_source? !@value[/source\:\s/].nil? end end end