class Aquam::Machine

Attributes

object[RW]

Public Class Methods

new(object) click to toggle source
# File lib/aquam/machine.rb, line 9
def initialize(object)
  @object = object
end

Public Instance Methods

current_state() click to toggle source
# File lib/aquam/machine.rb, line 25
def current_state
  fail Aquam::InvalidStateError unless valid_state?

  self.class.states[attribute].new object
end
trigger(event, *args) click to toggle source
# File lib/aquam/machine.rb, line 31
def trigger(event, *args)
  state = current_state

  fail Aquam::InvalidEventError unless valid_event? event
  fail Aquam::InvalidTransitionError unless valid_transition? event

  state.send event, *args

  current_state
end
valid_event?(event) click to toggle source
# File lib/aquam/machine.rb, line 17
def valid_event?(event)
  self.class.valid_event? event
end
valid_state?() click to toggle source
# File lib/aquam/machine.rb, line 13
def valid_state?
  self.class.valid_state? attribute
end
valid_transition?(event) click to toggle source
# File lib/aquam/machine.rb, line 21
def valid_transition?(event)
  self.class.events[event].key? attribute
end

Private Instance Methods

attribute() click to toggle source
# File lib/aquam/machine.rb, line 44
def attribute
  object.send(self.class.attribute.to_sym).to_sym
end