def initialize(machine, name, options = {}, &block)
@machine = machine
@name = name
@transitions = []
@timestamps = []
if machine
machine.klass.send(:define_method, "#{name}!") do |*args|
machine.fire_event(name, self, true, *args)
end
machine.klass.send(:define_method, name.to_s) do |*args|
machine.fire_event(name, self, false, *args)
end
machine.klass.send(:define_method, "can_#{name}?") do |*_args|
machine.events_for(current_state).include?(name.to_sym)
end
machine.klass.send(:define_method, "can_execute_#{name}?") do |*args|
event = name.to_sym
send("can_#{name}?", *args) &&
machine.events[event].can_execute_transition_from_state?(current_state, self, *args)
end
end
update(options, &block)
end