Acts As State Machine

This plugin gives an Active Record model the ability to act as a finite state machine (FSM).

Author: Scott Barron

Installation:

ruby script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk

Example use:


  class Order < ActiveRecord::Base
    acts_as_state_machine :initial => :opened

    state :opened
    state :closed, :enter => Proc.new {|o| Mailer.send_notice(o)}
    state :returned

    event :close do
      transitions :to => :closed, :from => :opened
    end

    event :return do
      transitions :to => :returned, :from => :closed
    end
  end

  o = Order.create
  o.close! # notice is sent by mailer
  o.return!