Sha256: b904f148ec2617028af1b50c878d664e856515cd9b8171a61435cd33646b1ec3

Contents?: true

Size: 1.42 KB

Versions: 3

Compression:

Stored size: 1.42 KB

Contents

module S3Multipart
  class Upload < ::ActiveRecord::Base
    extend S3Multipart::TransferHelpers

    attr_accessible :key, :upload_id, :name, :location, :uploader, :size
    before_create :validate_file_type, :validate_file_size

    def self.create(params)
      response = initiate(params)
      super(key: response["key"], upload_id: response["upload_id"], name: response["name"], uploader: params["uploader"], size: params["content_size"])
    end

    def execute_callback(stage, session)
      controller = deserialize(uploader)
      
      case stage
      when :begin
        controller.on_begin_callback.call(self, session) if controller.on_begin_callback
      when :complete
        controller.on_complete_callback.call(self, session) if controller.on_begin_callback
      end
    end

    private

      def validate_file_size
        size = self.size
        limits = deserialize(self.uploader).size_limits
        raise FileSizeError, "File size is too small" if limits[:min] > size
        raise FileSizeError, "File size is too large" if limits[:max] < size 
      end

      def validate_file_type
        ext = self.name.match(/\.([a-zA-Z0-9]+)$/)[1]
        controller = deserialize(self.uploader)

        if !controller.file_types.include?(ext)
          raise FileTypeError, "File type not supported"
        end
      end

      def deserialize(uploader)
        S3Multipart::Uploader.deserialize(uploader)
      end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
s3_multipart-0.0.10.4 app/models/s3_multipart/upload.rb
s3_multipart-0.0.10.3 app/models/s3_multipart/upload.rb
s3_multipart-0.0.10.2 app/models/s3_multipart/upload.rb