Module: IOStream
- Included in:
- Paperclip::Attachment
- Defined in:
- lib/paperclip/iostream.rb
Overview
Provides method that can be included on File-type objects (IO, StringIO, Tempfile, etc) to allow stream copying and Tempfile conversion.
Instance Method Summary collapse
-
#stream_to(object, path_or_file, in_blocks_of = 8192) ⇒ Object
Copies one read-able object from one place to another in blocks, obviating the need to load the whole thing into memory.
-
#to_tempfile(object) ⇒ Object
Returns a Tempfile containing the contents of the readable object.
Instance Method Details
#stream_to(object, path_or_file, in_blocks_of = 8192) ⇒ Object
Copies one read-able object from one place to another in blocks, obviating the need to load the whole thing into memory. Defaults to 8k blocks. Returns a File if a String is passed in as the destination and returns the IO or Tempfile as passed in if one is sent as the destination.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/paperclip/iostream.rb', line 16 def stream_to object, 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 = "" object.rewind while object.read(in_blocks_of, buffer) do dstio.write(buffer) end dstio.rewind dstio end |
#to_tempfile(object) ⇒ Object
Returns a Tempfile containing the contents of the readable object.
5 6 7 8 9 10 11 |
# File 'lib/paperclip/iostream.rb', line 5 def to_tempfile(object) return object.to_tempfile if object.respond_to?(:to_tempfile) name = object.respond_to?(:original_filename) ? object.original_filename : (object.respond_to?(:path) ? object.path : "stream") tempfile = Paperclip::Tempfile.new(["stream", File.extname(name)]) tempfile.binmode stream_to(object, tempfile) end |