class Attachie::S3Driver

Attributes

s3_client[RW]
s3_resource[RW]

Public Class Methods

new(s3_client) click to toggle source
# File lib/attachie/s3_driver.rb, line 57
def initialize(s3_client)
  self.s3_client = s3_client
  self.s3_resource = Aws::S3::Resource.new(client: s3_client)
end

Public Instance Methods

delete(name, bucket) click to toggle source
# File lib/attachie/s3_driver.rb, line 121
def delete(name, bucket)
  s3_resource.bucket(bucket).object(name).delete
end
download(name, bucket, path) click to toggle source
# File lib/attachie/s3_driver.rb, line 117
def download(name, bucket, path)
  s3_resource.bucket(bucket).object(name).download_file(path)
end
exists?(name, bucket) click to toggle source
# File lib/attachie/s3_driver.rb, line 125
def exists?(name, bucket)
  s3_resource.bucket(bucket).object(name).exists?
end
info(name, bucket) click to toggle source
# File lib/attachie/s3_driver.rb, line 79
def info(name, bucket)
  object = s3_resource.bucket(bucket).object(name)

  {
    content_length: object.content_length,
    last_modified: object.last_modified,
    content_type: object.content_type
  }
end
list(bucket, prefix: nil) { |key| ... } click to toggle source
# File lib/attachie/s3_driver.rb, line 68
def list(bucket, prefix: nil)
  return enum_for(:list, bucket, prefix: prefix) unless block_given?

  options = {}
  options[:prefix] = prefix if prefix

  s3_resource.bucket(bucket).objects(options).each do |object|
    yield object.key
  end
end
presigned_post(name, bucket, options = {}) click to toggle source
# File lib/attachie/s3_driver.rb, line 62
def presigned_post(name, bucket, options = {})
  res = s3_resource.bucket(bucket).object(name).presigned_post(options)

  return { fields: res.fields, headers: {}, method: "post", url: res.url }
end
store(name, data_or_io, bucket, options = {}) click to toggle source
# File lib/attachie/s3_driver.rb, line 89
def store(name, data_or_io, bucket, options = {})
  opts = options.dup

  mime_type = MIME::Types.of(name).first

  opts[:content_type] ||= mime_type.content_type if mime_type
  opts[:content_type] ||= "application/octet-stream"

  opts[:body] = data_or_io

  s3_resource.bucket(bucket).object(name).put(opts)
end
store_multipart(name, bucket, options = {}, &block) click to toggle source
# File lib/attachie/s3_driver.rb, line 102
def store_multipart(name, bucket, options = {}, &block)
  opts = options.dup

  mime_type = MIME::Types.of(name).first

  opts[:content_type] ||= mime_type.content_type if mime_type
  opts[:content_type] ||= "application/octet-stream"

  S3MultipartUpload.new(s3_client, name, bucket, opts, &block)
end
temp_url(name, bucket, options = {}) click to toggle source
# File lib/attachie/s3_driver.rb, line 129
def temp_url(name, bucket, options = {})
  opts = options.dup
  opts[:expires_in] = opts.delete(:expires_in).to_i if opts.key?(:expires_in)

  method = opts.delete(:method) || :get

  s3_resource.bucket(bucket).object(name).presigned_url(method, opts)
end
value(name, bucket) click to toggle source
# File lib/attachie/s3_driver.rb, line 113
def value(name, bucket)
  s3_resource.bucket(bucket).object(name).get.body.read.force_encoding(Encoding::BINARY)
end