lib/transitions/machine.rb in transitions-0.0.18 vs lib/transitions/machine.rb in transitions-0.1.0
- old
+ new
@@ -22,14 +22,14 @@
module Transitions
class Machine
attr_writer :initial_state
attr_accessor :states, :events, :state_index
- attr_reader :klass, :name, :auto_scopes
+ attr_reader :klass, :auto_scopes
- def initialize(klass, name, options = {}, &block)
- @klass, @name, @states, @state_index, @events = klass, name, [], {}, {}
+ def initialize(klass, options = {}, &block)
+ @klass, @states, @state_index, @events = klass, [], {}, {}
update(options, &block)
end
def initial_state
@initial_state ||= (states.first ? states.first.name : nil)
@@ -42,29 +42,29 @@
include_scopes if @auto_scopes && defined?(ActiveRecord::Base) && @klass < ActiveRecord::Base
self
end
def fire_event(event, record, persist, *args)
- state_index[record.current_state(@name)].call_action(:exit, record)
+ state_index[record.current_state].call_action(:exit, record)
begin
if new_state = @events[event].fire(record, nil, *args)
state_index[new_state].call_action(:enter, record)
- if record.respond_to?(event_fired_callback)
- record.send(event_fired_callback, record.current_state, new_state, event)
+ if record.respond_to?(:event_fired)
+ record.send(:event_fired, record.current_state, new_state, event)
end
- record.current_state(@name, new_state, persist)
+ record.current_state(new_state, persist)
@events[event].success.call(record) if @events[event].success
return true
else
- record.send(event_fired_callback, event) if record.respond_to?(event_failed_callback)
+ record.send(:event_failed, event) if record.respond_to?(:event_failed)
return false
end
rescue => e
- if record.respond_to?(event_failed_callback)
- record.send(event_failed_callback, event)
+ if record.respond_to?(:event_failed)
+ record.send(:event_failed, event)
return false
else
raise e
end
end
@@ -78,28 +78,25 @@
events = @events.values.select { |event| event.transitions_from_state?(state) }
events.map! { |event| event.name }
end
def current_state_variable
- "@#{@name}_current_state"
+ "@current_state"
end
private
def state(name, options = {})
- @states << (state_index[name] ||= State.new(name, :machine => self)).update(options)
+ unless @state_index.key? name # Just ignore duplicates
+ state = State.new(name, :machine => self)
+ state.update options
+ @state_index[name] = state
+ @states << state
+ end
end
def event(name, options = {}, &block)
(@events[name] ||= Event.new(self, name)).update(options, &block)
- end
-
- def event_fired_callback
- @event_fired_callback ||= (@name == :default ? '' : "#{@name}_") + 'event_fired'
- end
-
- def event_failed_callback
- @event_failed_callback ||= (@name == :default ? '' : "#{@name}_") + 'event_failed'
end
def include_scopes
@states.each do |state|
state_name = state.name.to_s