class PipeOperator::Closure
Constants
- RESERVED
Public Class Methods
curry(curry, search, args)
click to toggle source
# File lib/pipe_operator/closure.rb 14 def self.curry(curry, search, args) 15 index = curry.index(search) 16 prefix = index ? curry[0...index] : curry 17 suffix = index ? curry[index - 1..-1] : [] 18 19 (prefix + args + suffix).map do |object| 20 self === object ? object.call : object 21 end 22 end
new(pipe = nil, method = nil, *curry, &block)
click to toggle source
Calls superclass method
# File lib/pipe_operator/closure.rb 24 def self.new(pipe = nil, method = nil, *curry, &block) 25 return super(&block) unless pipe && method 26 27 search = Pipe.open || pipe 28 29 closure = super() do |*args, &code| 30 code ||= block 31 curried = curry(curry, search, args) 32 value = pipe.__call__.__send__(method, *curried, &code) 33 closure.__chain__(value) 34 end 35 end
Public Instance Methods
__chain__(*args)
click to toggle source
# File lib/pipe_operator/closure.rb 46 def __chain__(*args) 47 return @__chain__ if args.empty? 48 49 @__chain__.reduce(args[0]) do |object, chain| 50 method, args, block = chain 51 object.__send__(method, *args, &block) 52 end 53 end
__shift__()
click to toggle source
# File lib/pipe_operator/closure.rb 55 def __shift__ 56 closure = self.class.new do |*args, &block| 57 args.shift 58 value = call(*args, &block) 59 closure.__chain__(value) 60 end 61 end
|(*args, &block)
click to toggle source
# File lib/pipe_operator/closure.rb 42 def |(*args, &block) 43 Pipe.new(self, *args, &block) 44 end
Private Instance Methods
method_missing(method, *args, &block)
click to toggle source
# File lib/pipe_operator/closure.rb 65 def method_missing(method, *args, &block) 66 __chain__ << [method, args, block] 67 self 68 end