module IOStream
def stream_to path_or_file, in_blocks_of = 8192
worries or memory overhead worries. Returns a File if a String is passed in as the destination
StringIO and Tempfile, then either can have its data copied anywhere else without typing
the whole thing into memory. Defaults to 8k blocks. If this module is included in both
Copies one read-able object from one place to another in blocks, obviating the need to load
def stream_to path_or_file, in_blocks_of = 8192 dstio = case path_or_file when String then File.new(path_or_file, "wb+") when IO then path_or_file when Tempfile then path_or_file end buffer = "" self.rewind while self.read(in_blocks_of, buffer) do dstio.write(buffer) end dstio.rewind dstio end
def to_tempfile
def to_tempfile tempfile = Tempfile.new("stream") tempfile.binmode self.stream_to(tempfile) end