class Usmu::S3::Uploader

Attributes

bucket[R]
configuration[R]
log[R]
s3_configuration[R]

Public Class Methods

new(configuration, s3_configuration) click to toggle source

@param [Usmu::Configuration] configuration @param [Usmu::S3::S3Configuration] s3_configuration

# File lib/usmu/s3/uploader.rb, line 7
def initialize(configuration, s3_configuration)
  @log = Logging.logger[self]
  @configuration = configuration
  @s3_configuration = s3_configuration
  s3 = Aws::S3::Resource.new(credentials: s3_configuration.credentials, region: s3_configuration.region)
  @bucket = s3.bucket(s3_configuration.bucket)
end

Public Instance Methods

push(diff) click to toggle source
# File lib/usmu/s3/uploader.rb, line 15
def push(diff)
  push_local(diff[:local])
  push_local(diff[:updated])
  delete_remote(diff[:remote])
end

Private Instance Methods

delete_remote(files) click to toggle source
# File lib/usmu/s3/uploader.rb, line 42
def delete_remote(files)
  # We can 'only' delete 1000 items at a time with #delete_objects.
  for i in (0...files.length).step(1000)
    deleting = files.slice(i, 1000)
    for f in deleting
      @log.success("Deleting #{f}")
    end
    @bucket.delete_objects({delete: {objects: deleting.map { |f| {key: f} }}})
  end
end
push_local(files) click to toggle source
# File lib/usmu/s3/uploader.rb, line 28
def push_local(files)
  storage_class = @s3_configuration.reduced_redundancy ? 'REDUCED_REDUNDANCY' : 'STANDARD'
  for file in files
    @log.success("Uploading #{file}")
    File.open(File.join(@configuration.destination_path, file), 'r') do |io|
      @bucket.put_object({
                             key: file,
                             body: io,
                             storage_class: storage_class
                         })
    end
  end
end