state_machine

https://github.com/pluginaweek/state_machine

Ruby

Adds support for creating state machines for attributes on any Ruby class

StateMachine::Integrations::DataMapper::Observer#before_transition

Creates a callback that will be invoked *before* a transition is
performed, so long as the given configuration options match the
transition.  Each part of the transition (event, to state, from state)
must match in order for the callback to get invoked.

See StateMachine::Machine#before_transition for more
information about the various configuration options available.

== Examples

  class Vehicle
    include DataMapper::Resource
    
    property :id, Serial
    property :state, :String
    
    state_machine :initial => :parked do
      event :ignite do
        transition :parked => :idling
      end
    end
  end
  
  class VehicleObserver
    include DataMapper::Observer
    
    observe Vehicle
    
    before :save do
      # log message
    end
    
    # Target all state machines
    before_transition :parked => :idling, :on => :ignite do
      # put on seatbelt
    end
    
    # Target a specific state machine
    before_transition :state, any => :idling do
      # put on seatbelt
    end
    
    # Target all state machines without requirements
    before_transition do |transition|
      # log message
    end
  end

*Note* that in each of the above +before_transition+ callbacks, the
callback is executed within the context of the object (i.e. the
Vehicle instance being transition).  This means that +self+ refers
to the vehicle record within each callback block.

Source | Google | Stack overflow

Edit

git clone [email protected]:pluginaweek/state_machine.git

cd state_machine

open lib/state_machine/integrations/data_mapper/observer.rb

Contribute

# Make a new branch

git checkout -b -your-name--update-docs-StateMachine--Integrations--DataMapper--Observer-before_transition-for-pr


# Commit to git

git add lib/state_machine/integrations/data_mapper/observer.rbgit commit -m "better docs for StateMachine::Integrations::DataMapper::Observer#before_transition"


# Open pull request

gem install hub # on a mac you can `brew install hub`

hub fork

git push <your name> -your-name--update-docs-StateMachine--Integrations--DataMapper--Observer-before_transition-for-pr

hub pull-request


# Celebrate!