ruote
Ruote is a Ruby workflow engine. It’s thus a workflow definition interpreter. If you’re enterprisey, you might say business process definition.
Instances of these definitions are meant to run for a long time, so Ruote is oriented towards persistency / modifiability instead of transience / performance like a regular interpreter is. A Ruote engine may run multiple instances of workflow definitions.
Persistent mostly means that you can stop Ruote and later restart it without losing processes. Modifiability means that you can modify a workflow instance on the fly.
Process definitions are mainly describing how workitems are routed to participants. These participants may represent worklists for users or group of users, pieces of code, …
usage
grab ruote
gem install ruote
gem install yajl-ruby
Note : the json gem has a serious bug :
http://github.com/flori/json/issues#issue/21
So yajl-ruby is seriously recommended.
Then
require 'rubygems'
require 'ruote'
require 'ruote/storage/fs_storage'
# preparing the engine
engine = Ruote::Engine.new(
Ruote::Worker.new(
Ruote::FsStorage.new('ruote_work')))
# registering participants
engine.register_participant :alpha do |workitem|
workitem.fields['message'] = { 'text' => 'hello !', 'author' => 'Alice' }
end
engine.register_participant :bravo do |workitem|
puts "I received a message from #{workitem.fields['message']['author']}"
end
# defining a process
pdef = Ruote.process_definition :name => 'test' do
sequence do
participant :alpha
participant :bravo
end
end
# launching, creating a process instance
wfid = engine.launch(pdef)
engine.wait_for(wfid)
# blocks current thread until our process instance terminates
# => 'I received a message from Alice'
test suite
see github.com/jmettraux/ruote/tree/master/test
license
MIT
links
feedback
-
mailing list : groups.google.com/group/openwferu-users
-
irc : irc.freenode.net #ruote