aasm/lib/aasm/state_machine.rb

42 lines
943 B
Ruby
Raw Normal View History

2011-11-26 17:30:47 +00:00
module AASM
class StateMachine
2012-11-28 09:42:41 +00:00
# the following two methods provide the storage of all state machines
def self.[](klass)
(@machines ||= {})[klass.to_s]
2011-11-26 17:30:47 +00:00
end
def self.[]=(klass, machine)
(@machines ||= {})[klass.to_s] = machine
2011-11-26 17:30:47 +00:00
end
2011-11-26 17:30:47 +00:00
attr_accessor :states, :events, :initial_state, :config
2009-04-09 05:25:16 +00:00
def initialize
2011-11-26 17:30:47 +00:00
@initial_state = nil
@states = []
@events = {}
@config = OpenStruct.new
end
2008-05-31 22:33:17 +00:00
2012-11-28 09:42:41 +00:00
# called internally by Ruby 1.9 after clone()
def initialize_copy(orig)
super
@states = @states.dup
@events = @events.dup
2011-11-26 17:30:47 +00:00
end
def add_state(name, klass, options)
set_initial_state(name, options)
@states << AASM::State.new(name, klass, options) unless @states.include?(name)
2011-11-26 17:30:47 +00:00
end
2012-11-28 09:42:41 +00:00
private
def set_initial_state(name, options)
@initial_state = name if options[:initial] || !initial_state
end
2012-11-28 09:42:41 +00:00
end # StateMachine
2011-11-26 17:30:47 +00:00
end # AASM