1
0
Fork 0
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:
Joe Yates 2013-12-05 10:06:59 +01:00
parent 1251e89e61
commit 3b97a23e2c
2 changed files with 17 additions and 4 deletions

View file

@ -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,

View 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