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



46
47
48
49
50
# File 'lib/asset_cloud/buckets/s3_bucket.rb', line 46

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

#ls(key = nil) ⇒ Object



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

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



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

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



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

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

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

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



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

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