Class: AssetCloud::S3Bucket

Inherits:
Bucket
  • Object
show all
Defined in:
lib/asset_cloud/buckets/s3_bucket.rb

Instance Attribute Summary

Attributes inherited from Bucket

#cloud, #name

Instance Method Summary collapse

Methods inherited from Bucket

#initialize, #versioned?

Constructor Details

This class inherits a constructor from AssetCloud::Bucket

Instance Method Details

#delete(key) ⇒ Object



44
45
46
47
48
# File 'lib/asset_cloud/buckets/s3_bucket.rb', line 44

def delete(key)
  object = cloud.s3_bucket(key).object(absolute_key(key))
  object.delete
  true
end

#ls(key = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/asset_cloud/buckets/s3_bucket.rb', line 5

def ls(key = nil)
  key = absolute_key(key)

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

  objects = cloud.s3_bucket(key).objects(options)
  objects.map { |o| cloud[relative_key(o.key)] }
end

#read(key, options = {}) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/asset_cloud/buckets/s3_bucket.rb', line 15

def read(key, options = {})
  options = options.dup

  options[:range] = http_byte_range(options[:range]) if options[:range]

  bucket = cloud.s3_bucket(key)
  if encryption_key = options.delete(:encryption_key)
    bucket = encrypted_bucket(bucket, encryption_key)
  end

  object = bucket.object(absolute_key(key)).get(options)

  object.body.respond_to?(:read) ? object.body.read : object.body
rescue ::Aws::Errors::ServiceError
  raise AssetCloud::AssetNotFoundError, key
end

#stat(key) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/asset_cloud/buckets/s3_bucket.rb', line 50

def stat(key)
  bucket = cloud.s3_bucket(key)
   = bucket.client.head_object(bucket: bucket.name, key: absolute_key(key))

  AssetCloud::.new(true, [:content_length], nil, [:last_modified])
rescue Aws::S3::Errors::NoSuchKey, Aws::S3::Errors::NotFound
  AssetCloud::.new(false)
end

#write(key, data, options = {}) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/asset_cloud/buckets/s3_bucket.rb', line 32

def write(key, data, options = {})
  options = options.dup

  bucket = cloud.s3_bucket(key)
  if encryption_key = options.delete(:encryption_key)
    bucket = encrypted_bucket(bucket, encryption_key)
  end

  object = bucket.object(absolute_key(key))
  object.put(options.merge(body: data))
end