class PrelandsRails::MyAwsClient

Constants

ACL_PUBLIC_READ

Public Class Methods

new(access_key, secret_key, region) click to toggle source
# File lib/prelands_rails/concerns/my_aws_client.rb, line 10
def initialize(access_key, secret_key, region)
  @s3 = Aws::S3::Resource.new(region: region, access_key_id: access_key, secret_access_key: secret_key)
end

Public Instance Methods

bucket_objects_count(bucket_name) click to toggle source
# File lib/prelands_rails/concerns/my_aws_client.rb, line 14
def bucket_objects_count(bucket_name)
  bucket = @s3.bucket bucket_name
  result = bucket.objects.count
  log :bucket_objects_count, 'bucket_name=%s, result=%s' % [bucket_name, result]
  result
rescue Aws::S3::Errors::NoSuchBucket
  log :bucket_objects_count, ['No such bucket: ', bucket_name].join
end
create_bucket_if_not_exists(bucket_name) click to toggle source

@return [True]

# File lib/prelands_rails/concerns/my_aws_client.rb, line 30
def create_bucket_if_not_exists(bucket_name)
  log :create_bucket_if_not_exists, 'bucket_name=%s' % bucket_name
  @s3.create_bucket bucket: bucket_name
  true
rescue Aws::S3::Errors::BucketAlreadyOwnedByYou
  true
rescue StandardError => e
  log :create_bucket_if_not_exists, e.message
  false
end
delete_bucket(bucket_name) click to toggle source
# File lib/prelands_rails/concerns/my_aws_client.rb, line 41
def delete_bucket(bucket_name)
  log :delete_bucket, 'bucket_name=%s' % bucket_name
  @s3.client.delete_bucket bucket: bucket_name
rescue StandardError => e
  log :delete_bucket, e.message
  false
end
delete_objects(bucket_name, objects) click to toggle source
# File lib/prelands_rails/concerns/my_aws_client.rb, line 59
def delete_objects(bucket_name, objects)
  log :delete_objects, 'bucket_name=%s' % bucket_name
  result = @s3.client.delete_objects({
    bucket: bucket_name,
    delete: {
      objects: objects
    }
  })
  log :delete_objects, result
rescue StandardError => e
  log :delete_objects, e.message
  false
end
list_buckets() click to toggle source

@return [struct Aws::S3::Types::ListBucketsOutput]

# File lib/prelands_rails/concerns/my_aws_client.rb, line 24
def list_buckets
  result = @s3.client.list_buckets({})
  log :list_buckets, result.buckets.map(&:name)
end
list_objects(bucket_name) click to toggle source
# File lib/prelands_rails/concerns/my_aws_client.rb, line 49
def list_objects(bucket_name)
  log :list_objects, 'bucket_name=%s' % bucket_name
  result = (@s3.client.list_objects bucket: bucket_name).contents.map(&:key)
  log :list_objects, result
  result
rescue StandardError => e
  log :list_objects, e.message
  false
end
upload_file(path_to_file, s3_file_name, bucket_name) click to toggle source

@param [String] path_to_file Абсолютный к файлу на хосте. @param [String] s3_file_name Под каким именем будет сохранён файл на AWS. @param [String] bucket_name Название bucket

# File lib/prelands_rails/concerns/my_aws_client.rb, line 77
def upload_file(path_to_file, s3_file_name, bucket_name)
  begin
    obj = @s3.bucket(bucket_name).object s3_file_name
    begin
      if obj.get
        log :upload_file, [s3_file_name, ' exists, skipping..'].join('')
      end
    rescue Aws::S3::Errors::NoSuchKey => _e
      obj.upload_file path_to_file, acl: ACL_PUBLIC_READ
      log :upload_file, [s3_file_name, ' uploaded to "', bucket_name, '".'].join('')
    end
  rescue Aws::S3::Errors::NoSuchBucket => _e
    log :upload_file, 'No such bucket, create bucket: \'%s\'] ' % bucket_name
    create_bucket_if_not_exists bucket_name
    retry
  end
end

Private Instance Methods

log(method, output) click to toggle source
# File lib/prelands_rails/concerns/my_aws_client.rb, line 97
def log(method, output)
  Rails.logger.info "\r\t\e[33m\e[1m<MyAwsClient.%s> %s\e[0m" % [method, output]
  nil
end