class ExMachina::Event::Execution

Constants

STATUSES

Attributes

current[RW]
event[R]
previous[RW]
result[RW]
transition[R]

Public Class Methods

new(event, transition) click to toggle source
# File lib/ex_machina/event/execution.rb, line 17
def initialize(event, transition)
  @event      = event
  @transition = transition
end

Public Instance Methods

eligible?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 87
def eligible?
  if transition.conditional?
    if transition.do_if
      invoke(transition.do_if)
    elsif transition.do_unless
      !invoke(transition.do_unless)
    end
  else
    true
  end
end
error!(exception) click to toggle source
# File lib/ex_machina/event/execution.rb, line 79
def error!(exception)
  @exception = exception
  finish!(@result = :error)
end
error?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 83
def error?
  result == :error
end
failure!() click to toggle source
# File lib/ex_machina/event/execution.rb, line 67
def failure!
  @current = previous
  finish!(@result = :failure)
end
failure?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 64
def failure?
  result == :failure
end
finish!(value) click to toggle source
# File lib/ex_machina/event/execution.rb, line 34
def finish!(value)
  return result unless running?

  @running = false
  @ran     = true

  if value == true
    success!
  elsif value == false
    failure!
  elsif value == :skipped
    skipped!
  elsif value == :error
    error!(@exception)
  else
    @result = value
  end
end
run() click to toggle source
# File lib/ex_machina/event/execution.rb, line 99
def run
  start!
  return skipped! unless eligible?

  begin
    invoke(callback(:before), true)
    if (performed = invoke(:perform, true))
      success!
    else
      failure!
    end
    invoke(:transit)
    invoke(callback(:after))

  rescue StandardError => ex
    error!(ex)
  end

  if success?
    invoke(callback(:success))
  elsif failure?
    invoke(callback(:failure))
  elsif error?
    invoke(callback(:error))
  elsif skipped?
    invoke(callback(:skip))
  else
    # do what?
  end

  performed
end
run?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 52
def run?
  !!@ran
end
running?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 22
def running?
  @running
end
skipped!() click to toggle source
# File lib/ex_machina/event/execution.rb, line 72
def skipped!
  finish!(@result = :skipped)
end
skipped?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 75
def skipped?
  result == :skipped
end
start!() click to toggle source
# File lib/ex_machina/event/execution.rb, line 26
def start!
  @run      = false
  @running  = true
  @result   = nil
  @previous = event.status
  @current  = event.status
end
success!() click to toggle source
# File lib/ex_machina/event/execution.rb, line 59
def success!
  @current = transition.to
  finish!(@result = :success)
end
success?() click to toggle source
# File lib/ex_machina/event/execution.rb, line 56
def success?
  result == :success
end

Protected Instance Methods

callback(name) click to toggle source

return the transition ‘do_callback’ or default ‘(before|after)_transition method

# File lib/ex_machina/event/execution.rb, line 135
def callback(name)
  transition.send("do_#{name}") || "#{name}_#{previous}_to_#{current}"
end
invoke(meth, default = nil) click to toggle source
# File lib/ex_machina/event/execution.rb, line 139
def invoke(meth, default = nil)
  result = Util.invoke_method(event, meth, self)
  return default if result.nil?
  result
end