module Transitionable::ClassMethods

Attributes

state_machines[RW]

Public Instance Methods

transition(name, states = self::STATES, transitions = self::TRANSITIONS) click to toggle source

This assumes states is a hash

# File lib/transitionable.rb, line 22
def transition(name, states = self::STATES, transitions = self::TRANSITIONS)
  self.state_machines ||= {}
  self.state_machines[name] = { states: states.values, transitions: transitions }
  self.state_machines[name][:states].each do |this_state|
    method_name = "#{this_state}?".to_sym
    raise 'Method already defined' if self.instance_methods(false).include?(method_name)
    define_method method_name do
      current_state_based_on(this_state) == this_state
    end
  end
end