google-cloud-storage 1.27.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1c5fde2ed35606723e05c787ff96fd6ec31d7e06015e09bcac8dc0bc4b9ae05
4
- data.tar.gz: bf1391389ff711934df5302f65cdf6136bad14b0a00865728da8fe3b549b3cbe
3
+ metadata.gz: d3b78945de5adc36366ded346357d71f954327a48b11d9d909ad5b8443f51c95
4
+ data.tar.gz: adcc876f70b87130ca732a591a9f1d6aa278e03a0356ea012620f30650c3b25e
5
5
  SHA512:
6
- metadata.gz: 1e7d9a97562357737322928a56f093ed42bc8f8015a06723c5e403c402367a89f56604eeefb2bbbf289a7dce5b84ee055f76f3d6ef6df6d987f7f05ed5eed5fe
7
- data.tar.gz: 67046c8397a7e7fabf7b0a4d4e6501417ba815b55267e641a0ab51cdb233641e699348629a021763724aaca623e25a901395d77453b78fbc90ae67d4efca17b1
6
+ metadata.gz: e46be5fe50420e4a674add04d12a06243dba3438aafedc9356246ac8e5fa66aa0db547d9264a70b940cd46133aed1b7256cdad02397c93b0eeb73d312fffdd48
7
+ data.tar.gz: 0a89f487726406d8865b1c675d43f1153e3cf78d0e5b8df1ebc4eb1f09a051f9dd45c328503d500dda6aee4bcd60c3693104d0371755154263eb52ccceaf3b1b
@@ -1,5 +1,60 @@
1
1
  # Release History
2
2
 
3
+ ### 1.30.0 / 2021-01-13
4
+
5
+ #### Features
6
+
7
+ * Replace google-api-client with specific client gems
8
+ * Remove google-api-client
9
+ * Add google-apis-iamcredentials_v1
10
+ * Add google-apis-storage_v1
11
+
12
+ #### Documentation
13
+
14
+ * Update Bucket#generate_signed_post_policy_v4 documentation
15
+
16
+ ### 1.29.2 / 2020-12-14
17
+
18
+ #### Bug Fixes
19
+
20
+ * Fix support for #generate_signed_post_policy_v4 conditions
21
+
22
+ ### 1.29.1 / 2020-10-05
23
+
24
+ #### Bug Fixes
25
+
26
+ * Fix encoding of space characters in file names in signed_url v4
27
+
28
+ #### Documentation
29
+
30
+ * Update Bucket#default_kms_key= docs
31
+ * Demonstrate deleting the Cloud KMS encryption key
32
+ * Update customer-supplied encryption key docs and examples ([#7851](https://www.github.com/googleapis/google-cloud-ruby/issues/7851))
33
+
34
+ ### 1.29.0 / 2020-09-22
35
+
36
+ #### Features
37
+
38
+ * quota_project can be set via library configuration ([#7656](https://www.github.com/googleapis/google-cloud-ruby/issues/7656))
39
+
40
+ #### Bug Fixes
41
+
42
+ * Fix encoding of space characters in #signed_url version: :v4
43
+ * Fix encoding of space characters to use percent encoding (%20) instead of plus sign (+).
44
+
45
+ #### Documentation
46
+
47
+ * Add custom time to file metadata sample
48
+
49
+ ### 1.28.0 / 2020-08-26
50
+
51
+ * Add Object Lifecycle Management fields
52
+ * Add custom_time_before to Lifecycle::Rule
53
+ * Add days_since_custom_time to Lifecycle::Rule
54
+ * Add days_since_noncurrent_time to Lifecycle::Rule
55
+ * Add noncurrent_time_before to Lifecycle::Rule
56
+ * Add File#custom_time and #custom_time=
57
+
3
58
  ### 1.27.0 / 2020-07-29
4
59
 
5
60
  #### Features
@@ -45,7 +45,7 @@ there is a small amount of setup:
45
45
 
46
46
  ```sh
47
47
  $ cd google-cloud-storage/
48
- $ bundle exec rake bundleupdate
48
+ $ bundle install
49
49
  ```
50
50
 
51
51
  ## Console
@@ -136,6 +136,7 @@ Google::Cloud.configure.add_config! :storage do |config|
136
136
  allow_nil: true
137
137
  config.add_alias! :keyfile, :credentials
138
138
  config.add_field! :scope, nil, match: [String, Array]
139
+ config.add_field! :quota_project, nil, match: String
139
140
  config.add_field! :retries, nil, match: Integer
140
141
  config.add_field! :timeout, nil, match: Integer
141
142
  # TODO: Remove once discovery document is updated.
@@ -93,7 +93,8 @@ module Google
93
93
  Storage::Project.new(
94
94
  Storage::Service.new(
95
95
  project_id, credentials,
96
- retries: retries, timeout: timeout, host: endpoint
96
+ retries: retries, timeout: timeout, host: endpoint,
97
+ quota_project: configure.quota_project
97
98
  )
98
99
  )
99
100
  end
@@ -557,7 +557,8 @@ module Google
557
557
  # Set the Cloud KMS encryption key that will be used to protect files.
558
558
  # For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
559
559
  #
560
- # @param [String] new_default_kms_key New Cloud KMS key name.
560
+ # @param [String, nil] new_default_kms_key New Cloud KMS key name, or
561
+ # `nil` to delete the Cloud KMS encryption key.
561
562
  #
562
563
  # @example
563
564
  # require "google/cloud/storage"
@@ -571,6 +572,15 @@ module Google
571
572
  #
572
573
  # bucket.default_kms_key = kms_key_name
573
574
  #
575
+ # @example Delete the default Cloud KMS encryption key:
576
+ # require "google/cloud/storage"
577
+ #
578
+ # storage = Google::Cloud::Storage.new
579
+ #
580
+ # bucket = storage.bucket "my-bucket"
581
+ #
582
+ # bucket.default_kms_key = nil
583
+ #
574
584
  def default_kms_key= new_default_kms_key
575
585
  @gapi.encryption = API::Bucket::Encryption.new \
576
586
  default_kms_key_name: new_default_kms_key
@@ -1128,6 +1138,11 @@ module Google
1128
1138
  # @param [String] content_type The
1129
1139
  # [Content-Type](https://tools.ietf.org/html/rfc2616#section-14.17)
1130
1140
  # response header to be returned when the file is downloaded.
1141
+ # @param [DateTime] custom_time A custom time specified by the user for
1142
+ # the file. Once set, custom_time can't be unset, and it can only be
1143
+ # changed to a time in the future. If custom_time must be unset, you
1144
+ # must either perform a rewrite operation, or upload the data again
1145
+ # and create a new file.
1131
1146
  # @param [String] crc32c The CRC32c checksum of the file data, as
1132
1147
  # described in [RFC 4960, Appendix
1133
1148
  # B](http://tools.ietf.org/html/rfc4960#appendix-B).
@@ -1249,7 +1264,7 @@ module Google
1249
1264
  #
1250
1265
  def create_file file, path = nil, acl: nil, cache_control: nil,
1251
1266
  content_disposition: nil, content_encoding: nil,
1252
- content_language: nil, content_type: nil,
1267
+ content_language: nil, content_type: nil, custom_time: nil,
1253
1268
  crc32c: nil, md5: nil, metadata: nil,
1254
1269
  storage_class: nil, encryption_key: nil, kms_key: nil,
1255
1270
  temporary_hold: nil, event_based_hold: nil
@@ -1264,6 +1279,7 @@ module Google
1264
1279
  md5: md5,
1265
1280
  cache_control: cache_control,
1266
1281
  content_type: content_type,
1282
+ custom_time: custom_time,
1267
1283
  content_disposition: content_disposition,
1268
1284
  crc32c: crc32c,
1269
1285
  content_encoding: content_encoding,
@@ -1631,8 +1647,8 @@ module Google
1631
1647
  end
1632
1648
 
1633
1649
  ##
1634
- # Generate a PostObject that includes the fields and url to
1635
- # upload objects via html forms.
1650
+ # Generate a PostObject that includes the fields and URL to
1651
+ # upload objects via HTML forms.
1636
1652
  #
1637
1653
  # Generating a PostObject requires service account credentials,
1638
1654
  # either by connecting with a service account when calling
@@ -1678,7 +1694,7 @@ module Google
1678
1694
  # Proc should return a signature created using a RPC call to the
1679
1695
  # [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
1680
1696
  # method as shown in the example below.
1681
- # @return [PostObject] An object containing the URL, fields, and values needed to upload files via html forms.
1697
+ # @return [PostObject] An object containing the URL, fields, and values needed to upload files via HTML forms.
1682
1698
  #
1683
1699
  # @raise [SignedUrlUnavailable] If the service account credentials
1684
1700
  # are missing. Service account credentials are acquired by following the
@@ -1801,10 +1817,14 @@ module Google
1801
1817
  end
1802
1818
 
1803
1819
  ##
1804
- # Generate a PostObject that includes the fields and url to
1805
- # upload objects via html forms.
1820
+ # Generate a `PostObject` that includes the fields and URL to
1821
+ # upload objects via HTML forms. The resulting `PostObject` is
1822
+ # based on a policy document created from the method arguments.
1823
+ # This policy provides authorization to ensure that the HTML
1824
+ # form can upload files into the bucket. See [Signatures -
1825
+ # Policy document](https://cloud.google.com/storage/docs/authentication/signatures#policy-document).
1806
1826
  #
1807
- # Generating a PostObject requires service account credentials,
1827
+ # Generating a `PostObject` requires service account credentials,
1808
1828
  # either by connecting with a service account when calling
1809
1829
  # {Google::Cloud.storage}, or by passing in the service account
1810
1830
  # `issuer` and `signing_key` values. Although the private key can
@@ -1817,6 +1837,8 @@ module Google
1817
1837
  # steps in [Service Account Authentication](
1818
1838
  # https://cloud.google.com/iam/docs/service-accounts).
1819
1839
  #
1840
+ # @see https://cloud.google.com/storage/docs/authentication/signatures#policy-document Signatures -
1841
+ # Policy document
1820
1842
  # @see https://cloud.google.com/storage/docs/xml-api/post-object
1821
1843
  #
1822
1844
  # @param [String] path Path to the file in Google Cloud Storage.
@@ -1840,9 +1862,14 @@ module Google
1840
1862
  # method as shown in the example below.
1841
1863
  # @param [Integer] expires The number of seconds until the URL expires.
1842
1864
  # The default is 604800 (7 days).
1843
- # @param [Hash] fields User-supplied form fields such as `acl`,
1865
+ # @param [Hash{String => String}] fields User-supplied form fields such as `acl`,
1844
1866
  # `cache-control`, `success_action_status`, and `success_action_redirect`.
1845
- # @param [Array<Hash|Array>] conditions User-supplied policy conditions.
1867
+ # Optional. See [Upload an object with HTML forms - Form
1868
+ # fields](https://cloud.google.com/storage/docs/xml-api/post-object-forms#form_fields).
1869
+ # @param [Array<Hash{String => String}|Array<String>>] conditions An array of
1870
+ # policy conditions that every upload must satisfy. For example:
1871
+ # `[["eq", "$Content-Type", "image/jpeg"]]`. Optional. See [Signatures - Policy
1872
+ # document](https://cloud.google.com/storage/docs/authentication/signatures#policy-document).
1846
1873
  # @param [String] scheme The URL scheme. The default value is `HTTPS`.
1847
1874
  # @param [Boolean] virtual_hosted_style Whether to use a virtual hosted-style
1848
1875
  # hostname, which adds the bucket into the host portion of the URI rather
@@ -1855,12 +1882,12 @@ module Google
1855
1882
  # Cloud Load Balancer which routes to a bucket you own, e.g.
1856
1883
  # `my-load-balancer-domain.tld`.
1857
1884
  #
1858
- # @return [PostObject] An object containing the URL, fields, and values needed to upload files via html forms.
1885
+ # @return [PostObject] An object containing the URL, fields, and values needed to
1886
+ # upload files via HTML forms.
1859
1887
  #
1860
- # @raise [SignedUrlUnavailable] If the service account credentials
1861
- # are missing. Service account credentials are acquired by following the
1862
- # steps in [Service Account Authentication](
1863
- # https://cloud.google.com/iam/docs/service-accounts).
1888
+ # @raise [SignedUrlUnavailable] If the service account credentials are missing.
1889
+ # Service account credentials are acquired by following the steps in [Service
1890
+ # Account Authentication](https://cloud.google.com/iam/docs/service-accounts).
1864
1891
  #
1865
1892
  # @example
1866
1893
  # require "google/cloud/storage"
@@ -1870,8 +1897,9 @@ module Google
1870
1897
  # bucket = storage.bucket "my-todo-app"
1871
1898
  #
1872
1899
  # conditions = [["starts-with", "$acl","public"]]
1873
- # post = bucket.generate_signed_post_policy_v4 "avatars/heidi/400x400.png", expires: 10,
1874
- # conditions: conditions
1900
+ # post = bucket.generate_signed_post_policy_v4 "avatars/heidi/400x400.png",
1901
+ # expires: 10,
1902
+ # conditions: conditions
1875
1903
  #
1876
1904
  # post.url #=> "https://storage.googleapis.com/my-todo-app/"
1877
1905
  # post.fields["key"] #=> "my-todo-app/avatars/heidi/400x400.png"
@@ -1912,10 +1940,11 @@ module Google
1912
1940
  #
1913
1941
  # bucket = storage.bucket "my-todo-app"
1914
1942
  # conditions = [["starts-with", "$acl","public"]]
1915
- # post = bucket.generate_signed_post_policy_v4(
1916
- # "avatars/heidi/400x400.png", expires: 10,
1917
- # conditions: conditions, issuer: issuer, signer: signer
1918
- # )
1943
+ # post = bucket.generate_signed_post_policy_v4 "avatars/heidi/400x400.png",
1944
+ # expires: 10,
1945
+ # conditions: conditions,
1946
+ # issuer: issuer,
1947
+ # signer: signer
1919
1948
  #
1920
1949
  # post.url #=> "https://storage.googleapis.com/my-todo-app/"
1921
1950
  # post.fields["key"] #=> "my-todo-app/avatars/heidi/400x400.png"
@@ -105,6 +105,21 @@ module Google
105
105
  # only the date part (for instance, "2013-01-15"). This condition is
106
106
  # satisfied when a file is created before midnight of the specified
107
107
  # date in UTC.
108
+ # @param [String,Date] custom_time_before A date in RFC 3339 format with
109
+ # only the date part (for instance, "2013-01-15"). This condition is
110
+ # satisfied when the custom time on an object is before this date in UTC.
111
+ # @param [Integer] days_since_custom_time Represents the number of
112
+ # days elapsed since the user-specified timestamp set on an object.
113
+ # The condition is satisfied if the days elapsed is at least this
114
+ # number. If no custom timestamp is specified on an object, the
115
+ # condition does not apply.
116
+ # @param [Integer] days_since_noncurrent_time Represents the number of
117
+ # days elapsed since the noncurrent timestamp of an object. The
118
+ # condition is satisfied if the days elapsed is at least this number.
119
+ # The value of the field must be a nonnegative integer. If it's zero,
120
+ # the object version will become eligible for Lifecycle action as
121
+ # soon as it becomes noncurrent. Relevant only for versioning-enabled
122
+ # buckets. (See {Bucket#versioning?})
108
123
  # @param [Boolean] is_live Relevant only for versioned files. If the
109
124
  # value is `true`, this condition matches live files; if the value
110
125
  # is `false`, it matches archived files.
@@ -115,6 +130,10 @@ module Google
115
130
  # `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
116
131
  # classes. Arguments will be converted from symbols and lower-case
117
132
  # to upper-case strings.
133
+ # @param [String,Date] noncurrent_time_before A date in RFC 3339 format
134
+ # with only the date part (for instance, "2013-01-15"). This condition
135
+ # is satisfied when the noncurrent time on an object is before this
136
+ # date in UTC. This condition is relevant only for versioned objects.
118
137
  # @param [Integer] num_newer_versions Relevant only for versioned
119
138
  # files. If the value is N, this condition is satisfied when there
120
139
  # are at least N versions (including the live version) newer than
@@ -129,16 +148,29 @@ module Google
129
148
  # b.lifecycle.add_set_storage_class_rule "COLDLINE", age: 10
130
149
  # end
131
150
  #
132
- def add_set_storage_class_rule storage_class, age: nil,
133
- created_before: nil, is_live: nil,
151
+ def add_set_storage_class_rule storage_class,
152
+ age: nil,
153
+ created_before: nil,
154
+ custom_time_before: nil,
155
+ days_since_custom_time: nil,
156
+ days_since_noncurrent_time: nil,
157
+ is_live: nil,
134
158
  matches_storage_class: nil,
159
+ noncurrent_time_before: nil,
135
160
  num_newer_versions: nil
136
- push Rule.new \
161
+ push Rule.new(
137
162
  "SetStorageClass",
138
163
  storage_class: storage_class_for(storage_class),
139
- age: age, created_before: created_before, is_live: is_live,
164
+ age: age,
165
+ created_before: created_before,
166
+ custom_time_before: custom_time_before,
167
+ days_since_custom_time: days_since_custom_time,
168
+ days_since_noncurrent_time: days_since_noncurrent_time,
169
+ is_live: is_live,
140
170
  matches_storage_class: storage_class_for(matches_storage_class),
171
+ noncurrent_time_before: noncurrent_time_before,
141
172
  num_newer_versions: num_newer_versions
173
+ )
142
174
  end
143
175
 
144
176
  ##
@@ -156,6 +188,21 @@ module Google
156
188
  # only the date part (for instance, "2013-01-15"). This condition is
157
189
  # satisfied when a file is created before midnight of the specified
158
190
  # date in UTC.
191
+ # @param [String,Date] custom_time_before A date in RFC 3339 format with
192
+ # only the date part (for instance, "2013-01-15"). This condition is
193
+ # satisfied when the custom time on an object is before this date in UTC.
194
+ # @param [Integer] days_since_custom_time Represents the number of
195
+ # days elapsed since the user-specified timestamp set on an object.
196
+ # The condition is satisfied if the days elapsed is at least this
197
+ # number. If no custom timestamp is specified on an object, the
198
+ # condition does not apply.
199
+ # @param [Integer] days_since_noncurrent_time Represents the number of
200
+ # days elapsed since the noncurrent timestamp of an object. The
201
+ # condition is satisfied if the days elapsed is at least this number.
202
+ # The value of the field must be a nonnegative integer. If it's zero,
203
+ # the object version will become eligible for Lifecycle action as
204
+ # soon as it becomes noncurrent. Relevant only for versioning-enabled
205
+ # buckets. (See {Bucket#versioning?})
159
206
  # @param [Boolean] is_live Relevant only for versioned files. If the
160
207
  # value is `true`, this condition matches live files; if the value
161
208
  # is `false`, it matches archived files.
@@ -166,6 +213,10 @@ module Google
166
213
  # `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
167
214
  # classes. Arguments will be converted from symbols and lower-case
168
215
  # to upper-case strings.
216
+ # @param [String,Date] noncurrent_time_before A date in RFC 3339 format
217
+ # with only the date part (for instance, "2013-01-15"). This condition
218
+ # is satisfied when the noncurrent time on an object is before this
219
+ # date in UTC. This condition is relevant only for versioned objects.
169
220
  # @param [Integer] num_newer_versions Relevant only for versioned
170
221
  # files. If the value is N, this condition is satisfied when there
171
222
  # are at least N versions (including the live version) newer than
@@ -180,14 +231,27 @@ module Google
180
231
  # b.lifecycle.add_delete_rule age: 30, is_live: false
181
232
  # end
182
233
  #
183
- def add_delete_rule age: nil, created_before: nil, is_live: nil,
234
+ def add_delete_rule age: nil,
235
+ created_before: nil,
236
+ custom_time_before: nil,
237
+ days_since_custom_time: nil,
238
+ days_since_noncurrent_time: nil,
239
+ is_live: nil,
184
240
  matches_storage_class: nil,
241
+ noncurrent_time_before: nil,
185
242
  num_newer_versions: nil
186
- push Rule.new \
243
+ push Rule.new(
187
244
  "Delete",
188
- age: age, created_before: created_before, is_live: is_live,
245
+ age: age,
246
+ created_before: created_before,
247
+ custom_time_before: custom_time_before,
248
+ days_since_custom_time: days_since_custom_time,
249
+ days_since_noncurrent_time: days_since_noncurrent_time,
250
+ is_live: is_live,
189
251
  matches_storage_class: storage_class_for(matches_storage_class),
252
+ noncurrent_time_before: noncurrent_time_before,
190
253
  num_newer_versions: num_newer_versions
254
+ )
191
255
  end
192
256
 
193
257
  # @private
@@ -231,10 +295,26 @@ module Google
231
295
  # action. Required only if the action is `SetStorageClass`.
232
296
  # @attr [Integer] age The age of a file (in days). This condition is
233
297
  # satisfied when a file reaches the specified age.
234
- # @attr [String,Date] created_before A date in RFC 3339 format with
298
+ # @attr [String,Date,nil] created_before A date in RFC 3339 format with
235
299
  # only the date part (for instance, "2013-01-15"). This condition is
236
300
  # satisfied when a file is created before midnight of the specified
237
- # date in UTC.
301
+ # date in UTC. When returned by the service, a non-empty value will
302
+ # always be a Date object.
303
+ # @attr [String,Date,nil] custom_time_before A date in RFC 3339 format with
304
+ # only the date part (for instance, "2013-01-15"). This condition is
305
+ # satisfied when the custom time on an object is before this date in UTC.
306
+ # @attr [Integer,nil] days_since_custom_time Represents the number of
307
+ # days elapsed since the user-specified timestamp set on an object.
308
+ # The condition is satisfied if the days elapsed is at least this
309
+ # number. If no custom timestamp is specified on an object, the
310
+ # condition does not apply.
311
+ # @attr [Integer] days_since_noncurrent_time Represents the number of
312
+ # days elapsed since the noncurrent timestamp of an object. The
313
+ # condition is satisfied if the days elapsed is at least this number.
314
+ # The value of the field must be a nonnegative integer. If it's zero,
315
+ # the object version will become eligible for Lifecycle action as
316
+ # soon as it becomes noncurrent. Relevant only for versioning-enabled
317
+ # buckets. (See {Bucket#versioning?})
238
318
  # @attr [Boolean] is_live Relevant only for versioned files. If the
239
319
  # value is `true`, this condition matches live files; if the value
240
320
  # is `false`, it matches archived files.
@@ -243,6 +323,12 @@ module Google
243
323
  # Values include `STANDARD`, `NEARLINE`, `COLDLINE`, and `ARCHIVE`.
244
324
  # `REGIONAL`, `MULTI_REGIONAL`, and `DURABLE_REDUCED_AVAILABILITY`
245
325
  # are supported as legacy storage classes.
326
+ # @attr [String,Date,nil] noncurrent_time_before A date in RFC 3339 format
327
+ # with only the date part (for instance, "2013-01-15"). This condition
328
+ # is satisfied when the noncurrent time on an object is before this
329
+ # date in UTC. This condition is relevant only for versioned objects.
330
+ # When returned by the service, a non-empty value will always be a
331
+ # Date object.
246
332
  # @attr [Integer] num_newer_versions Relevant only for versioned
247
333
  # files. If the value is N, this condition is satisfied when there
248
334
  # are at least N versions (including the live version) newer than
@@ -285,28 +371,57 @@ module Google
285
371
  # end
286
372
  #
287
373
  class Rule
288
- attr_accessor :action, :storage_class, :age, :created_before,
289
- :is_live, :matches_storage_class, :num_newer_versions
374
+ attr_accessor :action,
375
+ :storage_class,
376
+ :age,
377
+ :created_before,
378
+ :custom_time_before,
379
+ :days_since_custom_time,
380
+ :days_since_noncurrent_time,
381
+ :is_live,
382
+ :matches_storage_class,
383
+ :noncurrent_time_before,
384
+ :num_newer_versions
290
385
 
291
386
  # @private
292
- def initialize action, storage_class: nil, age: nil,
293
- created_before: nil, is_live: nil,
294
- matches_storage_class: nil, num_newer_versions: nil
387
+ def initialize action,
388
+ storage_class: nil,
389
+ age: nil,
390
+ created_before: nil,
391
+ custom_time_before: nil,
392
+ days_since_custom_time: nil,
393
+ days_since_noncurrent_time: nil,
394
+ is_live: nil,
395
+ matches_storage_class: nil,
396
+ noncurrent_time_before: nil,
397
+ num_newer_versions: nil
295
398
  @action = action
296
399
  @storage_class = storage_class
297
400
  @age = age
298
401
  @created_before = created_before
402
+ @custom_time_before = custom_time_before
403
+ @days_since_custom_time = days_since_custom_time
404
+ @days_since_noncurrent_time = days_since_noncurrent_time
299
405
  @is_live = is_live
300
406
  @matches_storage_class = Array(matches_storage_class)
407
+ @noncurrent_time_before = noncurrent_time_before
301
408
  @num_newer_versions = num_newer_versions
302
409
  end
303
410
 
304
411
  # @private
305
412
  # @return [Google::Apis::StorageV1::Bucket::Lifecycle]
306
413
  def to_gapi
307
- condition = condition_gapi(age, created_before, is_live,
308
- matches_storage_class,
309
- num_newer_versions)
414
+ condition = condition_gapi(
415
+ age,
416
+ created_before,
417
+ custom_time_before,
418
+ days_since_custom_time,
419
+ days_since_noncurrent_time,
420
+ is_live,
421
+ matches_storage_class,
422
+ noncurrent_time_before,
423
+ num_newer_versions
424
+ )
310
425
  Google::Apis::StorageV1::Bucket::Lifecycle::Rule.new(
311
426
  action: action_gapi(action, storage_class),
312
427
  condition: condition
@@ -316,18 +431,30 @@ module Google
316
431
  # @private
317
432
  def action_gapi action, storage_class
318
433
  Google::Apis::StorageV1::Bucket::Lifecycle::Rule::Action.new(
319
- type: action, storage_class: storage_class
434
+ type: action,
435
+ storage_class: storage_class
320
436
  )
321
437
  end
322
438
 
323
439
  # @private
324
- def condition_gapi age, created_before, is_live,
325
- matches_storage_class, num_newer_versions
440
+ def condition_gapi age,
441
+ created_before,
442
+ custom_time_before,
443
+ days_since_custom_time,
444
+ days_since_noncurrent_time,
445
+ is_live,
446
+ matches_storage_class,
447
+ noncurrent_time_before,
448
+ num_newer_versions
326
449
  Google::Apis::StorageV1::Bucket::Lifecycle::Rule::Condition.new(
327
450
  age: age,
328
451
  created_before: created_before,
452
+ custom_time_before: custom_time_before,
453
+ days_since_custom_time: days_since_custom_time,
454
+ days_since_noncurrent_time: days_since_noncurrent_time,
329
455
  is_live: is_live,
330
456
  matches_storage_class: Array(matches_storage_class),
457
+ noncurrent_time_before: noncurrent_time_before,
331
458
  num_newer_versions: num_newer_versions
332
459
  )
333
460
  end
@@ -337,12 +464,19 @@ module Google
337
464
  def self.from_gapi gapi
338
465
  action = gapi.action
339
466
  c = gapi.condition
340
- new action.type, storage_class: action.storage_class,
341
- age: c.age,
342
- created_before: c.created_before,
343
- is_live: c.is_live,
344
- matches_storage_class: c.matches_storage_class,
345
- num_newer_versions: c.num_newer_versions
467
+ new(
468
+ action.type,
469
+ storage_class: action.storage_class,
470
+ age: c.age,
471
+ created_before: c.created_before,
472
+ custom_time_before: c.custom_time_before,
473
+ days_since_custom_time: c.days_since_custom_time,
474
+ days_since_noncurrent_time: c.days_since_noncurrent_time,
475
+ is_live: c.is_live,
476
+ matches_storage_class: c.matches_storage_class,
477
+ noncurrent_time_before: c.noncurrent_time_before,
478
+ num_newer_versions: c.num_newer_versions
479
+ )
346
480
  end
347
481
 
348
482
  # @private
@@ -355,6 +355,29 @@ module Google
355
355
  update_gapi! :content_type
356
356
  end
357
357
 
358
+ ##
359
+ # A custom time specified by the user for the file, or `nil`.
360
+ #
361
+ # @return [DateTime, nil]
362
+ #
363
+ def custom_time
364
+ @gapi.custom_time
365
+ end
366
+
367
+ ##
368
+ # Updates the custom time specified by the user for the file. Once set,
369
+ # custom_time can't be unset, and it can only be changed to a time in the
370
+ # future. If custom_time must be unset, you must either perform a rewrite
371
+ # operation, or upload the data again and create a new file.
372
+ #
373
+ # @param [DateTime] custom_time A custom time specified by the user
374
+ # for the file.
375
+ #
376
+ def custom_time= custom_time
377
+ @gapi.custom_time = custom_time
378
+ update_gapi! :custom_time
379
+ end
380
+
358
381
  ##
359
382
  # A hash of custom, user-provided web-safe keys and arbitrary string
360
383
  # values that will returned with requests for the file as "x-goog-meta-"
@@ -389,7 +412,8 @@ module Google
389
412
  # You can use this SHA256 hash to uniquely identify the AES-256
390
413
  # encryption key required to decrypt this file.
391
414
  #
392
- # @return [String]
415
+ # @return [String, nil] The encoded SHA256 hash, or `nil` if there is
416
+ # no customer-supplied encryption key for this file.
393
417
  #
394
418
  def encryption_key_sha256
395
419
  return nil unless @gapi.customer_encryption
@@ -746,8 +770,9 @@ module Google
746
770
  # Updates the file with changes made in the given block in a single
747
771
  # PATCH request. The following attributes may be set: {#cache_control=},
748
772
  # {#content_disposition=}, {#content_encoding=}, {#content_language=},
749
- # {#content_type=}, and {#metadata=}. The {#metadata} hash accessible in
750
- # the block is completely mutable and will be included in the request.
773
+ # {#content_type=}, {#custom_time=} and {#metadata=}. The {#metadata} hash
774
+ # accessible in the block is completely mutable and will be included in the
775
+ # request.
751
776
  #
752
777
  # @yield [file] a block yielding a delegate object for updating the file
753
778
  #
@@ -766,6 +791,7 @@ module Google
766
791
  # f.content_encoding = "deflate"
767
792
  # f.content_language = "de"
768
793
  # f.content_type = "application/json"
794
+ # f.custom_time = DateTime.new 2025, 12, 31
769
795
  # f.metadata["player"] = "Bob"
770
796
  # f.metadata["score"] = "10"
771
797
  # end
@@ -1204,7 +1230,7 @@ module Google
1204
1230
  # cipher.encrypt
1205
1231
  # new_key = cipher.random_key
1206
1232
  #
1207
- # file = bucket.file "path/to/my-file.ext"
1233
+ # file = bucket.file "path/to/my-file.ext", encryption_key: old_key
1208
1234
  # file.rewrite "new-destination-bucket",
1209
1235
  # "path/to/destination/file.ext",
1210
1236
  # encryption_key: old_key,
@@ -1225,7 +1251,7 @@ module Google
1225
1251
  # # Old customer-supplied key was stored securely for later use.
1226
1252
  # old_key = "y\x03\"\x0E\xB6\xD3\x9B\x0E\xAB*\x19\xFAv\xDEY\xBEI..."
1227
1253
  #
1228
- # file = bucket.file "path/to/my-file.ext"
1254
+ # file = bucket.file "path/to/my-file.ext", encryption_key: old_key
1229
1255
  # file.rewrite "new-destination-bucket",
1230
1256
  # "path/to/destination/file.ext",
1231
1257
  # encryption_key: old_key,
@@ -177,7 +177,7 @@ module Google
177
177
  # Add the bucket to the head of the base_fields. This is not returned in the PostObject fields.
178
178
  conditions.unshift "bucket" => @bucket_name
179
179
  # Add user-provided conditions to the head of the conditions array.
180
- conditions.unshift user_conditions if user_conditions && !user_conditions.empty?
180
+ conditions = user_conditions + conditions if user_conditions
181
181
  if user_fields
182
182
  # Convert each pair in fields hash to a single-entry hash and add it to the head of the conditions array.
183
183
  user_fields.to_a.reverse.each { |f| conditions.unshift Hash[*f] }
@@ -273,7 +273,7 @@ module Google
273
273
  # Only the characters in the regex set [A-Za-z0-9.~_-] must be left un-escaped; all others must be
274
274
  # percent-encoded using %XX UTF-8 style.
275
275
  def escape_query_param str
276
- CGI.escape(str.to_s).gsub("%7E", "~")
276
+ CGI.escape(str.to_s).gsub("%7E", "~").gsub "+", "%20"
277
277
  end
278
278
 
279
279
  def host_name virtual_hosted_style, bucket_bound_hostname
@@ -287,7 +287,7 @@ module Google
287
287
  path = []
288
288
  path << "/#{@bucket_name}" if path_style
289
289
  path << "/#{String(@file_name)}" if @file_name && !@file_name.empty?
290
- CGI.escape(path.join).gsub "%2F", "/"
290
+ CGI.escape(path.join).gsub("%2F", "/").gsub "+", "%20"
291
291
  end
292
292
 
293
293
  ##
@@ -39,7 +39,7 @@ module Google
39
39
  ##
40
40
  # Creates a new Service instance.
41
41
  def initialize project, credentials,
42
- retries: nil, timeout: nil, host: nil
42
+ retries: nil, timeout: nil, host: nil, quota_project: nil
43
43
  @project = project
44
44
  @credentials = credentials
45
45
  @service = API::StorageService.new
@@ -55,6 +55,7 @@ module Google
55
55
  @service.request_options.header["x-goog-api-client"] = \
56
56
  "gl-ruby/#{RUBY_VERSION} gccl/#{Google::Cloud::Storage::VERSION}"
57
57
  @service.request_options.header["Accept-Encoding"] = "gzip"
58
+ @service.request_options.quota_project = quota_project if quota_project
58
59
  @service.authorization = @credentials.client if @credentials
59
60
  @service.root_url = host if host
60
61
  end
@@ -292,12 +293,12 @@ module Google
292
293
  def insert_file bucket_name, source, path = nil, acl: nil,
293
294
  cache_control: nil, content_disposition: nil,
294
295
  content_encoding: nil, content_language: nil,
295
- content_type: nil, crc32c: nil, md5: nil, metadata: nil,
296
+ content_type: nil, custom_time: nil, crc32c: nil, md5: nil, metadata: nil,
296
297
  storage_class: nil, key: nil, kms_key: nil,
297
298
  temporary_hold: nil, event_based_hold: nil,
298
299
  user_project: nil
299
300
  params =
300
- { cache_control: cache_control, content_type: content_type,
301
+ { cache_control: cache_control, content_type: content_type, custom_time: custom_time,
301
302
  content_disposition: content_disposition, md5_hash: md5,
302
303
  content_encoding: content_encoding, crc32c: crc32c,
303
304
  content_language: content_language, metadata: metadata,
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Storage
19
- VERSION = "1.27.0".freeze
19
+ VERSION = "1.30.0".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.27.0
4
+ version: 1.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-07-29 00:00:00.000000000 Z
12
+ date: 2021-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -26,19 +26,33 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.2'
28
28
  - !ruby/object:Gem::Dependency
29
- name: google-api-client
29
+ name: google-apis-iamcredentials_v1
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '0.33'
34
+ version: '0.1'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '0.33'
41
+ version: '0.1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: google-apis-storage_v1
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0.1'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.1'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: googleauth
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -298,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
298
312
  - !ruby/object:Gem::Version
299
313
  version: '0'
300
314
  requirements: []
301
- rubygems_version: 3.1.3
315
+ rubygems_version: 3.1.4
302
316
  signing_key:
303
317
  specification_version: 4
304
318
  summary: API Client library for Google Cloud Storage