No release in over 3 years
Low commit activity in last 3 years
ruote is an open source Ruby workflow engine
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
 Project Readme

Important Note

Active development on ruote ceased.

See scaling down ruote.

Do not involve ruote in your new project.

** 2016-12-12 Update **

Ruote development moved to a new Ruby workflow engine named flor.

The team is named floraison and there is also a "flor behind Rack" project named flack.

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 yajl-ruby
gem install rufus-scheduler -v 2.0.24
gem install ruote

or better, use a Gemfile like this one: https://gist.github.com/jmettraux/22f24fca70c5a116b01c

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 http://github.com/jmettraux/ruote/tree/master/test

license

MIT

links

feedback