aws-sdk-s3 1.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/lib/aws-sdk-s3.rb +66 -0
  3. data/lib/aws-sdk-s3/bucket.rb +595 -0
  4. data/lib/aws-sdk-s3/bucket_acl.rb +168 -0
  5. data/lib/aws-sdk-s3/bucket_cors.rb +146 -0
  6. data/lib/aws-sdk-s3/bucket_lifecycle.rb +164 -0
  7. data/lib/aws-sdk-s3/bucket_logging.rb +142 -0
  8. data/lib/aws-sdk-s3/bucket_notification.rb +187 -0
  9. data/lib/aws-sdk-s3/bucket_policy.rb +138 -0
  10. data/lib/aws-sdk-s3/bucket_region_cache.rb +79 -0
  11. data/lib/aws-sdk-s3/bucket_request_payment.rb +128 -0
  12. data/lib/aws-sdk-s3/bucket_tagging.rb +143 -0
  13. data/lib/aws-sdk-s3/bucket_versioning.rb +188 -0
  14. data/lib/aws-sdk-s3/bucket_website.rb +177 -0
  15. data/lib/aws-sdk-s3/client.rb +3171 -0
  16. data/lib/aws-sdk-s3/client_api.rb +1991 -0
  17. data/lib/aws-sdk-s3/customizations.rb +29 -0
  18. data/lib/aws-sdk-s3/customizations/bucket.rb +127 -0
  19. data/lib/aws-sdk-s3/customizations/multipart_upload.rb +42 -0
  20. data/lib/aws-sdk-s3/customizations/object.rb +257 -0
  21. data/lib/aws-sdk-s3/customizations/object_summary.rb +65 -0
  22. data/lib/aws-sdk-s3/customizations/types/list_object_versions_output.rb +11 -0
  23. data/lib/aws-sdk-s3/encryption.rb +19 -0
  24. data/lib/aws-sdk-s3/encryption/client.rb +369 -0
  25. data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +178 -0
  26. data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +63 -0
  27. data/lib/aws-sdk-s3/encryption/default_key_provider.rb +38 -0
  28. data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +50 -0
  29. data/lib/aws-sdk-s3/encryption/errors.rb +13 -0
  30. data/lib/aws-sdk-s3/encryption/io_auth_decrypter.rb +50 -0
  31. data/lib/aws-sdk-s3/encryption/io_decrypter.rb +29 -0
  32. data/lib/aws-sdk-s3/encryption/io_encrypter.rb +69 -0
  33. data/lib/aws-sdk-s3/encryption/key_provider.rb +29 -0
  34. data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +71 -0
  35. data/lib/aws-sdk-s3/encryption/materials.rb +58 -0
  36. data/lib/aws-sdk-s3/encryption/utils.rb +79 -0
  37. data/lib/aws-sdk-s3/errors.rb +23 -0
  38. data/lib/aws-sdk-s3/file_part.rb +75 -0
  39. data/lib/aws-sdk-s3/file_uploader.rb +58 -0
  40. data/lib/aws-sdk-s3/legacy_signer.rb +186 -0
  41. data/lib/aws-sdk-s3/multipart_file_uploader.rb +187 -0
  42. data/lib/aws-sdk-s3/multipart_upload.rb +287 -0
  43. data/lib/aws-sdk-s3/multipart_upload_error.rb +16 -0
  44. data/lib/aws-sdk-s3/multipart_upload_part.rb +314 -0
  45. data/lib/aws-sdk-s3/object.rb +942 -0
  46. data/lib/aws-sdk-s3/object_acl.rb +214 -0
  47. data/lib/aws-sdk-s3/object_copier.rb +99 -0
  48. data/lib/aws-sdk-s3/object_multipart_copier.rb +179 -0
  49. data/lib/aws-sdk-s3/object_summary.rb +794 -0
  50. data/lib/aws-sdk-s3/object_version.rb +406 -0
  51. data/lib/aws-sdk-s3/plugins/accelerate.rb +92 -0
  52. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +89 -0
  53. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +23 -0
  54. data/lib/aws-sdk-s3/plugins/dualstack.rb +70 -0
  55. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +29 -0
  56. data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +23 -0
  57. data/lib/aws-sdk-s3/plugins/http_200_errors.rb +47 -0
  58. data/lib/aws-sdk-s3/plugins/location_constraint.rb +33 -0
  59. data/lib/aws-sdk-s3/plugins/md5s.rb +79 -0
  60. data/lib/aws-sdk-s3/plugins/redirects.rb +41 -0
  61. data/lib/aws-sdk-s3/plugins/s3_signer.rb +208 -0
  62. data/lib/aws-sdk-s3/plugins/sse_cpk.rb +68 -0
  63. data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +94 -0
  64. data/lib/aws-sdk-s3/presigned_post.rb +647 -0
  65. data/lib/aws-sdk-s3/presigner.rb +160 -0
  66. data/lib/aws-sdk-s3/resource.rb +96 -0
  67. data/lib/aws-sdk-s3/types.rb +5750 -0
  68. data/lib/aws-sdk-s3/waiters.rb +178 -0
  69. metadata +154 -0
@@ -0,0 +1,16 @@
1
+ module Aws
2
+ module S3
3
+ class MultipartUploadError < StandardError
4
+
5
+ def initialize(message, errors)
6
+ @errors = errors
7
+ super(message)
8
+ end
9
+
10
+ # @return [Array<StandardError>] The list of errors encountered
11
+ # when uploading or aborting the upload.
12
+ attr_reader :errors
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,314 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ module Aws
9
+ module S3
10
+ class MultipartUploadPart
11
+
12
+ extend Aws::Deprecations
13
+
14
+ # @overload def initialize(bucket_name, object_key, multipart_upload_id, part_number, options = {})
15
+ # @param [String] bucket_name
16
+ # @param [String] object_key
17
+ # @param [String] multipart_upload_id
18
+ # @param [Integer] part_number
19
+ # @option options [Client] :client
20
+ # @overload def initialize(options = {})
21
+ # @option options [required, String] :bucket_name
22
+ # @option options [required, String] :object_key
23
+ # @option options [required, String] :multipart_upload_id
24
+ # @option options [required, Integer] :part_number
25
+ # @option options [Client] :client
26
+ def initialize(*args)
27
+ options = Hash === args.last ? args.pop.dup : {}
28
+ @bucket_name = extract_bucket_name(args, options)
29
+ @object_key = extract_object_key(args, options)
30
+ @multipart_upload_id = extract_multipart_upload_id(args, options)
31
+ @part_number = extract_part_number(args, options)
32
+ @data = options.delete(:data)
33
+ @client = options.delete(:client) || Client.new(options)
34
+ end
35
+
36
+ # @!group Read-Only Attributes
37
+
38
+ # @return [String]
39
+ def bucket_name
40
+ @bucket_name
41
+ end
42
+
43
+ # @return [String]
44
+ def object_key
45
+ @object_key
46
+ end
47
+
48
+ # @return [String]
49
+ def multipart_upload_id
50
+ @multipart_upload_id
51
+ end
52
+
53
+ # @return [Integer]
54
+ def part_number
55
+ @part_number
56
+ end
57
+
58
+ # Date and time at which the part was uploaded.
59
+ # @return [Time]
60
+ def last_modified
61
+ data.last_modified
62
+ end
63
+
64
+ # Entity tag returned when the part was uploaded.
65
+ # @return [String]
66
+ def etag
67
+ data.etag
68
+ end
69
+
70
+ # Size of the uploaded part data.
71
+ # @return [Integer]
72
+ def size
73
+ data.size
74
+ end
75
+
76
+ # @!endgroup
77
+
78
+ # @return [Client]
79
+ def client
80
+ @client
81
+ end
82
+
83
+ # @raise [Errors::ResourceNotLoadable]
84
+ # @api private
85
+ def load
86
+ msg = "#load is not implemented, data only available via enumeration"
87
+ raise Errors::ResourceNotLoadable, msg
88
+ end
89
+ alias :reload :load
90
+
91
+ # @raise [Errors::ResourceNotLoadableError] Raises when {#data_loaded?} is `false`.
92
+ # @return [Types::Part]
93
+ # Returns the data for this {MultipartUploadPart}.
94
+ def data
95
+ load unless @data
96
+ @data
97
+ end
98
+
99
+ # @return [Boolean]
100
+ # Returns `true` if this resource is loaded. Accessing attributes or
101
+ # {#data} on an unloaded resource will trigger a call to {#load}.
102
+ def data_loaded?
103
+ !!@data
104
+ end
105
+
106
+ # @!group Actions
107
+
108
+ # @example Request syntax with placeholder values
109
+ #
110
+ # multipart_upload_part.copy_from({
111
+ # copy_source: "CopySource", # required
112
+ # copy_source_if_match: "CopySourceIfMatch",
113
+ # copy_source_if_modified_since: Time.now,
114
+ # copy_source_if_none_match: "CopySourceIfNoneMatch",
115
+ # copy_source_if_unmodified_since: Time.now,
116
+ # copy_source_range: "CopySourceRange",
117
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
118
+ # sse_customer_key: "SSECustomerKey",
119
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
120
+ # copy_source_sse_customer_algorithm: "CopySourceSSECustomerAlgorithm",
121
+ # copy_source_sse_customer_key: "CopySourceSSECustomerKey",
122
+ # copy_source_sse_customer_key_md5: "CopySourceSSECustomerKeyMD5",
123
+ # request_payer: "requester", # accepts requester
124
+ # })
125
+ # @param [Hash] options ({})
126
+ # @option options [required, String] :copy_source
127
+ # The name of the source bucket and key name of the source object,
128
+ # separated by a slash (/). Must be URL-encoded.
129
+ # @option options [String] :copy_source_if_match
130
+ # Copies the object if its entity tag (ETag) matches the specified tag.
131
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_modified_since
132
+ # Copies the object if it has been modified since the specified time.
133
+ # @option options [String] :copy_source_if_none_match
134
+ # Copies the object if its entity tag (ETag) is different than the
135
+ # specified ETag.
136
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_unmodified_since
137
+ # Copies the object if it hasn't been modified since the specified
138
+ # time.
139
+ # @option options [String] :copy_source_range
140
+ # The range of bytes to copy from the source object. The range value
141
+ # must use the form bytes=first-last, where the first and last are the
142
+ # zero-based byte offsets to copy. For example, bytes=0-9 indicates that
143
+ # you want to copy the first ten bytes of the source. You can copy a
144
+ # range only if the source object is greater than 5 GB.
145
+ # @option options [String] :sse_customer_algorithm
146
+ # Specifies the algorithm to use to when encrypting the object (e.g.,
147
+ # AES256).
148
+ # @option options [String] :sse_customer_key
149
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
150
+ # encrypting data. This value is used to store the object and then it is
151
+ # discarded; Amazon does not store the encryption key. The key must be
152
+ # appropriate for use with the algorithm specified in the
153
+ # x-amz-server-side​-encryption​-customer-algorithm header. This must be
154
+ # the same encryption key specified in the initiate multipart upload
155
+ # request.
156
+ # @option options [String] :sse_customer_key_md5
157
+ # Specifies the 128-bit MD5 digest of the encryption key according to
158
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
159
+ # ensure the encryption key was transmitted without error.
160
+ # @option options [String] :copy_source_sse_customer_algorithm
161
+ # Specifies the algorithm to use when decrypting the source object
162
+ # (e.g., AES256).
163
+ # @option options [String] :copy_source_sse_customer_key
164
+ # Specifies the customer-provided encryption key for Amazon S3 to use to
165
+ # decrypt the source object. The encryption key provided in this header
166
+ # must be one that was used when the source object was created.
167
+ # @option options [String] :copy_source_sse_customer_key_md5
168
+ # Specifies the 128-bit MD5 digest of the encryption key according to
169
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
170
+ # ensure the encryption key was transmitted without error.
171
+ # @option options [String] :request_payer
172
+ # Confirms that the requester knows that she or he will be charged for
173
+ # the request. Bucket owners need not specify this parameter in their
174
+ # requests. Documentation on downloading objects from requester pays
175
+ # buckets can be found at
176
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
177
+ # @return [Types::UploadPartCopyOutput]
178
+ def copy_from(options = {})
179
+ options = options.merge(
180
+ bucket: @bucket_name,
181
+ key: @object_key,
182
+ upload_id: @multipart_upload_id,
183
+ part_number: @part_number
184
+ )
185
+ resp = @client.upload_part_copy(options)
186
+ resp.data
187
+ end
188
+
189
+ # @example Request syntax with placeholder values
190
+ #
191
+ # multipart_upload_part.upload({
192
+ # body: source_file,
193
+ # content_length: 1,
194
+ # content_md5: "ContentMD5",
195
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
196
+ # sse_customer_key: "SSECustomerKey",
197
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
198
+ # request_payer: "requester", # accepts requester
199
+ # })
200
+ # @param [Hash] options ({})
201
+ # @option options [String, IO] :body
202
+ # Object data.
203
+ # @option options [Integer] :content_length
204
+ # Size of the body in bytes. This parameter is useful when the size of
205
+ # the body cannot be determined automatically.
206
+ # @option options [String] :content_md5
207
+ # The base64-encoded 128-bit MD5 digest of the part data.
208
+ # @option options [String] :sse_customer_algorithm
209
+ # Specifies the algorithm to use to when encrypting the object (e.g.,
210
+ # AES256).
211
+ # @option options [String] :sse_customer_key
212
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
213
+ # encrypting data. This value is used to store the object and then it is
214
+ # discarded; Amazon does not store the encryption key. The key must be
215
+ # appropriate for use with the algorithm specified in the
216
+ # x-amz-server-side​-encryption​-customer-algorithm header. This must be
217
+ # the same encryption key specified in the initiate multipart upload
218
+ # request.
219
+ # @option options [String] :sse_customer_key_md5
220
+ # Specifies the 128-bit MD5 digest of the encryption key according to
221
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
222
+ # ensure the encryption key was transmitted without error.
223
+ # @option options [String] :request_payer
224
+ # Confirms that the requester knows that she or he will be charged for
225
+ # the request. Bucket owners need not specify this parameter in their
226
+ # requests. Documentation on downloading objects from requester pays
227
+ # buckets can be found at
228
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
229
+ # @return [Types::UploadPartOutput]
230
+ def upload(options = {})
231
+ options = options.merge(
232
+ bucket: @bucket_name,
233
+ key: @object_key,
234
+ upload_id: @multipart_upload_id,
235
+ part_number: @part_number
236
+ )
237
+ resp = @client.upload_part(options)
238
+ resp.data
239
+ end
240
+
241
+ # @!group Associations
242
+
243
+ # @return [MultipartUpload]
244
+ def multipart_upload
245
+ MultipartUpload.new(
246
+ bucket_name: @bucket_name,
247
+ object_key: @object_key,
248
+ id: @multipart_upload_id,
249
+ client: @client
250
+ )
251
+ end
252
+
253
+ # @deprecated
254
+ # @api private
255
+ def identifiers
256
+ {
257
+ bucket_name: @bucket_name,
258
+ object_key: @object_key,
259
+ multipart_upload_id: @multipart_upload_id,
260
+ part_number: @part_number
261
+ }
262
+ end
263
+ deprecated(:identifiers)
264
+
265
+ private
266
+
267
+ def extract_bucket_name(args, options)
268
+ value = args[0] || options.delete(:bucket_name)
269
+ case value
270
+ when String then value
271
+ when nil then raise ArgumentError, "missing required option :bucket_name"
272
+ else
273
+ msg = "expected :bucket_name to be a String, got #{value.class}"
274
+ raise ArgumentError, msg
275
+ end
276
+ end
277
+
278
+ def extract_object_key(args, options)
279
+ value = args[1] || options.delete(:object_key)
280
+ case value
281
+ when String then value
282
+ when nil then raise ArgumentError, "missing required option :object_key"
283
+ else
284
+ msg = "expected :object_key to be a String, got #{value.class}"
285
+ raise ArgumentError, msg
286
+ end
287
+ end
288
+
289
+ def extract_multipart_upload_id(args, options)
290
+ value = args[2] || options.delete(:multipart_upload_id)
291
+ case value
292
+ when String then value
293
+ when nil then raise ArgumentError, "missing required option :multipart_upload_id"
294
+ else
295
+ msg = "expected :multipart_upload_id to be a String, got #{value.class}"
296
+ raise ArgumentError, msg
297
+ end
298
+ end
299
+
300
+ def extract_part_number(args, options)
301
+ value = args[3] || options.delete(:part_number)
302
+ case value
303
+ when Integer then value
304
+ when nil then raise ArgumentError, "missing required option :part_number"
305
+ else
306
+ msg = "expected :part_number to be a Integer, got #{value.class}"
307
+ raise ArgumentError, msg
308
+ end
309
+ end
310
+
311
+ class Collection < Aws::Resources::Collection; end
312
+ end
313
+ end
314
+ end
@@ -0,0 +1,942 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ module Aws
9
+ module S3
10
+ class Object
11
+
12
+ extend Aws::Deprecations
13
+
14
+ # @overload def initialize(bucket_name, key, options = {})
15
+ # @param [String] bucket_name
16
+ # @param [String] key
17
+ # @option options [Client] :client
18
+ # @overload def initialize(options = {})
19
+ # @option options [required, String] :bucket_name
20
+ # @option options [required, String] :key
21
+ # @option options [Client] :client
22
+ def initialize(*args)
23
+ options = Hash === args.last ? args.pop.dup : {}
24
+ @bucket_name = extract_bucket_name(args, options)
25
+ @key = extract_key(args, options)
26
+ @data = options.delete(:data)
27
+ @client = options.delete(:client) || Client.new(options)
28
+ end
29
+
30
+ # @!group Read-Only Attributes
31
+
32
+ # @return [String]
33
+ def bucket_name
34
+ @bucket_name
35
+ end
36
+
37
+ # @return [String]
38
+ def key
39
+ @key
40
+ end
41
+
42
+ # Specifies whether the object retrieved was (true) or was not (false) a
43
+ # Delete Marker. If false, this response header does not appear in the
44
+ # response.
45
+ # @return [Boolean]
46
+ def delete_marker
47
+ data.delete_marker
48
+ end
49
+
50
+ # @return [String]
51
+ def accept_ranges
52
+ data.accept_ranges
53
+ end
54
+
55
+ # If the object expiration is configured (see PUT Bucket lifecycle), the
56
+ # response includes this header. It includes the expiry-date and rule-id
57
+ # key value pairs providing object expiration information. The value of
58
+ # the rule-id is URL encoded.
59
+ # @return [String]
60
+ def expiration
61
+ data.expiration
62
+ end
63
+
64
+ # Provides information about object restoration operation and expiration
65
+ # time of the restored object copy.
66
+ # @return [String]
67
+ def restore
68
+ data.restore
69
+ end
70
+
71
+ # Last modified date of the object
72
+ # @return [Time]
73
+ def last_modified
74
+ data.last_modified
75
+ end
76
+
77
+ # Size of the body in bytes.
78
+ # @return [Integer]
79
+ def content_length
80
+ data.content_length
81
+ end
82
+
83
+ # An ETag is an opaque identifier assigned by a web server to a specific
84
+ # version of a resource found at a URL
85
+ # @return [String]
86
+ def etag
87
+ data.etag
88
+ end
89
+
90
+ # This is set to the number of metadata entries not returned in
91
+ # x-amz-meta headers. This can happen if you create metadata using an
92
+ # API like SOAP that supports more flexible metadata than the REST API.
93
+ # For example, using SOAP, you can create metadata whose values are not
94
+ # legal HTTP headers.
95
+ # @return [Integer]
96
+ def missing_meta
97
+ data.missing_meta
98
+ end
99
+
100
+ # Version of the object.
101
+ # @return [String]
102
+ def version_id
103
+ data.version_id
104
+ end
105
+
106
+ # Specifies caching behavior along the request/reply chain.
107
+ # @return [String]
108
+ def cache_control
109
+ data.cache_control
110
+ end
111
+
112
+ # Specifies presentational information for the object.
113
+ # @return [String]
114
+ def content_disposition
115
+ data.content_disposition
116
+ end
117
+
118
+ # Specifies what content encodings have been applied to the object and
119
+ # thus what decoding mechanisms must be applied to obtain the media-type
120
+ # referenced by the Content-Type header field.
121
+ # @return [String]
122
+ def content_encoding
123
+ data.content_encoding
124
+ end
125
+
126
+ # The language the content is in.
127
+ # @return [String]
128
+ def content_language
129
+ data.content_language
130
+ end
131
+
132
+ # A standard MIME type describing the format of the object data.
133
+ # @return [String]
134
+ def content_type
135
+ data.content_type
136
+ end
137
+
138
+ # The date and time at which the object is no longer cacheable.
139
+ # @return [Time]
140
+ def expires
141
+ data.expires
142
+ end
143
+
144
+ # @return [String]
145
+ def expires_string
146
+ data.expires_string
147
+ end
148
+
149
+ # If the bucket is configured as a website, redirects requests for this
150
+ # object to another object in the same bucket or to an external URL.
151
+ # Amazon S3 stores the value of this header in the object metadata.
152
+ # @return [String]
153
+ def website_redirect_location
154
+ data.website_redirect_location
155
+ end
156
+
157
+ # The Server-side encryption algorithm used when storing this object in
158
+ # S3 (e.g., AES256, aws:kms).
159
+ # @return [String]
160
+ def server_side_encryption
161
+ data.server_side_encryption
162
+ end
163
+
164
+ # A map of metadata to store with the object in S3.
165
+ # @return [Hash<String,String>]
166
+ def metadata
167
+ data.metadata
168
+ end
169
+
170
+ # If server-side encryption with a customer-provided encryption key was
171
+ # requested, the response will include this header confirming the
172
+ # encryption algorithm used.
173
+ # @return [String]
174
+ def sse_customer_algorithm
175
+ data.sse_customer_algorithm
176
+ end
177
+
178
+ # If server-side encryption with a customer-provided encryption key was
179
+ # requested, the response will include this header to provide round trip
180
+ # message integrity verification of the customer-provided encryption
181
+ # key.
182
+ # @return [String]
183
+ def sse_customer_key_md5
184
+ data.sse_customer_key_md5
185
+ end
186
+
187
+ # If present, specifies the ID of the AWS Key Management Service (KMS)
188
+ # master encryption key that was used for the object.
189
+ # @return [String]
190
+ def ssekms_key_id
191
+ data.ssekms_key_id
192
+ end
193
+
194
+ # @return [String]
195
+ def storage_class
196
+ data.storage_class
197
+ end
198
+
199
+ # If present, indicates that the requester was successfully charged for
200
+ # the request.
201
+ # @return [String]
202
+ def request_charged
203
+ data.request_charged
204
+ end
205
+
206
+ # @return [String]
207
+ def replication_status
208
+ data.replication_status
209
+ end
210
+
211
+ # The count of parts this object has.
212
+ # @return [Integer]
213
+ def parts_count
214
+ data.parts_count
215
+ end
216
+
217
+ # @!endgroup
218
+
219
+ # @return [Client]
220
+ def client
221
+ @client
222
+ end
223
+
224
+ # Loads, or reloads {#data} for the current {Object}.
225
+ # Returns `self` making it possible to chain methods.
226
+ #
227
+ # object.reload.data
228
+ #
229
+ # @return [self]
230
+ def load
231
+ resp = @client.head_object(
232
+ bucket: @bucket_name,
233
+ key: @key
234
+ )
235
+ @data = resp.data
236
+ self
237
+ end
238
+ alias :reload :load
239
+
240
+ # @return [Types::HeadObjectOutput]
241
+ # Returns the data for this {Object}. Calls
242
+ # {Client#head_object} if {#data_loaded?} is `false`.
243
+ def data
244
+ load unless @data
245
+ @data
246
+ end
247
+
248
+ # @return [Boolean]
249
+ # Returns `true` if this resource is loaded. Accessing attributes or
250
+ # {#data} on an unloaded resource will trigger a call to {#load}.
251
+ def data_loaded?
252
+ !!@data
253
+ end
254
+
255
+ # @param [Hash] options ({})
256
+ # @return [Boolean]
257
+ # Returns `true` if the Object exists.
258
+ def exists?(options = {})
259
+ begin
260
+ wait_until_exists(options.merge(max_attempts: 1))
261
+ true
262
+ rescue Aws::Waiters::Errors::UnexpectedError => e
263
+ raise e.error
264
+ rescue Aws::Waiters::Errors::WaiterFailed
265
+ false
266
+ end
267
+ end
268
+
269
+ # @param [Hash] options ({})
270
+ # @option options [Integer] :max_attempts (20)
271
+ # @option options [Float] :delay (5)
272
+ # @option options [Proc] :before_attempt
273
+ # @option options [Proc] :before_wait
274
+ # @return [Object]
275
+ def wait_until_exists(options = {})
276
+ options, params = separate_params_and_options(options)
277
+ waiter = Waiters::ObjectExists.new(options)
278
+ yield_waiter_and_warn(waiter, &Proc.new) if block_given?
279
+ waiter.wait(params.merge(bucket: @bucket_name,
280
+ key: @key))
281
+ Object.new({
282
+ bucket_name: @bucket_name,
283
+ key: @key,
284
+ client: @client
285
+ })
286
+ end
287
+
288
+ # @param [Hash] options ({})
289
+ # @option options [Integer] :max_attempts (20)
290
+ # @option options [Float] :delay (5)
291
+ # @option options [Proc] :before_attempt
292
+ # @option options [Proc] :before_wait
293
+ # @return [Object]
294
+ def wait_until_not_exists(options = {})
295
+ options, params = separate_params_and_options(options)
296
+ waiter = Waiters::ObjectNotExists.new(options)
297
+ yield_waiter_and_warn(waiter, &Proc.new) if block_given?
298
+ waiter.wait(params.merge(bucket: @bucket_name,
299
+ key: @key))
300
+ Object.new({
301
+ bucket_name: @bucket_name,
302
+ key: @key,
303
+ client: @client
304
+ })
305
+ end
306
+
307
+ # @!group Actions
308
+
309
+ # @example Request syntax with placeholder values
310
+ #
311
+ # object.copy_from({
312
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
313
+ # cache_control: "CacheControl",
314
+ # content_disposition: "ContentDisposition",
315
+ # content_encoding: "ContentEncoding",
316
+ # content_language: "ContentLanguage",
317
+ # content_type: "ContentType",
318
+ # copy_source: "CopySource", # required
319
+ # copy_source_if_match: "CopySourceIfMatch",
320
+ # copy_source_if_modified_since: Time.now,
321
+ # copy_source_if_none_match: "CopySourceIfNoneMatch",
322
+ # copy_source_if_unmodified_since: Time.now,
323
+ # expires: Time.now,
324
+ # grant_full_control: "GrantFullControl",
325
+ # grant_read: "GrantRead",
326
+ # grant_read_acp: "GrantReadACP",
327
+ # grant_write_acp: "GrantWriteACP",
328
+ # metadata: {
329
+ # "MetadataKey" => "MetadataValue",
330
+ # },
331
+ # metadata_directive: "COPY", # accepts COPY, REPLACE
332
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
333
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA
334
+ # website_redirect_location: "WebsiteRedirectLocation",
335
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
336
+ # sse_customer_key: "SSECustomerKey",
337
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
338
+ # ssekms_key_id: "SSEKMSKeyId",
339
+ # copy_source_sse_customer_algorithm: "CopySourceSSECustomerAlgorithm",
340
+ # copy_source_sse_customer_key: "CopySourceSSECustomerKey",
341
+ # copy_source_sse_customer_key_md5: "CopySourceSSECustomerKeyMD5",
342
+ # request_payer: "requester", # accepts requester
343
+ # })
344
+ # @param [Hash] options ({})
345
+ # @option options [String] :acl
346
+ # The canned ACL to apply to the object.
347
+ # @option options [String] :cache_control
348
+ # Specifies caching behavior along the request/reply chain.
349
+ # @option options [String] :content_disposition
350
+ # Specifies presentational information for the object.
351
+ # @option options [String] :content_encoding
352
+ # Specifies what content encodings have been applied to the object and
353
+ # thus what decoding mechanisms must be applied to obtain the media-type
354
+ # referenced by the Content-Type header field.
355
+ # @option options [String] :content_language
356
+ # The language the content is in.
357
+ # @option options [String] :content_type
358
+ # A standard MIME type describing the format of the object data.
359
+ # @option options [required, String] :copy_source
360
+ # The name of the source bucket and key name of the source object,
361
+ # separated by a slash (/). Must be URL-encoded.
362
+ # @option options [String] :copy_source_if_match
363
+ # Copies the object if its entity tag (ETag) matches the specified tag.
364
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_modified_since
365
+ # Copies the object if it has been modified since the specified time.
366
+ # @option options [String] :copy_source_if_none_match
367
+ # Copies the object if its entity tag (ETag) is different than the
368
+ # specified ETag.
369
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_unmodified_since
370
+ # Copies the object if it hasn't been modified since the specified
371
+ # time.
372
+ # @option options [Time,DateTime,Date,Integer,String] :expires
373
+ # The date and time at which the object is no longer cacheable.
374
+ # @option options [String] :grant_full_control
375
+ # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
376
+ # object.
377
+ # @option options [String] :grant_read
378
+ # Allows grantee to read the object data and its metadata.
379
+ # @option options [String] :grant_read_acp
380
+ # Allows grantee to read the object ACL.
381
+ # @option options [String] :grant_write_acp
382
+ # Allows grantee to write the ACL for the applicable object.
383
+ # @option options [Hash<String,String>] :metadata
384
+ # A map of metadata to store with the object in S3.
385
+ # @option options [String] :metadata_directive
386
+ # Specifies whether the metadata is copied from the source object or
387
+ # replaced with metadata provided in the request.
388
+ # @option options [String] :server_side_encryption
389
+ # The Server-side encryption algorithm used when storing this object in
390
+ # S3 (e.g., AES256, aws:kms).
391
+ # @option options [String] :storage_class
392
+ # The type of storage to use for the object. Defaults to 'STANDARD'.
393
+ # @option options [String] :website_redirect_location
394
+ # If the bucket is configured as a website, redirects requests for this
395
+ # object to another object in the same bucket or to an external URL.
396
+ # Amazon S3 stores the value of this header in the object metadata.
397
+ # @option options [String] :sse_customer_algorithm
398
+ # Specifies the algorithm to use to when encrypting the object (e.g.,
399
+ # AES256).
400
+ # @option options [String] :sse_customer_key
401
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
402
+ # encrypting data. This value is used to store the object and then it is
403
+ # discarded; Amazon does not store the encryption key. The key must be
404
+ # appropriate for use with the algorithm specified in the
405
+ # x-amz-server-side​-encryption​-customer-algorithm header.
406
+ # @option options [String] :sse_customer_key_md5
407
+ # Specifies the 128-bit MD5 digest of the encryption key according to
408
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
409
+ # ensure the encryption key was transmitted without error.
410
+ # @option options [String] :ssekms_key_id
411
+ # Specifies the AWS KMS key ID to use for object encryption. All GET and
412
+ # PUT requests for an object protected by AWS KMS will fail if not made
413
+ # via SSL or using SigV4. Documentation on configuring any of the
414
+ # officially supported AWS SDKs and CLI can be found at
415
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
416
+ # @option options [String] :copy_source_sse_customer_algorithm
417
+ # Specifies the algorithm to use when decrypting the source object
418
+ # (e.g., AES256).
419
+ # @option options [String] :copy_source_sse_customer_key
420
+ # Specifies the customer-provided encryption key for Amazon S3 to use to
421
+ # decrypt the source object. The encryption key provided in this header
422
+ # must be one that was used when the source object was created.
423
+ # @option options [String] :copy_source_sse_customer_key_md5
424
+ # Specifies the 128-bit MD5 digest of the encryption key according to
425
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
426
+ # ensure the encryption key was transmitted without error.
427
+ # @option options [String] :request_payer
428
+ # Confirms that the requester knows that she or he will be charged for
429
+ # the request. Bucket owners need not specify this parameter in their
430
+ # requests. Documentation on downloading objects from requester pays
431
+ # buckets can be found at
432
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
433
+ # @return [Types::CopyObjectOutput]
434
+ def copy_from(options = {})
435
+ options = options.merge(
436
+ bucket: @bucket_name,
437
+ key: @key
438
+ )
439
+ resp = @client.copy_object(options)
440
+ resp.data
441
+ end
442
+
443
+ # @example Request syntax with placeholder values
444
+ #
445
+ # object.delete({
446
+ # mfa: "MFA",
447
+ # version_id: "ObjectVersionId",
448
+ # request_payer: "requester", # accepts requester
449
+ # })
450
+ # @param [Hash] options ({})
451
+ # @option options [String] :mfa
452
+ # The concatenation of the authentication device's serial number, a
453
+ # space, and the value that is displayed on your authentication device.
454
+ # @option options [String] :version_id
455
+ # VersionId used to reference a specific version of the object.
456
+ # @option options [String] :request_payer
457
+ # Confirms that the requester knows that she or he will be charged for
458
+ # the request. Bucket owners need not specify this parameter in their
459
+ # requests. Documentation on downloading objects from requester pays
460
+ # buckets can be found at
461
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
462
+ # @return [Types::DeleteObjectOutput]
463
+ def delete(options = {})
464
+ options = options.merge(
465
+ bucket: @bucket_name,
466
+ key: @key
467
+ )
468
+ resp = @client.delete_object(options)
469
+ resp.data
470
+ end
471
+
472
+ # @example Request syntax with placeholder values
473
+ #
474
+ # object.get({
475
+ # if_match: "IfMatch",
476
+ # if_modified_since: Time.now,
477
+ # if_none_match: "IfNoneMatch",
478
+ # if_unmodified_since: Time.now,
479
+ # range: "Range",
480
+ # response_cache_control: "ResponseCacheControl",
481
+ # response_content_disposition: "ResponseContentDisposition",
482
+ # response_content_encoding: "ResponseContentEncoding",
483
+ # response_content_language: "ResponseContentLanguage",
484
+ # response_content_type: "ResponseContentType",
485
+ # response_expires: Time.now,
486
+ # version_id: "ObjectVersionId",
487
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
488
+ # sse_customer_key: "SSECustomerKey",
489
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
490
+ # request_payer: "requester", # accepts requester
491
+ # part_number: 1,
492
+ # })
493
+ # @param [Hash] options ({})
494
+ # @option options [String] :if_match
495
+ # Return the object only if its entity tag (ETag) is the same as the one
496
+ # specified, otherwise return a 412 (precondition failed).
497
+ # @option options [Time,DateTime,Date,Integer,String] :if_modified_since
498
+ # Return the object only if it has been modified since the specified
499
+ # time, otherwise return a 304 (not modified).
500
+ # @option options [String] :if_none_match
501
+ # Return the object only if its entity tag (ETag) is different from the
502
+ # one specified, otherwise return a 304 (not modified).
503
+ # @option options [Time,DateTime,Date,Integer,String] :if_unmodified_since
504
+ # Return the object only if it has not been modified since the specified
505
+ # time, otherwise return a 412 (precondition failed).
506
+ # @option options [String] :range
507
+ # Downloads the specified range bytes of an object. For more information
508
+ # about the HTTP Range header, go to
509
+ # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
510
+ # @option options [String] :response_cache_control
511
+ # Sets the Cache-Control header of the response.
512
+ # @option options [String] :response_content_disposition
513
+ # Sets the Content-Disposition header of the response
514
+ # @option options [String] :response_content_encoding
515
+ # Sets the Content-Encoding header of the response.
516
+ # @option options [String] :response_content_language
517
+ # Sets the Content-Language header of the response.
518
+ # @option options [String] :response_content_type
519
+ # Sets the Content-Type header of the response.
520
+ # @option options [Time,DateTime,Date,Integer,String] :response_expires
521
+ # Sets the Expires header of the response.
522
+ # @option options [String] :version_id
523
+ # VersionId used to reference a specific version of the object.
524
+ # @option options [String] :sse_customer_algorithm
525
+ # Specifies the algorithm to use to when encrypting the object (e.g.,
526
+ # AES256).
527
+ # @option options [String] :sse_customer_key
528
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
529
+ # encrypting data. This value is used to store the object and then it is
530
+ # discarded; Amazon does not store the encryption key. The key must be
531
+ # appropriate for use with the algorithm specified in the
532
+ # x-amz-server-side​-encryption​-customer-algorithm header.
533
+ # @option options [String] :sse_customer_key_md5
534
+ # Specifies the 128-bit MD5 digest of the encryption key according to
535
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
536
+ # ensure the encryption key was transmitted without error.
537
+ # @option options [String] :request_payer
538
+ # Confirms that the requester knows that she or he will be charged for
539
+ # the request. Bucket owners need not specify this parameter in their
540
+ # requests. Documentation on downloading objects from requester pays
541
+ # buckets can be found at
542
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
543
+ # @option options [Integer] :part_number
544
+ # Part number of the object being read. This is a positive integer
545
+ # between 1 and 10,000. Effectively performs a 'ranged' GET request
546
+ # for the part specified. Useful for downloading just a part of an
547
+ # object.
548
+ # @return [Types::GetObjectOutput]
549
+ def get(options = {})
550
+ options = options.merge(
551
+ bucket: @bucket_name,
552
+ key: @key
553
+ )
554
+ resp = @client.get_object(options)
555
+ resp.data
556
+ end
557
+
558
+ # @example Request syntax with placeholder values
559
+ #
560
+ # multipartupload = object.initiate_multipart_upload({
561
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
562
+ # cache_control: "CacheControl",
563
+ # content_disposition: "ContentDisposition",
564
+ # content_encoding: "ContentEncoding",
565
+ # content_language: "ContentLanguage",
566
+ # content_type: "ContentType",
567
+ # expires: Time.now,
568
+ # grant_full_control: "GrantFullControl",
569
+ # grant_read: "GrantRead",
570
+ # grant_read_acp: "GrantReadACP",
571
+ # grant_write_acp: "GrantWriteACP",
572
+ # metadata: {
573
+ # "MetadataKey" => "MetadataValue",
574
+ # },
575
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
576
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA
577
+ # website_redirect_location: "WebsiteRedirectLocation",
578
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
579
+ # sse_customer_key: "SSECustomerKey",
580
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
581
+ # ssekms_key_id: "SSEKMSKeyId",
582
+ # request_payer: "requester", # accepts requester
583
+ # })
584
+ # @param [Hash] options ({})
585
+ # @option options [String] :acl
586
+ # The canned ACL to apply to the object.
587
+ # @option options [String] :cache_control
588
+ # Specifies caching behavior along the request/reply chain.
589
+ # @option options [String] :content_disposition
590
+ # Specifies presentational information for the object.
591
+ # @option options [String] :content_encoding
592
+ # Specifies what content encodings have been applied to the object and
593
+ # thus what decoding mechanisms must be applied to obtain the media-type
594
+ # referenced by the Content-Type header field.
595
+ # @option options [String] :content_language
596
+ # The language the content is in.
597
+ # @option options [String] :content_type
598
+ # A standard MIME type describing the format of the object data.
599
+ # @option options [Time,DateTime,Date,Integer,String] :expires
600
+ # The date and time at which the object is no longer cacheable.
601
+ # @option options [String] :grant_full_control
602
+ # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
603
+ # object.
604
+ # @option options [String] :grant_read
605
+ # Allows grantee to read the object data and its metadata.
606
+ # @option options [String] :grant_read_acp
607
+ # Allows grantee to read the object ACL.
608
+ # @option options [String] :grant_write_acp
609
+ # Allows grantee to write the ACL for the applicable object.
610
+ # @option options [Hash<String,String>] :metadata
611
+ # A map of metadata to store with the object in S3.
612
+ # @option options [String] :server_side_encryption
613
+ # The Server-side encryption algorithm used when storing this object in
614
+ # S3 (e.g., AES256, aws:kms).
615
+ # @option options [String] :storage_class
616
+ # The type of storage to use for the object. Defaults to 'STANDARD'.
617
+ # @option options [String] :website_redirect_location
618
+ # If the bucket is configured as a website, redirects requests for this
619
+ # object to another object in the same bucket or to an external URL.
620
+ # Amazon S3 stores the value of this header in the object metadata.
621
+ # @option options [String] :sse_customer_algorithm
622
+ # Specifies the algorithm to use to when encrypting the object (e.g.,
623
+ # AES256).
624
+ # @option options [String] :sse_customer_key
625
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
626
+ # encrypting data. This value is used to store the object and then it is
627
+ # discarded; Amazon does not store the encryption key. The key must be
628
+ # appropriate for use with the algorithm specified in the
629
+ # x-amz-server-side​-encryption​-customer-algorithm header.
630
+ # @option options [String] :sse_customer_key_md5
631
+ # Specifies the 128-bit MD5 digest of the encryption key according to
632
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
633
+ # ensure the encryption key was transmitted without error.
634
+ # @option options [String] :ssekms_key_id
635
+ # Specifies the AWS KMS key ID to use for object encryption. All GET and
636
+ # PUT requests for an object protected by AWS KMS will fail if not made
637
+ # via SSL or using SigV4. Documentation on configuring any of the
638
+ # officially supported AWS SDKs and CLI can be found at
639
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
640
+ # @option options [String] :request_payer
641
+ # Confirms that the requester knows that she or he will be charged for
642
+ # the request. Bucket owners need not specify this parameter in their
643
+ # requests. Documentation on downloading objects from requester pays
644
+ # buckets can be found at
645
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
646
+ # @return [MultipartUpload]
647
+ def initiate_multipart_upload(options = {})
648
+ options = options.merge(
649
+ bucket: @bucket_name,
650
+ key: @key
651
+ )
652
+ resp = @client.create_multipart_upload(options)
653
+ MultipartUpload.new(
654
+ bucket_name: @bucket_name,
655
+ object_key: @key,
656
+ id: resp.data.upload_id,
657
+ client: @client
658
+ )
659
+ end
660
+
661
+ # @example Request syntax with placeholder values
662
+ #
663
+ # object.put({
664
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
665
+ # body: source_file,
666
+ # cache_control: "CacheControl",
667
+ # content_disposition: "ContentDisposition",
668
+ # content_encoding: "ContentEncoding",
669
+ # content_language: "ContentLanguage",
670
+ # content_length: 1,
671
+ # content_md5: "ContentMD5",
672
+ # content_type: "ContentType",
673
+ # expires: Time.now,
674
+ # grant_full_control: "GrantFullControl",
675
+ # grant_read: "GrantRead",
676
+ # grant_read_acp: "GrantReadACP",
677
+ # grant_write_acp: "GrantWriteACP",
678
+ # metadata: {
679
+ # "MetadataKey" => "MetadataValue",
680
+ # },
681
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
682
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA
683
+ # website_redirect_location: "WebsiteRedirectLocation",
684
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
685
+ # sse_customer_key: "SSECustomerKey",
686
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
687
+ # ssekms_key_id: "SSEKMSKeyId",
688
+ # request_payer: "requester", # accepts requester
689
+ # })
690
+ # @param [Hash] options ({})
691
+ # @option options [String] :acl
692
+ # The canned ACL to apply to the object.
693
+ # @option options [String, IO] :body
694
+ # Object data.
695
+ # @option options [String] :cache_control
696
+ # Specifies caching behavior along the request/reply chain.
697
+ # @option options [String] :content_disposition
698
+ # Specifies presentational information for the object.
699
+ # @option options [String] :content_encoding
700
+ # Specifies what content encodings have been applied to the object and
701
+ # thus what decoding mechanisms must be applied to obtain the media-type
702
+ # referenced by the Content-Type header field.
703
+ # @option options [String] :content_language
704
+ # The language the content is in.
705
+ # @option options [Integer] :content_length
706
+ # Size of the body in bytes. This parameter is useful when the size of
707
+ # the body cannot be determined automatically.
708
+ # @option options [String] :content_md5
709
+ # The base64-encoded 128-bit MD5 digest of the part data.
710
+ # @option options [String] :content_type
711
+ # A standard MIME type describing the format of the object data.
712
+ # @option options [Time,DateTime,Date,Integer,String] :expires
713
+ # The date and time at which the object is no longer cacheable.
714
+ # @option options [String] :grant_full_control
715
+ # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
716
+ # object.
717
+ # @option options [String] :grant_read
718
+ # Allows grantee to read the object data and its metadata.
719
+ # @option options [String] :grant_read_acp
720
+ # Allows grantee to read the object ACL.
721
+ # @option options [String] :grant_write_acp
722
+ # Allows grantee to write the ACL for the applicable object.
723
+ # @option options [Hash<String,String>] :metadata
724
+ # A map of metadata to store with the object in S3.
725
+ # @option options [String] :server_side_encryption
726
+ # The Server-side encryption algorithm used when storing this object in
727
+ # S3 (e.g., AES256, aws:kms).
728
+ # @option options [String] :storage_class
729
+ # The type of storage to use for the object. Defaults to 'STANDARD'.
730
+ # @option options [String] :website_redirect_location
731
+ # If the bucket is configured as a website, redirects requests for this
732
+ # object to another object in the same bucket or to an external URL.
733
+ # Amazon S3 stores the value of this header in the object metadata.
734
+ # @option options [String] :sse_customer_algorithm
735
+ # Specifies the algorithm to use to when encrypting the object (e.g.,
736
+ # AES256).
737
+ # @option options [String] :sse_customer_key
738
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
739
+ # encrypting data. This value is used to store the object and then it is
740
+ # discarded; Amazon does not store the encryption key. The key must be
741
+ # appropriate for use with the algorithm specified in the
742
+ # x-amz-server-side​-encryption​-customer-algorithm header.
743
+ # @option options [String] :sse_customer_key_md5
744
+ # Specifies the 128-bit MD5 digest of the encryption key according to
745
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
746
+ # ensure the encryption key was transmitted without error.
747
+ # @option options [String] :ssekms_key_id
748
+ # Specifies the AWS KMS key ID to use for object encryption. All GET and
749
+ # PUT requests for an object protected by AWS KMS will fail if not made
750
+ # via SSL or using SigV4. Documentation on configuring any of the
751
+ # officially supported AWS SDKs and CLI can be found at
752
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
753
+ # @option options [String] :request_payer
754
+ # Confirms that the requester knows that she or he will be charged for
755
+ # the request. Bucket owners need not specify this parameter in their
756
+ # requests. Documentation on downloading objects from requester pays
757
+ # buckets can be found at
758
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
759
+ # @return [Types::PutObjectOutput]
760
+ def put(options = {})
761
+ options = options.merge(
762
+ bucket: @bucket_name,
763
+ key: @key
764
+ )
765
+ resp = @client.put_object(options)
766
+ resp.data
767
+ end
768
+
769
+ # @example Request syntax with placeholder values
770
+ #
771
+ # object.restore_object({
772
+ # version_id: "ObjectVersionId",
773
+ # restore_request: {
774
+ # days: 1, # required
775
+ # glacier_job_parameters: {
776
+ # tier: "Standard", # required, accepts Standard, Bulk, Expedited
777
+ # },
778
+ # },
779
+ # request_payer: "requester", # accepts requester
780
+ # })
781
+ # @param [Hash] options ({})
782
+ # @option options [String] :version_id
783
+ # @option options [Types::RestoreRequest] :restore_request
784
+ # @option options [String] :request_payer
785
+ # Confirms that the requester knows that she or he will be charged for
786
+ # the request. Bucket owners need not specify this parameter in their
787
+ # requests. Documentation on downloading objects from requester pays
788
+ # buckets can be found at
789
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
790
+ # @return [Types::RestoreObjectOutput]
791
+ def restore_object(options = {})
792
+ options = options.merge(
793
+ bucket: @bucket_name,
794
+ key: @key
795
+ )
796
+ resp = @client.restore_object(options)
797
+ resp.data
798
+ end
799
+
800
+ # @!group Associations
801
+
802
+ # @return [ObjectAcl]
803
+ def acl
804
+ ObjectAcl.new(
805
+ bucket_name: @bucket_name,
806
+ object_key: @key,
807
+ client: @client
808
+ )
809
+ end
810
+
811
+ # @return [Bucket]
812
+ def bucket
813
+ Bucket.new(
814
+ name: @bucket_name,
815
+ client: @client
816
+ )
817
+ end
818
+
819
+ # @param [String] id
820
+ # @return [MultipartUpload]
821
+ def multipart_upload(id)
822
+ MultipartUpload.new(
823
+ bucket_name: @bucket_name,
824
+ object_key: @key,
825
+ id: id,
826
+ client: @client
827
+ )
828
+ end
829
+
830
+ # @param [String] id
831
+ # @return [ObjectVersion]
832
+ def version(id)
833
+ ObjectVersion.new(
834
+ bucket_name: @bucket_name,
835
+ object_key: @key,
836
+ id: id,
837
+ client: @client
838
+ )
839
+ end
840
+
841
+ # @deprecated
842
+ # @api private
843
+ def identifiers
844
+ {
845
+ bucket_name: @bucket_name,
846
+ key: @key
847
+ }
848
+ end
849
+ deprecated(:identifiers)
850
+
851
+ private
852
+
853
+ def extract_bucket_name(args, options)
854
+ value = args[0] || options.delete(:bucket_name)
855
+ case value
856
+ when String then value
857
+ when nil then raise ArgumentError, "missing required option :bucket_name"
858
+ else
859
+ msg = "expected :bucket_name to be a String, got #{value.class}"
860
+ raise ArgumentError, msg
861
+ end
862
+ end
863
+
864
+ def extract_key(args, options)
865
+ value = args[1] || options.delete(:key)
866
+ case value
867
+ when String then value
868
+ when nil then raise ArgumentError, "missing required option :key"
869
+ else
870
+ msg = "expected :key to be a String, got #{value.class}"
871
+ raise ArgumentError, msg
872
+ end
873
+ end
874
+
875
+ def yield_waiter_and_warn(waiter, &block)
876
+ if !@waiter_block_warned
877
+ msg = "pass options to configure the waiter; "
878
+ msg << "yielding the waiter is deprecated"
879
+ warn(msg)
880
+ @waiter_block_warned = true
881
+ end
882
+ yield(waiter.waiter)
883
+ end
884
+
885
+ def separate_params_and_options(options)
886
+ opts = Set.new([:client, :max_attempts, :delay, :before_attempt, :before_wait])
887
+ waiter_opts = {}
888
+ waiter_params = {}
889
+ options.each_pair do |key, value|
890
+ if opts.include?(key)
891
+ waiter_opts[key] = value
892
+ else
893
+ waiter_params[key] = value
894
+ end
895
+ end
896
+ waiter_opts[:client] ||= @client
897
+ [waiter_opts, waiter_params]
898
+ end
899
+
900
+ class Collection < Aws::Resources::Collection
901
+
902
+ # @!group Batch Actions
903
+
904
+ # @example Request syntax with placeholder values
905
+ #
906
+ # object.batch_delete!({
907
+ # mfa: "MFA",
908
+ # request_payer: "requester", # accepts requester
909
+ # })
910
+ # @param options ({})
911
+ # @option options [String] :mfa
912
+ # The concatenation of the authentication device's serial number, a
913
+ # space, and the value that is displayed on your authentication device.
914
+ # @option options [String] :request_payer
915
+ # Confirms that the requester knows that she or he will be charged for
916
+ # the request. Bucket owners need not specify this parameter in their
917
+ # requests. Documentation on downloading objects from requester pays
918
+ # buckets can be found at
919
+ # http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
920
+ # @return [void]
921
+ def batch_delete!(options = {})
922
+ batch_enum.each do |batch|
923
+ params = Aws::Util.copy_hash(options)
924
+ params[:bucket] = batch[0].bucket_name
925
+ params[:delete] ||= {}
926
+ params[:delete][:objects] ||= []
927
+ batch.each do |item|
928
+ params[:delete][:objects] << {
929
+ key: item.key
930
+ }
931
+ end
932
+ batch[0].client.delete_objects(params)
933
+ end
934
+ nil
935
+ end
936
+
937
+ # @!endgroup
938
+
939
+ end
940
+ end
941
+ end
942
+ end