mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Make changes to a copy of the options parameter
If the method alters the options hash, clients calling this method in a loop will unwittingly be sending a different hash on the second and subsequent calls.
This commit is contained in:
parent
1251e89e61
commit
3b97a23e2c
2 changed files with 17 additions and 4 deletions
|
@ -32,9 +32,10 @@ module Fog
|
|||
# @see http://docs.amazonwebservices.com/AmazonS3/latest/API/multiobjectdeleteapi.html
|
||||
|
||||
def delete_multiple_objects(bucket_name, object_names, options = {})
|
||||
headers = options.dup
|
||||
data = "<Delete>"
|
||||
data << "<Quiet>true</Quiet>" if options.delete(:quiet)
|
||||
version_ids = options.delete('versionId')
|
||||
data << "<Quiet>true</Quiet>" if headers.delete(:quiet)
|
||||
version_ids = headers.delete('versionId')
|
||||
object_names.each do |object_name|
|
||||
data << "<Object>"
|
||||
data << "<Key>#{CGI.escapeHTML(object_name)}</Key>"
|
||||
|
@ -46,7 +47,6 @@ module Fog
|
|||
end
|
||||
data << "</Delete>"
|
||||
|
||||
headers = options
|
||||
headers['Content-Length'] = data.length
|
||||
headers['Content-MD5'] = Base64.encode64(Digest::MD5.digest(data)).
|
||||
gsub("\n", '')
|
||||
|
@ -67,11 +67,13 @@ module Fog
|
|||
class Mock # :nodoc:all
|
||||
|
||||
def delete_multiple_objects(bucket_name, object_names, options = {})
|
||||
headers = options.dup
|
||||
headers.delete(:quiet)
|
||||
response = Excon::Response.new
|
||||
if bucket = self.data[:buckets][bucket_name]
|
||||
response.status = 200
|
||||
response.body = { 'DeleteResult' => [] }
|
||||
version_ids = options.delete('versionId')
|
||||
version_ids = headers.delete('versionId')
|
||||
object_names.each do |object_name|
|
||||
object_version = version_ids.nil? ? nil : version_ids[object_name]
|
||||
response.body['DeleteResult'] << delete_object_helper(bucket,
|
||||
|
|
11
tests/aws/requests/storage/delete_multiple_objects_tests.rb
Normal file
11
tests/aws/requests/storage/delete_multiple_objects_tests.rb
Normal file
|
@ -0,0 +1,11 @@
|
|||
Shindo.tests('AWS::Storage | delete_multiple_objects', ['aws']) do
|
||||
@directory = Fog::Storage[:aws].directories.create(:key => 'fogobjecttests-' + Time.now.to_i.to_s(32))
|
||||
|
||||
tests("doesn't alter options") do
|
||||
options = {:quiet => true, 'versionId' => {'fog_object' => '12345'}}
|
||||
Fog::Storage[:aws].delete_multiple_objects(@directory.identity, ['fog_object'], options)
|
||||
|
||||
test(":quiet is unchanged") { options[:quiet] }
|
||||
test("'versionId' is unchanged") { options['versionId'] == '12345' }
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue