module StateMachinable::Base

Public Instance Methods

method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/state_machinable/base.rb, line 40
def method_missing(name, *args, &block)
  begin
    events = "#{self.class}::EVENTS".constantize.dup
  rescue NameError
    events = []
  end

  clean_name = name.to_s.chomp('!').to_sym

  if events.include?(clean_name)
    state_class = self.class.state_class(self.current_state)
    if state_class.present? && state_class.respond_to?(clean_name)
      state_class.send(clean_name, self.object, *args)
    else
      if name.to_s.last == '!'
        raise StateMachinable::EventNotHandledException.new(:event => clean_name, :state => self.current_state)
      else
        nil
      end
    end
  else
    super
  end
end
state_class(state) click to toggle source
# File lib/state_machinable/base.rb, line 6
def state_class(state)
  "#{self}::#{state.classify}".constantize
rescue NameError
  nil
end