Class: PrelandsRails::MyAwsClient

Inherits:
Object
  • Object
show all
Defined in:
lib/prelands_rails/concerns/my_aws_client.rb

Constant Summary collapse

ACL_PUBLIC_READ =
'public-read'

Instance Method Summary collapse

Constructor Details

#initialize(access_key, secret_key, region) ⇒ MyAwsClient



10
11
12
# 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

Instance Method Details

#bucket_objects_count(bucket_name) ⇒ Object



14
15
16
17
18
19
20
21
# 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) ⇒ True



30
31
32
33
34
35
36
37
38
39
# 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) ⇒ Object



41
42
43
44
45
46
47
# 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) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# 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_bucketsstruct Aws::S3::Types::ListBucketsOutput



24
25
26
27
# 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) ⇒ Object



49
50
51
52
53
54
55
56
57
# 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

#move_file(s3_old_file_name, s3_new_file_name, bucket_name) ⇒ Object

Переместит файл в пределах bucket_name



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 97

def move_file(s3_old_file_name, s3_new_file_name, bucket_name)
  log :move_file, ['', s3_old_file_name, ' moving to ', s3_new_file_name, ' in ', bucket_name, '.'].join('"')

  obj        = Aws::S3::Object.new(bucket_name, s3_old_file_name, client: @s3.client)
  new_target = [bucket_name, s3_new_file_name].join('/')

  begin
    obj.move_to new_target
  rescue Aws::S3::Errors::NoSuchKey
    log :move_file, 'Aws::S3::Errors::NoSuchKey: The specified key does not exist: "%s"' % s3_old_file_name
    return false
  end

  obj = Aws::S3::Object.new(bucket_name, s3_new_file_name, client: @s3.client)

  begin
    obj.acl.put({ acl: ACL_PUBLIC_READ })
  rescue Aws::S3::Errors::NoSuchKey
    log :move_file_acl_put, 'Aws::S3::Errors::NoSuchKey: The specified key does not exist: "%s"' % s3_old_file_name
    return false
  end

  true
end

#upload_file(path_to_file, s3_file_name, bucket_name) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 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