Class: S3::ObjectDeleteBatchRequest

Inherits:
Request
  • Object
show all
Defined in:
lib/s3/object_delete_batch_request.rb

Constant Summary

Constants inherited from Request

Request::AWS_ALGORITHM, Request::AWS_REQUEST, Request::SERVICE, Request::UNSIGNED_PAYLOAD

Instance Method Summary collapse

Methods inherited from Request

#initialize

Constructor Details

This class inherits a constructor from S3::Request

Instance Method Details

#parse_response(body) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/s3/object_delete_batch_request.rb', line 34

def parse_response( body )
  document = parse_xml( body )
  document.remove_namespaces!

  deleted = document.xpath( '//Deleted' ).map do | node |
    { key: node.at( 'Key' )&.text,
      version_id: node.at( 'VersionId' )&.text,
      delete_marker: node.at( 'DeleteMarker' )&.text == 'true',
      delete_marker_version_id: node.at( 'DeleteMarkerVersionId' )&.text
    }
  end

  errors = document.xpath( '//Error' ).map do | node |
    { key: node.at( 'Key' )&.text,
      version_id: node.at( 'VersionId' )&.text,
      code: node.at( 'Code' )&.text,
      message: node.at( 'Message' )&.text
    }
  end

  { deleted: deleted, errors: errors }
end

#submit(bucket:, keys:) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/s3/object_delete_batch_request.rb', line 3

def submit( bucket:, keys: )
  path = "/#{ bucket }"
  query = 'delete='

  objects_xml = keys.map do | key_item |
    if key_item.is_a?( Hash )
      version_part = key_item[ :version_id ] ? "<VersionId>#{ key_item[ :version_id ] }</VersionId>" : ''
      "<Object><Key>#{ escape_xml( key_item[ :key ] ) }</Key>#{ version_part }</Object>"
    else
      "<Object><Key>#{ escape_xml( key_item ) }</Key></Object>"
    end
  end.join

  body = "    <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <Delete xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">\n      <Quiet>false</Quiet>\n      \#{ objects_xml }\n    </Delete>\n  XML\n\n  content_md5 = Base64.strict_encode64( Digest::MD5.digest( body ) )\n  headers = { 'Content-MD5' => content_md5 }\n\n  response = post( path, body: body, query: query, headers: headers )\n\n  build_result( response, ObjectDeleteBatchResult ) do\n    ObjectDeleteBatchResult.new( parse_response( response.body ) )\n  end\nend\n"