Module: J8::Common

Included in:
BiConsumer, BiFunction, BiPredicate, Comparator, Consumer, Function, Optional, Predicate, Stream, Supplier
Defined in:
lib/j8/common.rb

Class Method Summary collapse

Class Method Details

.callable_from_proc(callable, block) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# 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

.initialize(callable = nil, &block) ⇒ Object



7
8
9
# File 'lib/j8/common.rb', line 7

def initialize(callable = nil, &block)
  @callable = callable_from_proc(callable, block)
end

.lambda?(o) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/j8/common.rb', line 11

def lambda?(o)
  o.is_a?(Proc) && o.lambda?
end

.make_lambda(block) ⇒ Object



44
45
46
# 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) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
# 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