Sha256: 9e8eed8bc2437ebf3c451696b42d8c06ac20110cc69b04d0fc6f6d64e2e5c127

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

module Paperclip
  class UploadedFileAdapter
    def initialize(target)
      @target = target

      if @target.respond_to?(:tempfile)
        @tempfile = copy_to_tempfile(@target.tempfile)
      else
        @tempfile = copy_to_tempfile(@target)
      end
    end

    def original_filename
      @target.original_filename
    end

    def content_type
      @target.content_type
    end

    def fingerprint
      @fingerprint ||= Digest::MD5.file(path).to_s
    end

    def size
      File.size(path)
    end

    def nil?
      false
    end

    def read(length = nil, buffer = nil)
      @tempfile.read(length, buffer)
    end

    # We don't use this directly, but aws/sdk does.
    def rewind
      @tempfile.rewind
    end

    def eof?
      @tempfile.eof?
    end

    def path
      @tempfile.path
    end

    private

    def copy_to_tempfile(src)
      extension = File.extname(original_filename)
      basename = File.basename(original_filename, extension)
      dest = Tempfile.new([basename, extension])
      dest.binmode
      FileUtils.cp(src.path, dest.path)
      dest
    end
  end
end

Paperclip.io_adapters.register Paperclip::UploadedFileAdapter do |target|
  target.class.name.include?("UploadedFile")
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
paperclip-3.0.4 lib/paperclip/io_adapters/uploaded_file_adapter.rb
paperclip-3.0.3 lib/paperclip/io_adapters/uploaded_file_adapter.rb