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