Class: RulesEngine::Discovery

Inherits:
Object
  • Object
show all
Defined in:
lib/rules_engine/discovery.rb

Constant Summary collapse

RULES_PATH =
File.expand_path(File.join(RAILS_ROOT, '/app/rules'))

Class Method Summary collapse

Class Method Details

.discover!Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/rules_engine/discovery.rb', line 9

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

.rule_class(rule_class_name) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/rules_engine/discovery.rb', line 40

def rule_class(rule_class_name)
  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_name == rule_class_name
  end
  nil
end

.rule_classesObject



30
31
32
33
# File 'lib/rules_engine/discovery.rb', line 30

def rule_classes
  throw Exception.new("RulesEngine::Discovery.discover! required in environment.rb") if @rule_classes.nil?
  @rule_classes
end

.rule_groupsObject



35
36
37
38
# File 'lib/rules_engine/discovery.rb', line 35

def rule_groups
  throw Exception.new("RulesEngine::Discovery.discover! required in environment.rb") if @rule_classes.nil?
  @rule_groups
end