require 'state' require 'set' include UpState def put_states foo = State.send(:class_variable_get, :@@states).map{ |x| x.to_s_color } puts foo.sort.join(", ") end foo = State.new_type("foo", [Event.new("gimmefoo", {:bob => /^...$/})], [], [:bob]) bar = State.new_type("bar", [], [Dependency.new(foo)]) baz = State.new_type("baz", [], [Dependency.new(foo, {:bob => "abc"}, {:bob => :tom}), Dependency.new(bar)]) bam = State.new_type("bam", [Event::Epsilon], [Dependency.new(baz)]) bang = State.new_type("bang", [], [Dependency.new(bam)]) bao = State.new_type("bao", [], [Dependency.new(bam), Dependency.new(bang)]) begin put_states State.process_event(Event.new("gimmefoo", {:bob => "1234"})) put_states State.process_event(Event.new("gimmefoo", {:bob => "123"})) myfoo = foo.get_all.select{ |x| x.params[:bob] == "123" }[0] put_states bar.hold(:user) put_states baz.hold(:user) put_states bang.hold(:user) put_states foo.release(:user) put_states myfoo.drop put_states State.process_event(Event.new("gimmefoo", {:bob => "123"})) put_states State.process_event(Event.new("gimmefoo", {:bob => "abc"})) myfoo = foo.get_all.select{ |x| x.params[:bob] == "abc" }[0] put_states bar.hold(:user) put_states baz.hold(:user) put_states bang.hold(:user) put_states foo.release(:user) put_states myfoo.drop put_states rescue put_states raise end