Skip to content

Commit 0ce982c

Browse files
authored
Add ability to specify s3 restore object tier in post_object_restore (#742)
* Add ability to specify s3 restore object tier in post_object_restore #740 * Refactor post_object_restore to accept options hash for parameters, deprecating bare days parameter usage #740 * Update post_object_restore tests to use options hash for parameters and add additional test case for days parameter #740
1 parent 6b5bf0d commit 0ce982c

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

lib/fog/aws/requests/storage/post_object_restore.rb

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ class Real
66
#
77
# @param bucket_name [String] Name of bucket containing object
88
# @param object_name [String] Name of object to restore
9-
# @option days [Integer] Number of days to restore object for. Defaults to 100000 (a very long time)
9+
# @param options [Hash] Optional parameters
10+
# @option options [Integer] :days Number of days to restore object for. Defaults to 100000 (a very long time)
11+
# @option options [String] :tier Glacier retrieval tier. Can be 'Standard', 'Bulk', or 'Expedited'
1012
#
1113
# @return [Excon::Response] response:
1214
# * status [Integer] 200 (OK) Object is previously restored
@@ -15,11 +17,24 @@ class Real
1517
#
1618
# @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html
1719
#
18-
def post_object_restore(bucket_name, object_name, days = 100000)
20+
def post_object_restore(bucket_name, object_name, options = {})
1921
raise ArgumentError.new('bucket_name is required') unless bucket_name
2022
raise ArgumentError.new('object_name is required') unless object_name
2123

22-
data = '<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-3-01"><Days>' + days.to_s + '</Days></RestoreRequest>'
24+
unless options.is_a?(Hash)
25+
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})[/]")
26+
options = { :days => options }
27+
end
28+
29+
days = options[:days] || 100000
30+
tier = options[:tier]
31+
32+
data = '<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
33+
data += '<Days>' + days.to_s + '</Days>'
34+
if tier
35+
data += '<GlacierJobParameters><Tier>' + tier + '</Tier></GlacierJobParameters>'
36+
end
37+
data += '</RestoreRequest>'
2338

2439
headers = {}
2540
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)
3954
end
4055

4156
class Mock # :nodoc:all
42-
def post_object_restore(bucket_name, object_name, days = 100000)
57+
def post_object_restore(bucket_name, object_name, options = {})
58+
unless options.is_a?(Hash)
59+
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})[/]")
60+
options = { :days => options }
61+
end
62+
4363
response = get_object(bucket_name, object_name)
4464
response.body = nil
4565
response

tests/requests/storage/object_tests.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,16 @@
9696
Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object')
9797
end
9898

99+
tests("#post_object_restore('#{@directory.identity}', 'fog_object', :days => 5, :tier => 'Bulk')").succeeds do
100+
pending unless Fog.mocking?
101+
Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', :days => 5, :tier => 'Bulk')
102+
end
103+
104+
tests("#post_object_restore('#{@directory.identity}', 'fog_object', 5)").succeeds do
105+
pending unless Fog.mocking?
106+
Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', 5)
107+
end
108+
99109
tests("#put_object_acl('#{@directory.identity}', 'fog_object', 'private')").succeeds do
100110
Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', 'private')
101111
end

0 commit comments

Comments
 (0)