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