class Mutator::Machine

Attributes

stateholder[R]

Public Class Methods

new(stateholder) click to toggle source
# File lib/mutator/machine.rb, line 5
def initialize stateholder
  @stateholder = stateholder
end
states() click to toggle source
# File lib/mutator/machine.rb, line 30
def self.states
  transitions.map do |transition|
    to, from = transition[:to], transition[:from]
    [to, from]
  end.flatten.uniq
end

Public Instance Methods

current_state() click to toggle source
# File lib/mutator/machine.rb, line 13
def current_state
  stateholder.state
end
states() click to toggle source
# File lib/mutator/machine.rb, line 37
def states
  self.class.states
end
transition(options) click to toggle source
# File lib/mutator/machine.rb, line 17
def transition options
  options = extract options
  transition, success, failure = options.values

  if transition.call
    success.call transition
    true
  else
    failure.call transition
    false
  end
end
transitions() click to toggle source
# File lib/mutator/machine.rb, line 41
def transitions
  self.class.transitions
end
valid?() click to toggle source
# File lib/mutator/machine.rb, line 9
def valid?
  self.class.states.include? current_state
end

Protected Instance Methods

extract(options) click to toggle source
# File lib/mutator/machine.rb, line 47
def extract options
  to = options.fetch(:to)

  {
    transition: Transition.new(to: to, from: current_state, machine: self),
    success: lambda { |_| },
    failure: lambda { |_| }
  }.merge options
end