diff --git a/lib/fog/aws/requests/storage/post_object_restore.rb b/lib/fog/aws/requests/storage/post_object_restore.rb index 9b9b05d75..bdcd92132 100644 --- a/lib/fog/aws/requests/storage/post_object_restore.rb +++ b/lib/fog/aws/requests/storage/post_object_restore.rb @@ -6,7 +6,9 @@ class Real # # @param bucket_name [String] Name of bucket containing object # @param object_name [String] Name of object to restore - # @option days [Integer] Number of days to restore object for. Defaults to 100000 (a very long time) + # @param options [Hash] Optional parameters + # @option options [Integer] :days Number of days to restore object for. Defaults to 100000 (a very long time) + # @option options [String] :tier Glacier retrieval tier. Can be 'Standard', 'Bulk', or 'Expedited' # # @return [Excon::Response] response: # * status [Integer] 200 (OK) Object is previously restored @@ -15,11 +17,24 @@ class Real # # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html # - def post_object_restore(bucket_name, object_name, days = 100000) + def post_object_restore(bucket_name, object_name, options = {}) raise ArgumentError.new('bucket_name is required') unless bucket_name raise ArgumentError.new('object_name is required') unless object_name - data = '' + days.to_s + '' + unless options.is_a?(Hash) + Fog::Logger.deprecation("post_object_restore with a bare days parameter is deprecated, use post_object_restore(bucket_name, object_name, :days => days) instead [light_black](#{caller.first})[/]") + options = { :days => options } + end + + days = options[:days] || 100000 + tier = options[:tier] + + data = '' + data += '' + days.to_s + '' + if tier + data += '' + tier + '' + end + data += '' headers = {} headers['Content-MD5'] = Base64.encode64(OpenSSL::Digest::MD5.digest(data)).strip @@ -39,7 +54,12 @@ def post_object_restore(bucket_name, object_name, days = 100000) end class Mock # :nodoc:all - def post_object_restore(bucket_name, object_name, days = 100000) + def post_object_restore(bucket_name, object_name, options = {}) + unless options.is_a?(Hash) + Fog::Logger.deprecation("post_object_restore with a bare days parameter is deprecated, use post_object_restore(bucket_name, object_name, :days => days) instead [light_black](#{caller.first})[/]") + options = { :days => options } + end + response = get_object(bucket_name, object_name) response.body = nil response diff --git a/tests/requests/storage/object_tests.rb b/tests/requests/storage/object_tests.rb index 053112163..7740aead7 100644 --- a/tests/requests/storage/object_tests.rb +++ b/tests/requests/storage/object_tests.rb @@ -96,6 +96,16 @@ Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object') end + tests("#post_object_restore('#{@directory.identity}', 'fog_object', :days => 5, :tier => 'Bulk')").succeeds do + pending unless Fog.mocking? + Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', :days => 5, :tier => 'Bulk') + end + + tests("#post_object_restore('#{@directory.identity}', 'fog_object', 5)").succeeds do + pending unless Fog.mocking? + Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', 5) + end + tests("#put_object_acl('#{@directory.identity}', 'fog_object', 'private')").succeeds do Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', 'private') end