module Statesman::Events

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/statesman/events.rb, line 6
def self.included(base)
  unless base.respond_to?(:states)
    raise "Statesman::Events included before/without Statesman::Machine"
  end
  base.extend(ClassMethods)
end

Public Instance Methods

available_events() click to toggle source
# File lib/statesman/events.rb, line 44
def available_events
  state = current_state
  self.class.events.select do |_, transitions|
    transitions.key?(state)
  end.map(&:first)
end
trigger(event_name, metadata = {}) click to toggle source
# File lib/statesman/events.rb, line 38
def trigger(event_name, metadata = {})
  self.trigger!(event_name, metadata)
rescue Statesman::InvalidTransitionError, Statesman::GuardFailedError
  false
end
trigger!(event_name, metadata = {}) click to toggle source
# File lib/statesman/events.rb, line 23
def trigger!(event_name, metadata = {})
  transitions = self.class.events.fetch(event_name) do
    raise Statesman::InvalidTransitionError,
          "Event #{event_name} not found"
  end

  new_state = transitions.fetch(current_state) do
    raise Statesman::InvalidTransitionError,
          "State #{current_state} not found for Event #{event_name}"
  end

  transition_to!(new_state.first, metadata)
  true
end