diff --git a/aws-sdk-resources/lib/aws-sdk-resources/services/s3/object.rb b/aws-sdk-resources/lib/aws-sdk-resources/services/s3/object.rb index eaad393b026..f023c335ace 100644 --- a/aws-sdk-resources/lib/aws-sdk-resources/services/s3/object.rb +++ b/aws-sdk-resources/lib/aws-sdk-resources/services/s3/object.rb @@ -245,10 +245,11 @@ def public_url(options = {}) # without any errors. # def upload_file(source, options = {}) + uploading_options = options.dup uploader = FileUploader.new( - multipart_threshold: options.delete(:multipart_threshold), + multipart_threshold: uploading_options.delete(:multipart_threshold), client: client) - uploader.upload(source, options.merge(bucket: bucket_name, key: key)) + uploader.upload(source, uploading_options.merge(bucket: bucket_name, key: key)) true end diff --git a/aws-sdk-resources/spec/services/s3/object/upload_file_spec.rb b/aws-sdk-resources/spec/services/s3/object/upload_file_spec.rb index 0617c46de36..274b37b6559 100644 --- a/aws-sdk-resources/spec/services/s3/object/upload_file_spec.rb +++ b/aws-sdk-resources/spec/services/s3/object/upload_file_spec.rb @@ -51,6 +51,19 @@ module S3 end } + describe 'accepts options without mutating them' do + + it 'uploads objects with custom options' do + options = {}.freeze + expect(client).to receive(:put_object).with( + bucket: 'bucket', + key: 'key', + body: one_meg_file) + object.upload_file(one_meg_file, options) + end + + end + describe 'small objects' do it 'uploads small objects using Client#put_object' do