class InMailbox < ApplicationMailbox def process email_importer = EmailImporter.new repository = EmailRepository.new rules_evaluator = RulesEvaluator.new email = email_importer.import(mail) RuleSet.enabled.each do |rule_set| if rules_evaluator.evaluate(email, rule_set) rule_set.actions.enabled.each do |action| klass = action.class_name.constantize email = klass.new.process(email) rescue NameError => ex # TODO: log a warning end end end repository.save(email) end end