module RulesEngine module Rule class <%=rule_class%> < RulesEngine::Rule::Definition ################################################################## # class options self.options = { :group => 'Twitter', :display_name => 'Tweet Word Splitter', :help_partial => '/re_rule_definitions/<%=rule_name%>/help', :new_partial => '/re_rule_definitions/<%=rule_name%>/new', :edit_partial => '/re_rule_definitions/<%=rule_name%>/edit' } ################################################################## # set the rule data def data= data if data.nil? @title = nil else @title, ignore = ActiveSupport::JSON.decode(data) end end ################################################################## # get the rule attributes def title @title end def summary "splits the tweet into seperate words and puts the array into the data as :tweet_words" end def data [title].to_json end def expected_outcomes [:outcome => RulesEngine::Rule::Outcome::NEXT] end ################################################################## # set the rule attributes def attributes=(params) param_hash = params.symbolize_keys @title = param_hash[:<%=rule_name%>_title] end ################################################################## # validation and errors def valid? @errors = {} @errors[:<%=rule_name%>_title] = "Title required" if title.blank? return @errors.empty? end ################################################################## # callbacks when the rule is added and removed from a workflow def before_create() end def before_update() end def before_destroy() end ################################################################## # execute the rule # this rule does nothing def process(process_id, data) tweet = data[:tweet] || "" words = tweet.strip.downcase.split(/ /).map do |word| word.split(/\b/) end tweet_words = words.map do |word| if word[0] == '#' "##{word[1]}" elsif word[0] == '@' "@#{word[1]}" elsif word[0] == 'http' word.join() elsif word[0] && word[0].gsub(/[^a-z]+/, '').length > 0 word[0] end end data[:tweet_words] = tweet_words.compact RulesEngine::Rule::Outcome.new(RulesEngine::Rule::Outcome::NEXT) end end end end