class Aws::S3::FilePart

A utility class that provides an IO-like interface to a portion of a file on disk. @api private

Attributes

first_byte[R]

@return [Integer]

last_byte[R]

@return [Integer]

size[R]

@return [Integer]

source[R]

@return [String, Pathname, File, Tempfile]

Public Class Methods

new(options = {}) click to toggle source

@option options [required, String, Pathname, File, Tempfile] :source

The file to upload.

@option options [required, Integer] :offset The file part will read

starting at this byte offset.

@option options [required, Integer] :size The maximum number of bytes to

read from the `:offset`.
# File lib/aws-sdk-s3/file_part.rb, line 19
def initialize(options = {})
  @source = options[:source]
  @first_byte = options[:offset]
  @last_byte = @first_byte + options[:size]
  @size = options[:size]
  @file = nil
end

Public Instance Methods

close() click to toggle source
# File lib/aws-sdk-s3/file_part.rb, line 52
def close
  @file.close if @file
end
read(bytes = nil, output_buffer = nil) click to toggle source
# File lib/aws-sdk-s3/file_part.rb, line 39
def read(bytes = nil, output_buffer = nil)
  open_file unless @file
  read_from_file(bytes, output_buffer)
end
rewind() click to toggle source
# File lib/aws-sdk-s3/file_part.rb, line 44
def rewind
  if @file
    @file.seek(@first_byte)
    @position = @first_byte
  end
  0
end

Private Instance Methods

open_file() click to toggle source
# File lib/aws-sdk-s3/file_part.rb, line 58
def open_file
  @file = File.open(@source, 'rb')
  rewind
end
read_from_file(bytes, output_buffer) click to toggle source
# File lib/aws-sdk-s3/file_part.rb, line 63
def read_from_file(bytes, output_buffer)
  length = [remaining_bytes, *bytes].min
  data   = @file.read(length, output_buffer)

  @position += data ? data.bytesize : 0

  data.to_s unless bytes && (data.nil? || data.empty?)
end
remaining_bytes() click to toggle source
# File lib/aws-sdk-s3/file_part.rb, line 72
def remaining_bytes
  @last_byte - @position
end