Sha256: 1d4d4d12d9b8cfddccc660ab0c1170123b542e5b9ee9d9455f438a926a584d66

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

module RulesEngine
  ##################################################################
  class Discovery
    
    RULES_PATH = File.expand_path(File.join(RAILS_ROOT, '/app/rules'))
    @rule_classes = nil
    @rule_groups = nil
        
    class << self
      def discover!
        @rule_classes = []
        @rule_groups = {}
        
        Dir.glob("#{ RULES_PATH }/**/*.rb").each do |rule| 
          require rule
          
          rule_class = Kernel.const_get(File.basename(rule, '.rb').classify)
          @rule_classes << rule_class
          
          group = rule_class.options[:group]
          @rule_groups[group] = [] unless @rule_groups.include?(group)
          @rule_groups[group] << rule_class
          
        end  
        
        @rule_classes.sort! { |left, right| return left.to_s < right.to_s}
        @rule_groups.each { |group, rule_classes| rule_classes.sort!  { |left, right| return left.to_s < right.to_s} }
        @rule_groups.each { |key, value| value.sort }
      end
    
      def rule_classes
        throw Exception.new("RulesEngine::Discovery.discover! required in environment.rb") if @rule_classes.nil?
        @rule_classes
      end

      def rule_groups
        throw Exception.new("RulesEngine::Discovery.discover! required in environment.rb") if @rule_classes.nil?
        @rule_groups
      end
    
      def rule_class(rule_class)
        throw Exception.new("RulesEngine::Discovery.discover! required in environment.rb") if @rule_classes.nil?
        @rule_classes.each do |rule|
          return rule if rule.rule_class == rule_class
        end
        nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rules_engine-0.0.1 lib/rules_engine/discovery.rb