Class: S3Batch::Delete

Inherits:
Happening::S3::Item show all
Defined in:
lib/s3batch/multi_delete.rb

Constant Summary collapse

MULTIPLE_DELETE_LIMIT =
1000

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bucket, keys, options = {}) ⇒ Delete

Returns a new instance of Delete.



5
6
7
8
# File 'lib/s3batch/multi_delete.rb', line 5

def initialize(bucket, keys, options = {})
  super bucket, "NO_USE", options
  @keys = keys
end

Class Method Details

.run(s3id, s3key, bucket, keys) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/s3batch/multi_delete.rb', line 29

def self.run s3id, s3key, bucket, keys 
  EM.run {
    on_error = Proc.new {|response| puts "An error occured: #{response.response}"; EM.stop }
    on_success = Proc.new {|response| puts "Deleted!"; EM.stop }
    items = S3Batch::Delete.new bucket, keys, :aws_access_key_id => s3id, :aws_secret_access_key => s3key, :protocol => 'http'
    items.delete(:on_error => on_error, :on_success => on_success)
  }
end

Instance Method Details

#delete(request_options = {}, &blk) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/s3batch/multi_delete.rb', line 14

def delete request_options = {}, &blk
  i = 0
  while i < @keys.size
    keys = @keys.slice(i, MULTIPLE_DELETE_LIMIT)
    data = "<Delete><Quiet>true</Quiet><Object><Key>" + keys.join("</Key></Object><Object><Key>") + "</Key></Object></Delete>"
    md5 = Base64.encode64(Digest::MD5.digest(data)).strip

    headers = aws.sign("POST", path, {"Content-MD5" => md5})
    request_options[:on_success] = blk if blk          
    request_options.update(:headers => headers, :data => data)
    Happening::S3::Request.new(:post, url, {:ssl => options[:ssl]}.update(request_options)).execute
    i += MULTIPLE_DELETE_LIMIT
  end
end

#path(with_bucket = true) ⇒ Object



10
11
12
# File 'lib/s3batch/multi_delete.rb', line 10

def path(with_bucket=true)
  with_bucket ? "/#{bucket}/?delete" : "/?delete"
end