Sha256: b7ac69d751e8cc9ae552c262ea88a641108213958e763cf25b07539bbc494df6

Contents?: true

Size: 1.5 KB

Versions: 32

Compression:

Stored size: 1.5 KB

Contents

# Provides method that can be included on File-type objects (IO, StringIO, Tempfile, etc) to allow stream copying
# and Tempfile conversion.
module IOStream
  # Returns a Tempfile containing the contents of the readable object.
  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

  # 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.
  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
end

# Corrects a bug in Windows when asking for Tempfile size.
if defined? Tempfile
  class Tempfile
    def size
      if @tmpfile
        @tmpfile.fsync
        @tmpfile.flush
        @tmpfile.stat.size
      else
        0
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 13 rubygems

Version Path
dm-paperclip-2.5.0 lib/dm-paperclip/iostream.rb
smarter_paperclip-0.3.3 lib/paperclip/iostream.rb
smarter_paperclip-0.3.2 lib/paperclip/iostream.rb
smarter_paperclip-0.3.1 lib/paperclip/iostream.rb
smarter_paperclip-0.3.0 lib/paperclip/iostream.rb
cemeng-paperclip-2.3.6 lib/paperclip/iostream.rb
paperclip-2.3.12 lib/paperclip/iostream.rb
paperclip-cloudfiles-2.3.10.1 lib/paperclip/iostream.rb
paperclip-cloudfiles-2.3.8.6 lib/paperclip/iostream.rb
sayso-paperclip-2.3.10.001 lib/paperclip/iostream.rb
paperclip-cloudfiles-2.3.8.5 lib/paperclip/iostream.rb
ryansch-paperclip-2.3.10 lib/paperclip/iostream.rb
paperclip-2.3.11 lib/paperclip/iostream.rb
paperclip-2.3.10 lib/paperclip/iostream.rb
paperclip-2.3.9 lib/paperclip/iostream.rb
paperclip-cloudfiles-2.3.8.4 lib/paperclip/iostream.rb
paperclip-youtube-2.3.8.2 lib/paperclip/iostream.rb
paperclip-youtube-2.3.8.1 lib/paperclip/iostream.rb
paperclip-cloudfiles-2.3.8.3 lib/paperclip/iostream.rb
whitby3001-paperclip-cloudfiles-2.3.8.1 lib/paperclip/iostream.rb