Skip to content

Latest commit

History

90 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Workflow engine

Build StatusCode Climate

Premises

  • ActiveRecord
  • Each state is a separate object.

Features

  • State can be as rich in functionality was wanted.
  • No data is ever lost. History is always saved.
  • It is possible to track every single transition done in the workflow.
  • Advancing a state is as easy as creating a state object and calling "save".
  • Can transition to same state.
  • Minimal code to define workflow and states.

Simple example for a Bulb with two states:


class Bulb < ActiveRecord::Base
include Control::Workflow
has_many :ons
has_many :offs
end
class On < ActiveRecord::Base
include Control::State
belongs_to :bulb
end
class Off < ActiveRecord::Base
include Control::State
belongs_to :bulb
next_states :on # optional, to constrain possible next states, can also specify :none to make a state final
end
def example
my_bulb = Bulb.new
my_on = On.new do |o|
o.bulb = my_bulb
end
my_off = Off.new do |o|
o.bulb = my_bulb
end
# Check possible states for my bulb. (On, Off)
my_bulb.states
# Transitions the bulb to the "On" state
my_on.save
# Transitions the bulb to the "Off" state
my_off.save
# Every transition is recorded. (On -> Off)
my_bulb.transitions
# Bulb knows which state is current. (Off)
my_bulb.current_state
end

Installing:

  1. Add control gem to gemfile.
gem 'control'

or

gem 'control', :git => 'git://github.com/zeto/control.git' # Edge
  1. Generate tables (run rake db:migrate after)
$ rails generate control_install

Testing the gem:


$ bundle
$ rake

About

Business Workflow State Machine

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages