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