module J8::Common

Public Class Methods

new(callable = nil, &block) click to toggle source
# File lib/j8/common.rb, line 7
def initialize(callable = nil, &block)
  @callable = callable_from_proc(callable, block)
end

Public Instance Methods

callable_from_proc(callable, block) click to toggle source
# File lib/j8/common.rb, line 48
def callable_from_proc(callable, block)
  if block.nil?
    raise J8::NilException if callable.nil?

    raise_unless_lambda(callable)

    callable
  else
    make_lambda(block)
  end
end
from_callable(callable, block) click to toggle source
# File lib/j8/common.rb, line 21
def from_callable(callable, block)
  callable = callable_from_proc(callable, block)

  if callable.is_a?(self.class)
    callable
  else
    raise_unless_lambda(callable)

    self.class.new(callable)
  end
end
from_callable_class(callable, block, klass) click to toggle source
# File lib/j8/common.rb, line 33
def from_callable_class(callable, block, klass)
  if callable.is_a?(klass)
    callable
  else
    callable = callable_from_proc(callable, block)
    raise_unless_lambda(callable)

    klass.new(callable)
  end
end
lambda?(o) click to toggle source
# File lib/j8/common.rb, line 11
def lambda?(o)
  o.is_a?(Proc) && o.lambda?
end
make_lambda(block) click to toggle source
# File lib/j8/common.rb, line 44
def make_lambda(block)
  Object.new.tap { |n| n.define_singleton_method(:_, block) }.method(:_).to_proc
end
raise_unless_lambda(o) click to toggle source
# File lib/j8/common.rb, line 15
def raise_unless_lambda(o)
  return if lambda?(o)

  raise ArgumentError, "(#{o.class}) '#{o}' is not a lambda"
end