class FiniteMachine::Callable

A generic interface for executing strings, symbol methods or procs.

Attributes

object[R]

Public Class Methods

new(object) click to toggle source

Initialize a Callable

@param [Symbol, String, Proc] object

the callable object

@api public

# File lib/finite_machine/callable.rb, line 15
def initialize(object)
  @object = object
end

Public Instance Methods

call(target, *args, &block) click to toggle source

Execute action

@param [Object] target

@api public

# File lib/finite_machine/callable.rb, line 31
def call(target, *args, &block)
  case object
  when Symbol
    target.public_send(object.to_sym, *args, &block)
  when String
    string = args.empty? ? "-> { #{object} }" : "-> { #{object}(*#{args}) }"
    value  = eval(string)
    target.instance_exec(&value)
  when ::Proc
    object.arity.zero? ? object.call : object.call(target, *args)
  else
    raise ArgumentError, "Unknown callable #{object}"
  end
end
invert() click to toggle source

Invert callable

@api public

# File lib/finite_machine/callable.rb, line 22
def invert
  ->(*args, &block) { !call(*args, &block) }
end