Class: Ruleby::Rulebook

Inherits:
Object
  • Object
show all
Includes:
Ruleby
Defined in:
lib/rulebook.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(engine, session = {}) ⇒ Rulebook

Returns a new instance of Rulebook.



20
21
22
23
# File 'lib/rulebook.rb', line 20

def initialize(engine, session={})
  @engine = engine
  @session = session
end

Instance Attribute Details

#engineObject (readonly)

Returns the value of attribute engine.



25
26
27
# File 'lib/rulebook.rb', line 25

def engine
  @engine
end

#sessionObject (readonly)

Returns the value of attribute session.



26
27
28
# File 'lib/rulebook.rb', line 26

def session
  @session
end

Instance Method Details

#__eval__(x) ⇒ Object



86
87
88
# File 'lib/rulebook.rb', line 86

def __eval__(x)
  eval(x)
end

#assert(fact) ⇒ Object



28
29
30
# File 'lib/rulebook.rb', line 28

def assert(fact)
  @engine.assert fact
end

#b(variable_name) ⇒ Object



70
71
72
# File 'lib/rulebook.rb', line 70

def b(variable_name)
  Ruleby::Ferrari::BindingBuilder.new(variable_name)
end

#binding(variable_name) ⇒ Object



74
75
76
# File 'lib/rulebook.rb', line 74

def binding(variable_name)
  b
end

#c(&block) ⇒ Object



78
79
80
# File 'lib/rulebook.rb', line 78

def c(&block)
  return lambda(&block)
end

#condition(&block) ⇒ Object



82
83
84
# File 'lib/rulebook.rb', line 82

def condition(&block)
  return lambda(&block)
end

#mObject



62
63
64
# File 'lib/rulebook.rb', line 62

def m
  Ruleby::Ferrari::MethodBuilder.new
end

#methodObject



66
67
68
# File 'lib/rulebook.rb', line 66

def method
  m
end

#modify(fact) ⇒ Object



34
35
36
# File 'lib/rulebook.rb', line 34

def modify(fact)
  @engine.modify fact
end

#retract(fact) ⇒ Object



31
32
33
# File 'lib/rulebook.rb', line 31

def retract(fact)
  @engine.retract fact
end

#rule(*args, &block) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rulebook.rb', line 37

def rule(*args, &block)
  unless args.empty?
    name = args[0].kind_of?(Symbol) ? args.shift : GeneratedTag.new
  end

  if args.empty?
    # use steel DSL
    r = Steel::RulebookHelper.new @engine
    r.rule name, &block
  else
    i = args[0].kind_of?(Hash) ? 1 : 0
    if args[i].kind_of? Array
      # use ferrari DSL
      r = Ferrari::RulebookHelper.new @engine
      r.rule name, *args, &block
    elsif args[i].kind_of? String
      # use letigre DSL
      r = LeTigre::RulebookHelper.new @engine, self
      r.rule name, *args, &block
    else
      raise 'Rule format not recognized.'
    end
  end
end