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.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 branchgit checkout -b -your-name--update-docs-StateMachine--Integrations--DataMapper--Observer-before_transition-for-pr
# Commit to gitgit add lib/state_machine/integrations/data_mapper/observer.rbgit commit -m "better docs for StateMachine::Integrations::DataMapper::Observer#before_transition"
# Open pull requestgem 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!