Sha256: 14dd4194b5e178de715fcf9c1c518103356480840332924e2b4910a4a21744d3

Contents?: true

Size: 1.49 KB

Versions: 9

Compression:

Stored size: 1.49 KB

Contents

module Vimeo
  module Advanced
    module SimpleUpload
      class Chunk
        MULTIPART_BOUNDARY = "-----------RubyMultipartPost"

        attr_reader :id, :index
        attr_reader :task, :vimeo
        attr_reader :data, :size

        def initialize(task, data)
          @task = task
          @vimeo = task.vimeo
          @data = data
          @size = data.size
          @index = task.chunks.count
        end

        # Performs the upload via Multipart.
        def upload
          endpoint = "#{task.endpoint}&chunk_id=#{index}"

          response = task.oauth_consumer.request(:post, endpoint, vimeo.get_access_token, {}, {}) do |req|
            req.set_content_type("multipart/form-data", { "boundary" => MULTIPART_BOUNDARY })

            io = StringIO.new(data)
            io.instance_variable_set :"@original_filename", task.filename
            def io.original_filename; @original_filename; end
            def io.content_type; "application/octet-stream"; end

            parts = []
            parts << Parts::FilePart.new(MULTIPART_BOUNDARY, "file_data", io)
            parts << Parts::EpiloguePart.new(MULTIPART_BOUNDARY)

            ios                = parts.map{|p| p.to_io }
            req.content_length = parts.inject(0) {|sum,i| sum + i.length }
            req.body_stream    = CompositeReadIO.new(*ios)

            :continue
          end

          # free memory (for big file uploads)
          @data = nil

          @id = response.body
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
vimeo-1.5.2 lib/vimeo/advanced/simple_upload/chunk.rb
vimeo-1.5.1 lib/vimeo/advanced/simple_upload/chunk.rb
vimeo-1.5.0 lib/vimeo/advanced/simple_upload/chunk.rb
slainer68_vimeo-1.4.4 lib/vimeo/advanced/simple_upload/chunk.rb
slainer68_vimeo-1.4.3 lib/vimeo/advanced/simple_upload/chunk.rb
vimeo-1.4.3 lib/vimeo/advanced/simple_upload/chunk.rb
vimeo-1.4.2 lib/vimeo/advanced/simple_upload/chunk.rb
vimeo-1.4.1 lib/vimeo/advanced/simple_upload/chunk.rb
vimeo-1.4.0 lib/vimeo/advanced/simple_upload/chunk.rb