def initialize(owner_class, *args, &block)
options = args.last.is_a?(Hash) ? args.pop : {}
assert_valid_keys(options, :attribute, :initial, :initialize, :action, :plural, :namespace, :integration, :messages, :use_transactions)
if options.include?(:integration)
@integration = StateMachine::Integrations.find_by_name(options[:integration]) if options[:integration]
else
@integration = StateMachine::Integrations.match(owner_class)
end
if @integration
extend @integration
options = (@integration.defaults || {}).merge(options)
end
options = {:use_transactions => true, :initialize => true}.merge(options)
@name = args.first || :state
@attribute = options[:attribute] || @name
@events = EventCollection.new(self)
@states = StateCollection.new(self)
@callbacks = {:before => [], :after => [], :failure => []}
@namespace = options[:namespace]
@messages = options[:messages] || {}
@action = options[:action]
@use_transactions = options[:use_transactions]
@initialize_state = options[:initialize]
self.owner_class = owner_class
self.initial_state = options[:initial] unless owner_class.state_machines.any? {|name, machine| machine.attribute == attribute && machine != self}
define_helpers
define_scopes(options[:plural])
after_initialize
instance_eval(&block) if block_given?
end