Sha256: 6fc204177e9cbd8c29de784ab894f87ae4cf87182df23ec9996f3e4818f41603

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

# encoding: utf-8
require 'digest/sha1'
require 'mime/types'

module Sunrise
  module FileUpload
    module Http
      # Create file from hash
      class UploadedFile
        attr_accessor :original_filename, :content_type, :tempfile, :headers

        def initialize(hash)
          @original_filename = hash[:filename]
          @content_type      = hash[:type]
          @headers           = hash[:head]
          @tempfile          = hash[:tempfile]
          raise(ArgumentError, ':tempfile is required') unless @tempfile
        end

        def open
          @tempfile.open
        end

        def path
          @tempfile.path
        end

        def read(*args)
          @tempfile.read(*args)
        end

        def rewind
          @tempfile.rewind
        end

        def size
          @tempfile.size
        end
      end
      
      # Usage (paperclip example)
      # @asset.data = QqFile.new(params[:qqfile], request)
      class QqFile < ::Tempfile

        def initialize(filename, request, tmpdir = Dir::tmpdir)
          @original_filename  = filename
          @request = request
          
          super Digest::SHA1.hexdigest(filename), tmpdir
          fetch
        end
       
        def fetch
          self.write @request.raw_post
          self.rewind
          self
        end
       
        def original_filename
          @original_filename
        end
       
        def content_type
          types = MIME::Types.type_for(@request.content_type)
	        types.empty? ? @request.content_type : types.first.to_s
        end
      end
      
      # Convert nested Hash to HashWithIndifferentAccess and replace
      # file upload hash with UploadedFile objects
      def self.normalize_param(*args)
        value = args.first
        if Hash === value && value.has_key?(:tempfile)
          UploadedFile.new(value)
        elsif value.is_a?(String)
          QqFile.new(*args)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
sunrise-file-upload-0.2.0 lib/sunrise/file_upload/http.rb
sunrise-file-upload-0.1.3 lib/sunrise/file_upload/http.rb
sunrise-file-upload-0.1.2 lib/sunrise/file_upload/http.rb
sunrise-file-upload-0.1.1 lib/sunrise/file_upload/http.rb