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
- .callable_from_proc(callable, block) ⇒ Object
- .from_callable(callable, block) ⇒ Object
- .from_callable_class(callable, block, klass) ⇒ Object
- .initialize(callable = nil, &block) ⇒ Object
- .lambda?(o) ⇒ Boolean
- .make_lambda(block) ⇒ Object
- .raise_unless_lambda(o) ⇒ Object
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
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
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 |