class Selectel::S3::LocalFolder
Attributes
path[R]
s3_resource[R]
Public Class Methods
new(path)
click to toggle source
# File lib/selectel/s3/local_folder.rb, line 7 def initialize(path) @path = File.expand_path(path) @s3_resource = Aws::S3::Resource.new( region: config.region, access_key_id: config.access_key_id, secret_access_key: config.secret_access_key, endpoint: config.endpoint ) end
Public Instance Methods
synchronize(container_name, remote_path)
click to toggle source
# File lib/selectel/s3/local_folder.rb, line 15 def synchronize(container_name, remote_path) objects = s3_resource.bucket(container_name).objects uploader = Uploader.new(container_name) started_at = Time.now hashed_objects = objects.each_with_object({}) { |object, result| result[object.key] = object } fetch_all_files.each do |file_path| object_key = file_path.sub(path, remote_path) if hashed_objects.key?(object_key) hashed_objects.delete(object_key) else uploader.upload_file(file_path, object_key) end end hashed_objects.values.each(&:delete) puts "Synchronized for #{ Time.now - started_at } seconds" end
Private Instance Methods
config()
click to toggle source
# File lib/selectel/s3/local_folder.rb, line 45 def config @config ||= S3.configuration end
fetch_all_files()
click to toggle source
# File lib/selectel/s3/local_folder.rb, line 41 def fetch_all_files Dir["#{ path }/**/*"].select { |object_path| File.file?(object_path) } end