Module: AwsS3

Defined in:
lib/aws_s3.rb

Constant Summary collapse

S3_REGION =
APP_CONFIG['s3_region'] || 'us-east-1'
S3_BUCKET =
APP_CONFIG['s3_bucket']
S3_FOLDER =
APP_CONFIG['s3_folder'] || 'results'

Class Method Summary collapse

Class Method Details

.bucketObject



15
16
17
# File 'lib/aws_s3.rb', line 15

def bucket
  @bucket ||= resource.bucket(S3_BUCKET)
end

.clientObject



11
12
13
# File 'lib/aws_s3.rb', line 11

def client
  @client ||= Aws::S3::Client.new(region: S3_REGION)
end

.copy(source_key, target_key) ⇒ Object

An intra bucket copy



24
25
26
# File 'lib/aws_s3.rb', line 24

def copy(source_key, target_key)
  client.copy_object(bucket: S3_BUCKET, copy_source: S3_BUCKET + '/' + source_key, key: target_key)
end

.object(key) ⇒ Object



19
20
21
# File 'lib/aws_s3.rb', line 19

def object(key)
  bucket.object(key)
end

.pipe_reader(s3_key) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/aws_s3.rb', line 51

def pipe_reader(s3_key)
  bucket = Aws::S3::Resource.new(region: S3_REGION).bucket(S3_BUCKET)
  reader, writer = IO.pipe
  writer.instance_eval('undef :rewind')
  writer.binmode()

  t = Thread.new do
    bucket.object(s3_key).get(response_target: writer)
    writer.close
  end

  t.abort_on_exception = true
  reader
end

.presigned_url(key, filename, expires_in) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/aws_s3.rb', line 32

def presigned_url(key, filename, expires_in)
  Pester.s3.retry do
    obj = object(key)
    if obj.exists?
      obj.presigned_url(:get, response_content_disposition: "attachment; filename=#{filename}", expires_in: expires_in)
    else
      nil
    end
  end
end

.resourceObject



7
8
9
# File 'lib/aws_s3.rb', line 7

def resource
  @resource ||= Aws::S3::Resource.new(region: S3_REGION)
end

.s3_enabled?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/aws_s3.rb', line 28

def s3_enabled?
  S3_REGION.present? && S3_BUCKET.present?
end

.store(key, filepath) ⇒ Object



43
44
45
46
47
48
# File 'lib/aws_s3.rb', line 43

def store(key, filepath)
  Pester.s3.retry do
    obj = AwsS3.object(key)
    obj.upload_file(filepath)
  end
end