Open robblovell opened 14 years ago
@robblovell Try the following syntax:
require 'ruleby'
class Q
attr_accessor :status, :message, :value
def initialize(status, message, value)
@status, @message, @value = status, message, value
puts "status[%s] message[%s] value[%d]" % [@status, @message, @value]
end
end
class HelloWorldRulebook < Ruleby::Rulebook
def rules
rule [Q, :p, { m.value => :pv }, m.status == :HELLO],
[Q, :q, m.status == :GOODBYE, m.value(:pv, &c{ |qv, pv| qv == pv })] do |v|
puts v[:p].message + " " + v[:q].message
end
rule [Q, :p, { m.value => :pv }, m.status == :HELLO],
[Q, :q, m.status == :GOODBYE,m.value(:pv, &c{ |qv, pv| qv == pv })] do |v|
puts v[:p].message + " " + v[:q].message
end
end
end
include Ruleby
engine :engine do |e|
r=HelloWorldRulebook.new(e)
r.rules
e.assert Q.new(:HELLO, 'Hello', 1)
e.assert Q.new(:GOODBYE, 'World', 1)
e.match
end
This results in:
Hello World
Hello World
In this simple example, the condition clause doesn't seem to be able to reference a bound variable from a previous part of the clause: