class S3Sync::Upload

Attributes

bucket[RW]
files[RW]
key_id[RW]
key_secret[RW]
region[RW]
secret_phrase[RW]

Public Class Methods

new(options = S3Sync.configuration) click to toggle source
# File lib/s3_sync/upload.rb, line 5
def initialize(options = S3Sync.configuration)
  @key_id = options.key_id
  @key_secret = options.key_secret
  @region = options.region
  @bucket = options.bucket
  @secret_phrase = options.secret_phrase
  @files = options.files
  raise "check your configuration" unless [@key_id, @key_secret, @region, @bucket, @secret_phrase].map{|s| s.class}.uniq == [String] && @files.is_a?(Array)

  creds = Aws::Credentials.new(@key_id, @key_secret)

  # Create bucket.

  resource = Aws::S3::Resource.new(:region => @region, credentials: creds)
  bucket_names = resource.buckets.map{|b| b.name}
  resource.create_bucket(:bucket => @bucket, :acl => "private") unless bucket_names.include?(@bucket)

  # Upload files

  client = Aws::S3::Client.new(:region => @region, :credentials => creds)

  @files.each do |file|
    raise "couldn't find file #{file}" unless File.exist?(file)
    encrypted_file_contents = Encryptor.encrypt(File.read(file), :key => @secret_phrase)
    s3_file = File.join(Date.today.to_s, file)
    client.put_object(:bucket => @bucket, :key => s3_file, :body => encrypted_file_contents)
    puts "uploaded encrypted contents of #{file} to #{@bucket}/#{s3_file}"
  end
end