module Stateful::Poro::ClassMethods

Public Class Methods

extended(klass) click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 10
def extended(klass)
  klass.define_stateful_variable_name_setter_method
  klass.define_stateful_variable_name_getter_method
  klass.define_next_state_method
  klass.define_transitions_method
  klass.define_initial_stateQ_method
  klass.define_final_stateQ_method
end

Public Instance Methods

define_event_method(transition) click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 29
def define_event_method(transition)
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method(transition.event_name) do
    next_state_name = self.send(stateful_variable_name).next_state_name(transition.event_name)
    next_state = self.class.stateful_states.find(next_state_name)
    self.send("#{stateful_variable_name}=", next_state)
  end
end
define_final_stateQ_method() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 87
def define_final_stateQ_method
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method(:final_state?) do
    final_states.include?(self.send(stateful_variable_name))
  end
end
define_initial_stateQ_method() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 80
def define_initial_stateQ_method
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method(:initial_state?) do
    self.send(stateful_variable_name) == initial_state
  end
end
define_next_state_method() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 65
def define_next_state_method
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method(:next_state) do |event_name|
    next_state_name = self.send(stateful_variable_name).next_state_name(event_name)
    all_states.find(next_state_name)
  end
end
define_stateful_variable_name_getter_method() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 52
def define_stateful_variable_name_getter_method
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method(stateful_variable_name) do
    if state = instance_variable_get("@#{stateful_variable_name}")
      state
    else
      initial_state = self.class.stateful_states.initial_state
      self.send("#{stateful_variable_name}=", initial_state.name)
      initial_state
    end
  end
end
define_stateful_variable_name_setter_method() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 45
def define_stateful_variable_name_setter_method
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method("#{stateful_variable_name}=") do |state|
    instance_variable_set("@#{stateful_variable_name}", self.class.stateful_states.find(state))
  end
end
define_status_predicate_method(state_name) click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 38
def define_status_predicate_method(state_name)
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method("#{state_name}?") do
    self.send(stateful_variable_name).name == state_name
  end
end
define_transitions_method() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 73
def define_transitions_method
  stateful_variable_name = self.instance_variable_get(:@stateful_variable_name)
  define_method(:transitions) do
    self.send(stateful_variable_name).transitions
  end
end
stateful_variable_name() click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 25
def stateful_variable_name
  @stateful_variable_name
end
stateful_variable_name=(stateful_variable_name) click to toggle source
# File lib/Stateful/Poro/ClassMethods.rb, line 21
def stateful_variable_name=(stateful_variable_name)
  @stateful_variable_name = stateful_variable_name
end