Skip to content

Instantly share code, notes, and snippets.

@davidlee
Created July 29, 2009 03:35
Show Gist options
  • Save davidlee/157859 to your computer and use it in GitHub Desktop.
Save davidlee/157859 to your computer and use it in GitHub Desktop.
class NeuWizard
include StateFu
machine( :status ) do
state :info,
:tmp => 'page_1',
:first => true do
event :forward, :to => :betreuer
end
state :betreuer,
:tmp => 'page_2' do
event :prev, :to => :info
event :forward, :to => :misc
end
state :misc,
:tmp => 'page3',
:last => true do
event :prev, :to => :betreuer
end
end
end
>> w = NeuWizard.new
>> w.status.events.names
=> [:forward]
>> fwd = w.status.events[:forward]
=> #<StateFu::Event:0x122b1a8 @targets=[#<StateFu::State::9523590 @name=:betreuer>, #<StateFu::State::9518790 @name=:misc>], hooks{:after=>[], :execute=>[], :before=>[]}, machine#<StateFu::Machine #9533030 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}, @origins=[#<StateFu::State::9526450 @name=:info>, #<StateFu::State::9523590 @name=:betreuer>], requirements[], options{}, name:forward]
>> fwd.targets.names
=> [:betreuer, :misc]
# this is equivalent to w.status.transition [:forward, :betreuer]
# returns a transition which can be fired with .fire!
>> trans = w.status.forward :betreuer
=> #<StateFu::Transition:0x11e27dc @target=#<StateFu::State::9463380 @name=:betreuer>, errors[], args[], origin#<StateFu::State::9466240 @name=:info>, event#<StateFu::Event:0x120db44 @targets=[#<StateFu::State::9463380 @name=:betreuer>, #<StateFu::State::9458580 @name=:misc>], hooks{:after=>[], :execute=>[], :before=>[]}, machine#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}, @origins=[#<StateFu::State::9466240 @name=:info>, #<StateFu::State::9463380 @name=:betreuer>], requirements[], options{}, name:forward, machine#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}, @binding=|<= StateFu::Binding current_state=:info object_type=NeuWizard method_name=:status field_name=:status_field machine=#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}> =>, object#<NeuWizard:0x1205f34 @status_field="info", @_state_fu={:status=> StateFu::Binding current_state:info object_typeNeuWizard method_name:status field_name:status_field machine#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={} =|}, @testing=nil, @options={}>
>> w.status.forward! :betreuer
=> #<StateFu::Transition:0x11c7aa4 @current_hook=nil, @target=#<StateFu::State::9463380 @name=:betreuer>, errors[], args[], current_hook_slotnil, origin#<StateFu::State::9466240 @name=:info>, event#<StateFu::Event:0x120db44 @targets=[#<StateFu::State::9463380 @name=:betreuer>, #<StateFu::State::9458580 @name=:misc>], hooks{:after=>[], :execute=>[], :before=>[]}, machine#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}, @origins=[#<StateFu::State::9466240 @name=:info>, #<StateFu::State::9463380 @name=:betreuer>], requirements[], options{}, name:forward, machine#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}, @binding=|<= StateFu::Binding current_state=:betreuer object_type=NeuWizard method_name=:status field_name=:status_field machine=#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={}> =>, acceptedtrue, object#<NeuWizard:0x1205f34 @status_field="betreuer", @_state_fu={:status=> StateFu::Binding current_state:betreuer object_typeNeuWizard method_name:status field_name:status_field machine#<StateFu::Machine #9472820 states=[:info, :betreuer, :misc] events=[:forward, :prev] options={} =|}, @fired=true, @testing=nil, @options={}>
>> w.status.name
=> :betreuer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment