# File lib/cabin/mixins/pipe.rb, line 31
  def pipe(io_to_method_map, &block)
    fds = io_to_method_map.keys

    while !fds.empty?
      readers, _, _ = IO.select(fds, nil, nil, nil)
      readers.each do |fd|
        begin
          line = fd.readline.chomp
        rescue EOFError
          fd.close rescue nil
          fds.delete(fd)
          next
        end

        method_name = io_to_method_map[fd]
        block.call(line, method_name) if block_given?
        send(method_name, line)
      end # readers.each
    end # while !fds.empty?
  end