Sha256: 0630e24c7b3229e0d43234861569d48917eab4422e9a9db6cb57a7300eea84dc

Contents?: true

Size: 980 Bytes

Versions: 1

Compression:

Stored size: 980 Bytes

Contents

# encoding: utf-8

module FiniteMachine

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

    attr_reader :object

    # Initialize a Callable
    #
    # @param [Symbol, String, Proc] object
    #   the callable object
    #
    # @api public
    def initialize(object)
      @object = object
    end

    # Invert callable
    #
    # @api public
    def invert
      lambda { |*args, &block|  !self.call(*args, &block) }
    end

    # Execute action
    #
    # @param [Object] target
    #
    # @api public
    def call(target, *args, &block)
      case object
      when Symbol
        target.__send__(@object.to_sym)
      when String
        value = eval "lambda { #{@object} }"
        target.instance_exec(&value)
      when ::Proc
        object.arity.zero? ?  object.call : object.call(target, *args)
      else
        raise ArgumentError, "Unknown callable #{@object}"
      end
    end
  end # Callable
end # FiniteMachine

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
finite_machine-0.2.0 lib/finite_machine/callable.rb