module Sink

The Sink mixin provides classes that can accept streams of values with several utility methods. Classes using this mixin must at least provide an operator << which accepts a value and returns the sink instance (allowing chaining). Optionally, the class may provide a close method that signals end of input and (also optionally) retrives a result value.

Public Instance Methods

sink <= enum → obj click to toggle source
sink <= trans → new_consum

In the first form, iterate over enum and write each result to sink using <<; then return the result of sink.close.

In the second form, create a new Consumer by connecting the output of trans (which must be convertible to a Transformer using the to_trans method) to the input of sink.

# File lib/coroutines/operators.rb, line 38
def <=(other)
        if other.respond_to? :each
                begin
                        other.each { |x| self << x }
                rescue StopIteration
                end
                close
        elsif other.respond_to? :to_trans
                other >= self
        end
end
close() click to toggle source

May be overriden by classes using the Sink mixin. The default implementation just returns self.

# File lib/coroutines/sink.rb, line 9
def close
        self
end
in_connect(enum) → obj click to toggle source
in_connect(trans) → new_consum

In the first form, iterate over enum and write each result to sink using <<; then return the result of sink.close.

In the second form, create a new Consumer by connecting the output of trans (which must be convertible to a Transformer using the to_trans method) to sink.

# File lib/coroutines/sink.rb, line 23
def in_connect(other)
        if other.respond_to? :each
                begin
                        other.each { |x| self << x }
                rescue StopIteration
                end
                close
        elsif other.respond_to? :to_trans
                other.to_trans.out_connect(self)
        end
end
input_map{ |obj| block } → new_sink click to toggle source

Returns a new sink which supplies each of its input values to the given block and feeds each result of the block to sink.

# File lib/coroutines/sink.rb, line 40
def input_map(&block)
        InputMapWrapper.new(self, &block)
end
input_reduce(initial=nil){ |memo, obj| block } → new_sink click to toggle source

Returns a new sink which reduces its input values to a single value, as in Enumerable#reduce. When new_sink is closed, the reduced value is fed to sink and sink is closed as well.

# File lib/coroutines/sink.rb, line 68
def input_reduce(*args, &block)
        InputReduceWrapper.new(self, *args, &block)
end
input_reject{ |obj| block } → new_sink click to toggle source

Returns a new sink which feeds those inputs for which block returns a false value to sink and discards all others.

# File lib/coroutines/sink.rb, line 58
def input_reject(&block)
        InputRejectWrapper.new(self, &block)
end
input_select{ |obj| block } → new_sink click to toggle source

Returns a new sink which feeds those inputs for which block returns a true value to sink and discards all others.

# File lib/coroutines/sink.rb, line 49
def input_select
        InputSelectWrapper.new(self, &block)
end