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