google-cloud-storage 1.44.0 → 1.54.0
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.
- checksums.yaml +4 -4
- data/AUTHENTICATION.md +8 -26
- data/CHANGELOG.md +70 -0
- data/lib/google/cloud/storage/bucket/cors.rb +2 -2
- data/lib/google/cloud/storage/bucket.rb +261 -12
- data/lib/google/cloud/storage/file/list.rb +10 -3
- data/lib/google/cloud/storage/file/signer_v2.rb +5 -4
- data/lib/google/cloud/storage/file/signer_v4.rb +5 -5
- data/lib/google/cloud/storage/file.rb +141 -10
- data/lib/google/cloud/storage/project.rb +63 -3
- data/lib/google/cloud/storage/service.rb +74 -7
- data/lib/google/cloud/storage/version.rb +1 -1
- data/lib/google/cloud/storage.rb +23 -8
- data/lib/google-cloud-storage.rb +24 -16
- metadata +28 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 67fa1effce117003750f759eba79de92380616365652f2a19ba49b1986c75634
|
|
4
|
+
data.tar.gz: 9729e6dc51f15a9a5e2e0370771f980908f9d6284973503c9c4d4c1e561b8d84
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ec9022c921c0714ebf7f47131c745c113bb0480a34a376ca10055ccdee024821a518d1a87f742486118d7fb3e570beaeef5746f12676d5790e6ae697439dabd9
|
|
7
|
+
data.tar.gz: d5e57fd75d565a8328cf79ce42374883e4da7f875c7fd9571e928f9648c05578bee5743d68465819f3e5d488469d277749aecebd44810198fd1a1ca0cac6f3c3
|
data/AUTHENTICATION.md
CHANGED
|
@@ -112,15 +112,6 @@ those that produce
|
|
|
112
112
|
post objects. For these methods, authentication using a service account JSON key file
|
|
113
113
|
is required.
|
|
114
114
|
|
|
115
|
-
[gce-how-to]: https://cloud.google.com/compute/docs/authentication#using
|
|
116
|
-
[dev-console]: https://console.cloud.google.com/project
|
|
117
|
-
|
|
118
|
-
[enable-apis]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/enable-apis.png
|
|
119
|
-
|
|
120
|
-
[create-new-service-account]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/create-new-service-account.png
|
|
121
|
-
[create-new-service-account-existing-keys]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/create-new-service-account-existing-keys.png
|
|
122
|
-
[reuse-service-account]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/reuse-service-account.png
|
|
123
|
-
|
|
124
115
|
## Creating a Service Account
|
|
125
116
|
|
|
126
117
|
Google Cloud requires a **Project ID** and **Service Account Credentials** to
|
|
@@ -130,31 +121,22 @@ connect to most services with google-cloud-storage.
|
|
|
130
121
|
If you are not running this client on Google Compute Engine, you need a Google
|
|
131
122
|
Developers service account.
|
|
132
123
|
|
|
133
|
-
1. Visit the [Google
|
|
124
|
+
1. Visit the [Google Cloud Console](https://console.cloud.google.com/project).
|
|
134
125
|
1. Create a new project or click on an existing project.
|
|
135
|
-
1. Activate the
|
|
126
|
+
1. Activate the menu in the upper left and select **APIs & Services**. From
|
|
136
127
|
here, you will enable the APIs that your application requires.
|
|
137
128
|
|
|
138
|
-
![Enable the APIs that your application requires][enable-apis]
|
|
139
|
-
|
|
140
129
|
*Note: You may need to enable billing in order to use these services.*
|
|
141
130
|
|
|
142
131
|
1. Select **Credentials** from the side navigation.
|
|
143
132
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
![Create a new service account][create-new-service-account]
|
|
147
|
-
|
|
148
|
-
![Create a new service account With Existing Keys][create-new-service-account-existing-keys]
|
|
149
|
-
|
|
150
|
-
Find the "Add credentials" drop down and select "Service account" to be
|
|
151
|
-
guided through downloading a new JSON key file.
|
|
152
|
-
|
|
153
|
-
If you want to re-use an existing service account, you can easily generate a
|
|
154
|
-
new key file. Just select the account you wish to re-use, and click "Generate
|
|
155
|
-
new JSON key":
|
|
133
|
+
Find the "Create credentials" drop down near the top of the page, and select
|
|
134
|
+
"Service account" to be guided through downloading a new JSON key file.
|
|
156
135
|
|
|
157
|
-
|
|
136
|
+
If you want to re-use an existing service account, you can easily generate
|
|
137
|
+
a new key file. Just select the account you wish to re-use click the pencil
|
|
138
|
+
tool on the right side to edit the service account, select the **Keys** tab,
|
|
139
|
+
and then select **Add Key**.
|
|
158
140
|
|
|
159
141
|
The key file you download will be used by this library to authenticate API
|
|
160
142
|
requests and should be stored in a secure location.
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,75 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
### 1.54.0 (2024-12-11)
|
|
4
|
+
|
|
5
|
+
#### Features
|
|
6
|
+
|
|
7
|
+
* Updated required Ruby version to 3.0 or later ([#27599](https://github.com/googleapis/google-cloud-ruby/issues/27599))
|
|
8
|
+
|
|
9
|
+
### 1.53.0 (2024-12-04)
|
|
10
|
+
|
|
11
|
+
#### Features
|
|
12
|
+
|
|
13
|
+
* add integration test for universe domain ([#27384](https://github.com/googleapis/google-cloud-ruby/issues/27384))
|
|
14
|
+
* fetch file and bucket details from url ([#27322](https://github.com/googleapis/google-cloud-ruby/issues/27322))
|
|
15
|
+
|
|
16
|
+
### 1.52.0 (2024-05-31)
|
|
17
|
+
|
|
18
|
+
#### Features
|
|
19
|
+
|
|
20
|
+
* support for hierarchical namespace (folders) ([#25967](https://github.com/googleapis/google-cloud-ruby/issues/25967))
|
|
21
|
+
|
|
22
|
+
### 1.51.0 (2024-04-25)
|
|
23
|
+
|
|
24
|
+
#### Features
|
|
25
|
+
|
|
26
|
+
* Respect custom endpoint for signed_url ([#25469](https://github.com/googleapis/google-cloud-ruby/issues/25469))
|
|
27
|
+
|
|
28
|
+
### 1.50.0 (2024-04-19)
|
|
29
|
+
|
|
30
|
+
#### Features
|
|
31
|
+
|
|
32
|
+
* Add support for soft deletion ([#25340](https://github.com/googleapis/google-cloud-ruby/issues/25340))
|
|
33
|
+
#### Bug Fixes
|
|
34
|
+
|
|
35
|
+
* Set configured univer_domain and endpoint when initializing through Service ([#25665](https://github.com/googleapis/google-cloud-ruby/issues/25665))
|
|
36
|
+
|
|
37
|
+
### 1.49.0 (2024-02-21)
|
|
38
|
+
|
|
39
|
+
#### Features
|
|
40
|
+
|
|
41
|
+
* Support of Managed Folders ([#24809](https://github.com/googleapis/google-cloud-ruby/issues/24809))
|
|
42
|
+
|
|
43
|
+
### 1.48.1 (2024-01-26)
|
|
44
|
+
|
|
45
|
+
#### Bug Fixes
|
|
46
|
+
|
|
47
|
+
* Raise an error on mismatching universe domain ([#24486](https://github.com/googleapis/google-cloud-ruby/issues/24486))
|
|
48
|
+
|
|
49
|
+
### 1.48.0 (2024-01-25)
|
|
50
|
+
|
|
51
|
+
#### Features
|
|
52
|
+
|
|
53
|
+
* Support for universe_domain ([#24449](https://github.com/googleapis/google-cloud-ruby/issues/24449))
|
|
54
|
+
|
|
55
|
+
### 1.47.0 (2024-01-09)
|
|
56
|
+
|
|
57
|
+
#### Features
|
|
58
|
+
|
|
59
|
+
* support for object lock / retention ([#23732](https://github.com/googleapis/google-cloud-ruby/issues/23732))
|
|
60
|
+
|
|
61
|
+
### 1.46.0 (2024-01-08)
|
|
62
|
+
|
|
63
|
+
#### Features
|
|
64
|
+
|
|
65
|
+
* support match_glob for Object.list
|
|
66
|
+
|
|
67
|
+
### 1.45.0 (2023-11-06)
|
|
68
|
+
|
|
69
|
+
#### Features
|
|
70
|
+
|
|
71
|
+
* added autoclass v2.1 features ([#23483](https://github.com/googleapis/google-cloud-ruby/issues/23483))
|
|
72
|
+
|
|
3
73
|
### 1.44.0 (2022-11-02)
|
|
4
74
|
|
|
5
75
|
#### Features
|
|
@@ -182,7 +182,7 @@ module Google
|
|
|
182
182
|
@origin = Array(origin)
|
|
183
183
|
@methods = Array(methods)
|
|
184
184
|
@headers = Array(headers)
|
|
185
|
-
@max_age =
|
|
185
|
+
@max_age = max_age || 1800
|
|
186
186
|
end
|
|
187
187
|
|
|
188
188
|
# @private
|
|
@@ -195,7 +195,7 @@ module Google
|
|
|
195
195
|
|
|
196
196
|
# @private
|
|
197
197
|
def self.from_gapi gapi
|
|
198
|
-
new gapi.origin.dup, gapi.http_method.dup,
|
|
198
|
+
new gapi.origin.dup, gapi.http_method.dup,
|
|
199
199
|
headers: gapi.response_header.dup,
|
|
200
200
|
max_age: gapi.max_age_seconds
|
|
201
201
|
end
|
|
@@ -118,6 +118,15 @@ module Google
|
|
|
118
118
|
@gapi.autoclass
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
+
##
|
|
122
|
+
# The object retention configuration of the bucket
|
|
123
|
+
#
|
|
124
|
+
# @return [Google::Apis::StorageV1::Bucket::ObjectRetention]
|
|
125
|
+
#
|
|
126
|
+
def object_retention
|
|
127
|
+
@gapi.object_retention
|
|
128
|
+
end
|
|
129
|
+
|
|
121
130
|
##
|
|
122
131
|
# The name of the bucket.
|
|
123
132
|
#
|
|
@@ -434,6 +443,24 @@ module Google
|
|
|
434
443
|
@gapi.autoclass&.toggle_time
|
|
435
444
|
end
|
|
436
445
|
|
|
446
|
+
##
|
|
447
|
+
# Terminal Storage class of the autoclass
|
|
448
|
+
#
|
|
449
|
+
# @return [String]
|
|
450
|
+
#
|
|
451
|
+
def autoclass_terminal_storage_class
|
|
452
|
+
@gapi.autoclass&.terminal_storage_class
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
##
|
|
456
|
+
# Update time at which the autoclass terminal storage class was last modified
|
|
457
|
+
#
|
|
458
|
+
# @return [DateTime]
|
|
459
|
+
#
|
|
460
|
+
def autoclass_terminal_storage_class_update_time
|
|
461
|
+
@gapi.autoclass&.terminal_storage_class_update_time
|
|
462
|
+
end
|
|
463
|
+
|
|
437
464
|
##
|
|
438
465
|
# Updates bucket's autoclass configuration. This defines the default class for objects in the
|
|
439
466
|
# bucket and down/up-grades the storage class of objects based on the access patterns.
|
|
@@ -442,9 +469,6 @@ module Google
|
|
|
442
469
|
# For more information, see [Storage
|
|
443
470
|
# Classes](https://cloud.google.com/storage/docs/using-autoclass).
|
|
444
471
|
#
|
|
445
|
-
# Note: Only patch requests that disable autoclass are currently supported.
|
|
446
|
-
# To enable autoclass, you must set it at bucket creation time.
|
|
447
|
-
#
|
|
448
472
|
# @param [Boolean] toggle for autoclass configuration of the bucket.
|
|
449
473
|
#
|
|
450
474
|
def autoclass_enabled= toggle
|
|
@@ -453,6 +477,25 @@ module Google
|
|
|
453
477
|
patch_gapi! :autoclass
|
|
454
478
|
end
|
|
455
479
|
|
|
480
|
+
##
|
|
481
|
+
# Update method to update all attributes of autoclass of a bucket
|
|
482
|
+
# It accepts params as a Hash of attributes in the following format:
|
|
483
|
+
#
|
|
484
|
+
# { enabled: true, terminal_storage_class: "ARCHIVE" }
|
|
485
|
+
#
|
|
486
|
+
# terminal_storage_class field is optional. It defaults to `NEARLINE`.
|
|
487
|
+
# Valid terminal_storage_class values are `NEARLINE` and `ARCHIVE`.
|
|
488
|
+
#
|
|
489
|
+
# @param [Hash(String => String)] autoclass_attributes
|
|
490
|
+
#
|
|
491
|
+
def update_autoclass autoclass_attributes
|
|
492
|
+
@gapi.autoclass ||= API::Bucket::Autoclass.new
|
|
493
|
+
autoclass_attributes.each do |k, v|
|
|
494
|
+
@gapi.autoclass.send "#{k}=", v
|
|
495
|
+
end
|
|
496
|
+
patch_gapi! :autoclass
|
|
497
|
+
end
|
|
498
|
+
|
|
456
499
|
##
|
|
457
500
|
# Whether [Object
|
|
458
501
|
# Versioning](https://cloud.google.com/storage/docs/object-versioning)
|
|
@@ -1151,6 +1194,121 @@ module Google
|
|
|
1151
1194
|
patch_gapi! :rpo
|
|
1152
1195
|
end
|
|
1153
1196
|
|
|
1197
|
+
##
|
|
1198
|
+
# The bucket's soft delete policy. If this policy is set, any deleted
|
|
1199
|
+
# objects will be soft-deleted according to the time specified in the
|
|
1200
|
+
# policy.
|
|
1201
|
+
# This value can be modified by calling {#soft_delete_policy=}.
|
|
1202
|
+
#
|
|
1203
|
+
# @return [Google::Apis::StorageV1::Bucket::SoftDeletePolicy] The default retention policy is for 7
|
|
1204
|
+
# days.
|
|
1205
|
+
#
|
|
1206
|
+
# @example
|
|
1207
|
+
# require "google/cloud/storage"
|
|
1208
|
+
#
|
|
1209
|
+
# storage = Google::Cloud::Storage.new
|
|
1210
|
+
#
|
|
1211
|
+
# bucket = storage.bucket "my-bucket"
|
|
1212
|
+
#
|
|
1213
|
+
# bucket.soft_delete_policy
|
|
1214
|
+
#
|
|
1215
|
+
def soft_delete_policy
|
|
1216
|
+
@gapi.soft_delete_policy
|
|
1217
|
+
end
|
|
1218
|
+
|
|
1219
|
+
##
|
|
1220
|
+
# Sets the value for Soft Delete Policy in the bucket. This value can
|
|
1221
|
+
# be queried by calling {#soft_delete_policy}.
|
|
1222
|
+
#
|
|
1223
|
+
# @param [Google::Apis::StorageV1::Bucket::SoftDeletePolicy,
|
|
1224
|
+
# Hash(String => String)] new_soft_delete_policy The bucket's
|
|
1225
|
+
# new Soft Delete Policy.
|
|
1226
|
+
#
|
|
1227
|
+
# @example Set Soft Delete Policy to 10 days using SoftDeletePolicy class:
|
|
1228
|
+
# require "google/cloud/storage"
|
|
1229
|
+
# require "date"
|
|
1230
|
+
#
|
|
1231
|
+
# storage = Google::Cloud::Storage.new
|
|
1232
|
+
#
|
|
1233
|
+
# bucket = storage.bucket "my-bucket"
|
|
1234
|
+
#
|
|
1235
|
+
# soft_delete_policy = Google::Apis::StorageV1::Bucket::SoftDeletePolicy.new
|
|
1236
|
+
# soft_delete_policy.retention_duration_seconds = 10*24*60*60
|
|
1237
|
+
#
|
|
1238
|
+
# bucket.soft_delete_policy = soft_delete_policy
|
|
1239
|
+
#
|
|
1240
|
+
# @example Set Soft Delete Policy to 5 days using Hash:
|
|
1241
|
+
# require "google/cloud/storage"
|
|
1242
|
+
# require "date"
|
|
1243
|
+
#
|
|
1244
|
+
# storage = Google::Cloud::Storage.new
|
|
1245
|
+
#
|
|
1246
|
+
# bucket = storage.bucket "my-bucket"
|
|
1247
|
+
#
|
|
1248
|
+
# soft_delete_policy = { retention_duration_seconds: 432000 }
|
|
1249
|
+
# bucket.soft_delete_policy = soft_delete_policy
|
|
1250
|
+
#
|
|
1251
|
+
def soft_delete_policy= new_soft_delete_policy
|
|
1252
|
+
@gapi.soft_delete_policy = new_soft_delete_policy || {}
|
|
1253
|
+
patch_gapi! :soft_delete_policy
|
|
1254
|
+
end
|
|
1255
|
+
|
|
1256
|
+
##
|
|
1257
|
+
# The bucket's hierarchical namespace (Folders) configuration.
|
|
1258
|
+
# This value can be modified by calling {#hierarchical_namespace=}.
|
|
1259
|
+
#
|
|
1260
|
+
# @return [Google::Apis::StorageV1::Bucket::HierarchicalNamespace]
|
|
1261
|
+
#
|
|
1262
|
+
# @example
|
|
1263
|
+
# require "google/cloud/storage"
|
|
1264
|
+
#
|
|
1265
|
+
# storage = Google::Cloud::Storage.new
|
|
1266
|
+
#
|
|
1267
|
+
# bucket = storage.bucket "my-bucket"
|
|
1268
|
+
#
|
|
1269
|
+
# bucket.hierarchical_namespace
|
|
1270
|
+
#
|
|
1271
|
+
def hierarchical_namespace
|
|
1272
|
+
@gapi.hierarchical_namespace
|
|
1273
|
+
end
|
|
1274
|
+
|
|
1275
|
+
##
|
|
1276
|
+
# Sets the value of Hierarchical Namespace (Folders) for the bucket.
|
|
1277
|
+
# This can only be enabled at bucket create time. If this is enabled,
|
|
1278
|
+
# Uniform Bucket-Level Access must also be enabled.
|
|
1279
|
+
# This value can be queried by calling {#hierarchical_namespace}.
|
|
1280
|
+
#
|
|
1281
|
+
# @param [Google::Apis::StorageV1::Bucket::HierarchicalNamespace,
|
|
1282
|
+
# Hash(String => String)] new_hierarchical_namespace The
|
|
1283
|
+
# bucket's new Hierarchical Namespace Configuration.
|
|
1284
|
+
#
|
|
1285
|
+
# @example Enabled Hierarchical Namespace using HierarchicalNamespace class:
|
|
1286
|
+
# require "google/cloud/storage"
|
|
1287
|
+
#
|
|
1288
|
+
# storage = Google::Cloud::Storage.new
|
|
1289
|
+
#
|
|
1290
|
+
# bucket = storage.bucket "my-bucket"
|
|
1291
|
+
#
|
|
1292
|
+
# hierarchical_namespace = Google::Apis::StorageV1::Bucket::HierarchicalNamespace.new
|
|
1293
|
+
# hierarchical_namespace.enabled = true
|
|
1294
|
+
#
|
|
1295
|
+
# bucket.hierarchical_namespace = hierarchical_namespace
|
|
1296
|
+
#
|
|
1297
|
+
# @example Disable Hierarchical Namespace using Hash:
|
|
1298
|
+
# require "google/cloud/storage"
|
|
1299
|
+
#
|
|
1300
|
+
# storage = Google::Cloud::Storage.new
|
|
1301
|
+
#
|
|
1302
|
+
# bucket = storage.bucket "my-bucket"
|
|
1303
|
+
#
|
|
1304
|
+
# hierarchical_namespace = { enabled: false }
|
|
1305
|
+
# bucket.hierarchical_namespace = hierarchical_namespace
|
|
1306
|
+
#
|
|
1307
|
+
def hierarchical_namespace= new_hierarchical_namespace
|
|
1308
|
+
@gapi.hierarchical_namespace = new_hierarchical_namespace || {}
|
|
1309
|
+
patch_gapi! :hierarchical_namespace
|
|
1310
|
+
end
|
|
1311
|
+
|
|
1154
1312
|
##
|
|
1155
1313
|
# Updates the bucket with changes made in the given block in a single
|
|
1156
1314
|
# PATCH request. The following attributes may be set: {#cors},
|
|
@@ -1265,6 +1423,9 @@ module Google
|
|
|
1265
1423
|
# `prefixes` are omitted.
|
|
1266
1424
|
# @param [String] token A previously-returned page token representing
|
|
1267
1425
|
# part of the larger set of results to view.
|
|
1426
|
+
# @param [String] match_glob A glob pattern used to filter results returned in items (e.g. `foo*bar`).
|
|
1427
|
+
# The string value must be UTF-8 encoded. See:
|
|
1428
|
+
# https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-object-glob
|
|
1268
1429
|
# @param [Integer] max Maximum number of items plus prefixes to return.
|
|
1269
1430
|
# As duplicate prefixes are omitted, fewer total results may be
|
|
1270
1431
|
# returned than requested. The default value of this parameter is
|
|
@@ -1273,6 +1434,11 @@ module Google
|
|
|
1273
1434
|
# as distinct results. The default is `false`. For more information,
|
|
1274
1435
|
# see [Object Versioning
|
|
1275
1436
|
# ](https://cloud.google.com/storage/docs/object-versioning).
|
|
1437
|
+
# @param [Boolean] include_folders_as_prefixes If `true`, will also include
|
|
1438
|
+
# folders and managed folders, besides objects, in the returned prefixes.
|
|
1439
|
+
# Only applicable if delimiter is set to '/'.
|
|
1440
|
+
# @param [Boolean] soft_deleted If true, only soft-deleted object
|
|
1441
|
+
# versions will be listed. The default is false.
|
|
1276
1442
|
#
|
|
1277
1443
|
# @return [Array<Google::Cloud::Storage::File>] (See
|
|
1278
1444
|
# {Google::Cloud::Storage::File::List})
|
|
@@ -1300,14 +1466,22 @@ module Google
|
|
|
1300
1466
|
# end
|
|
1301
1467
|
#
|
|
1302
1468
|
def files prefix: nil, delimiter: nil, token: nil, max: nil,
|
|
1303
|
-
versions: nil
|
|
1469
|
+
versions: nil, match_glob: nil, include_folders_as_prefixes: nil,
|
|
1470
|
+
soft_deleted: nil
|
|
1304
1471
|
ensure_service!
|
|
1305
1472
|
gapi = service.list_files name, prefix: prefix, delimiter: delimiter,
|
|
1306
1473
|
token: token, max: max,
|
|
1307
1474
|
versions: versions,
|
|
1308
|
-
user_project: user_project
|
|
1475
|
+
user_project: user_project,
|
|
1476
|
+
match_glob: match_glob,
|
|
1477
|
+
include_folders_as_prefixes: include_folders_as_prefixes,
|
|
1478
|
+
soft_deleted: soft_deleted
|
|
1309
1479
|
File::List.from_gapi gapi, service, name, prefix, delimiter, max,
|
|
1310
|
-
versions,
|
|
1480
|
+
versions,
|
|
1481
|
+
user_project: user_project,
|
|
1482
|
+
match_glob: match_glob,
|
|
1483
|
+
include_folders_as_prefixes: include_folders_as_prefixes,
|
|
1484
|
+
soft_deleted: soft_deleted
|
|
1311
1485
|
end
|
|
1312
1486
|
alias find_files files
|
|
1313
1487
|
|
|
@@ -1343,6 +1517,8 @@ module Google
|
|
|
1343
1517
|
# @param [String] encryption_key Optional. The customer-supplied,
|
|
1344
1518
|
# AES-256 encryption key used to encrypt the file, if one was provided
|
|
1345
1519
|
# to {#create_file}. (Not used if `skip_lookup` is also set.)
|
|
1520
|
+
# @param [Boolean] soft_deleted Optional. If true, only soft-deleted
|
|
1521
|
+
# object versions will be listed. The default is false.
|
|
1346
1522
|
#
|
|
1347
1523
|
# @return [Google::Cloud::Storage::File, nil] Returns nil if file does
|
|
1348
1524
|
# not exist
|
|
@@ -1364,7 +1540,8 @@ module Google
|
|
|
1364
1540
|
if_metageneration_match: nil,
|
|
1365
1541
|
if_metageneration_not_match: nil,
|
|
1366
1542
|
skip_lookup: nil,
|
|
1367
|
-
encryption_key: nil
|
|
1543
|
+
encryption_key: nil,
|
|
1544
|
+
soft_deleted: nil
|
|
1368
1545
|
ensure_service!
|
|
1369
1546
|
if skip_lookup
|
|
1370
1547
|
return File.new_lazy name, path, service,
|
|
@@ -1377,7 +1554,8 @@ module Google
|
|
|
1377
1554
|
if_metageneration_match: if_metageneration_match,
|
|
1378
1555
|
if_metageneration_not_match: if_metageneration_not_match,
|
|
1379
1556
|
key: encryption_key,
|
|
1380
|
-
user_project: user_project
|
|
1557
|
+
user_project: user_project,
|
|
1558
|
+
soft_deleted: soft_deleted
|
|
1381
1559
|
File.from_gapi gapi, service, user_project: user_project
|
|
1382
1560
|
rescue Google::Cloud::NotFoundError
|
|
1383
1561
|
nil
|
|
@@ -1658,6 +1836,77 @@ module Google
|
|
|
1658
1836
|
alias upload_file create_file
|
|
1659
1837
|
alias new_file create_file
|
|
1660
1838
|
|
|
1839
|
+
##
|
|
1840
|
+
# Restores a soft-deleted object.
|
|
1841
|
+
#
|
|
1842
|
+
# @param [String] file_path
|
|
1843
|
+
# Name of the file.
|
|
1844
|
+
# @param [Fixnum] generation
|
|
1845
|
+
# Selects a specific revision of this object.
|
|
1846
|
+
# @param [Boolean] copy_source_acl
|
|
1847
|
+
# If true, copies the source file's ACL; otherwise, uses the
|
|
1848
|
+
# bucket's default file ACL. The default is false.
|
|
1849
|
+
# @param [Fixnum] if_generation_match
|
|
1850
|
+
# Makes the operation conditional on whether the file's one live
|
|
1851
|
+
# generation matches the given value. Setting to 0 makes the
|
|
1852
|
+
# operation succeed only if there are no live versions of the file.
|
|
1853
|
+
# @param [Fixnum] if_generation_not_match
|
|
1854
|
+
# Makes the operation conditional on whether none of the file's live
|
|
1855
|
+
# generations match the given value. If no live file exists, the
|
|
1856
|
+
# precondition fails. Setting to 0 makes the operation succeed only
|
|
1857
|
+
# if there is a live version of the file.
|
|
1858
|
+
# @param [Fixnum] if_metageneration_match
|
|
1859
|
+
# Makes the operation conditional on whether the file's one live
|
|
1860
|
+
# metageneration matches the given value.
|
|
1861
|
+
# @param [Fixnum] if_metageneration_not_match
|
|
1862
|
+
# Makes the operation conditional on whether none of the object's
|
|
1863
|
+
# live metagenerations match the given value.
|
|
1864
|
+
# @param [String] projection
|
|
1865
|
+
# Set of properties to return. Defaults to full.
|
|
1866
|
+
# @param [String] user_project
|
|
1867
|
+
# The project to be billed for this request. Required for Requester
|
|
1868
|
+
# Pays buckets.
|
|
1869
|
+
# @param [String] fields
|
|
1870
|
+
# Selector specifying which fields to include in a partial response.
|
|
1871
|
+
#
|
|
1872
|
+
# @return [Google::Cloud::Storage::File]
|
|
1873
|
+
#
|
|
1874
|
+
# @example
|
|
1875
|
+
# require "google/cloud/storage"
|
|
1876
|
+
#
|
|
1877
|
+
# storage = Google::Cloud::Storage.new
|
|
1878
|
+
#
|
|
1879
|
+
# bucket = storage.bucket "my-bucket"
|
|
1880
|
+
#
|
|
1881
|
+
# bucket.restore_file "path/of/file", <generation-of-the-file>
|
|
1882
|
+
#
|
|
1883
|
+
def restore_file file_path,
|
|
1884
|
+
generation,
|
|
1885
|
+
copy_source_acl: nil,
|
|
1886
|
+
if_generation_match: nil,
|
|
1887
|
+
if_generation_not_match: nil,
|
|
1888
|
+
if_metageneration_match: nil,
|
|
1889
|
+
if_metageneration_not_match: nil,
|
|
1890
|
+
projection: nil,
|
|
1891
|
+
user_project: nil,
|
|
1892
|
+
fields: nil,
|
|
1893
|
+
options: {}
|
|
1894
|
+
ensure_service!
|
|
1895
|
+
gapi = service.restore_file name,
|
|
1896
|
+
file_path,
|
|
1897
|
+
generation,
|
|
1898
|
+
copy_source_acl: File::Acl.predefined_rule_for(copy_source_acl),
|
|
1899
|
+
if_generation_match: if_generation_match,
|
|
1900
|
+
if_generation_not_match: if_generation_not_match,
|
|
1901
|
+
if_metageneration_match: if_metageneration_match,
|
|
1902
|
+
if_metageneration_not_match: if_metageneration_not_match,
|
|
1903
|
+
projection: projection,
|
|
1904
|
+
user_project: user_project,
|
|
1905
|
+
fields: fields,
|
|
1906
|
+
options: options
|
|
1907
|
+
File.from_gapi gapi, service, user_project: user_project
|
|
1908
|
+
end
|
|
1909
|
+
|
|
1661
1910
|
##
|
|
1662
1911
|
# Concatenates a list of existing files in the bucket into a new file in
|
|
1663
1912
|
# the bucket. There is a limit (currently 32) to the number of files
|
|
@@ -2938,9 +3187,9 @@ module Google
|
|
|
2938
3187
|
attributes.flatten!
|
|
2939
3188
|
return if attributes.empty?
|
|
2940
3189
|
ensure_service!
|
|
2941
|
-
patch_args =
|
|
3190
|
+
patch_args = attributes.to_h do |attr|
|
|
2942
3191
|
[attr, @gapi.send(attr)]
|
|
2943
|
-
end
|
|
3192
|
+
end
|
|
2944
3193
|
patch_gapi = API::Bucket.new(**patch_args)
|
|
2945
3194
|
@gapi = service.patch_bucket name,
|
|
2946
3195
|
patch_gapi,
|
|
@@ -2958,9 +3207,9 @@ module Google
|
|
|
2958
3207
|
attributes.flatten!
|
|
2959
3208
|
return if attributes.empty?
|
|
2960
3209
|
ensure_service!
|
|
2961
|
-
update_args =
|
|
3210
|
+
update_args = attributes.to_h do |attr|
|
|
2962
3211
|
[attr, @gapi.send(attr)]
|
|
2963
|
-
end
|
|
3212
|
+
end
|
|
2964
3213
|
update_gapi = API::Bucket.new(**update_args)
|
|
2965
3214
|
@gapi = service.update_bucket name,
|
|
2966
3215
|
update_gapi,
|
|
@@ -83,10 +83,12 @@ module Google
|
|
|
83
83
|
token: @token,
|
|
84
84
|
max: @max,
|
|
85
85
|
versions: @versions,
|
|
86
|
-
user_project: @user_project
|
|
86
|
+
user_project: @user_project,
|
|
87
|
+
match_glob: @match_glob
|
|
87
88
|
File::List.from_gapi gapi, @service, @bucket, @prefix,
|
|
88
89
|
@delimiter, @max, @versions,
|
|
89
|
-
user_project: @user_project
|
|
90
|
+
user_project: @user_project,
|
|
91
|
+
match_glob: @match_glob
|
|
90
92
|
end
|
|
91
93
|
|
|
92
94
|
##
|
|
@@ -163,7 +165,9 @@ module Google
|
|
|
163
165
|
# Google::Apis::StorageV1::Objects object.
|
|
164
166
|
def self.from_gapi gapi_list, service, bucket = nil, prefix = nil,
|
|
165
167
|
delimiter = nil, max = nil, versions = nil,
|
|
166
|
-
user_project: nil
|
|
168
|
+
user_project: nil, match_glob: nil,
|
|
169
|
+
include_folders_as_prefixes: nil,
|
|
170
|
+
soft_deleted: nil
|
|
167
171
|
files = new(Array(gapi_list.items).map do |gapi_object|
|
|
168
172
|
File.from_gapi gapi_object, service, user_project: user_project
|
|
169
173
|
end)
|
|
@@ -176,6 +180,9 @@ module Google
|
|
|
176
180
|
files.instance_variable_set :@max, max
|
|
177
181
|
files.instance_variable_set :@versions, versions
|
|
178
182
|
files.instance_variable_set :@user_project, user_project
|
|
183
|
+
files.instance_variable_set :@match_glob, match_glob
|
|
184
|
+
files.instance_variable_set :@include_folders_as_prefixes, include_folders_as_prefixes
|
|
185
|
+
files.instance_variable_set :@soft_deleted, soft_deleted
|
|
179
186
|
files
|
|
180
187
|
end
|
|
181
188
|
|
|
@@ -60,7 +60,8 @@ module Google
|
|
|
60
60
|
##
|
|
61
61
|
# The external url to the file.
|
|
62
62
|
def ext_url
|
|
63
|
-
"
|
|
63
|
+
root_url = @service.service.root_url.chomp "/"
|
|
64
|
+
"#{root_url}#{ext_path}"
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
def apply_option_defaults options
|
|
@@ -91,7 +92,7 @@ module Google
|
|
|
91
92
|
|
|
92
93
|
def error_msg attr_name
|
|
93
94
|
"Service account credentials '#{attr_name}' is missing. To generate service account credentials " \
|
|
94
|
-
|
|
95
|
+
"see https://cloud.google.com/iam/docs/service-accounts"
|
|
95
96
|
end
|
|
96
97
|
|
|
97
98
|
def post_object options
|
|
@@ -144,8 +145,8 @@ module Google
|
|
|
144
145
|
|
|
145
146
|
def generate_signed_url issuer, signed_string, expires, query
|
|
146
147
|
url = "#{ext_url}?GoogleAccessId=#{url_escape issuer}" \
|
|
147
|
-
|
|
148
|
-
|
|
148
|
+
"&Expires=#{expires}" \
|
|
149
|
+
"&Signature=#{url_escape signed_string}"
|
|
149
150
|
|
|
150
151
|
query&.each do |name, value|
|
|
151
152
|
url << "&#{url_escape name}=#{url_escape value}"
|
|
@@ -131,7 +131,7 @@ module Google
|
|
|
131
131
|
# methods below are public visibility only for unit testing
|
|
132
132
|
# rubocop:disable Style/StringLiterals
|
|
133
133
|
def escape_characters str
|
|
134
|
-
str.
|
|
134
|
+
str.chars.map do |s|
|
|
135
135
|
if s.ascii_only?
|
|
136
136
|
case s
|
|
137
137
|
when "\\"
|
|
@@ -207,7 +207,7 @@ module Google
|
|
|
207
207
|
|
|
208
208
|
def error_msg attr_name
|
|
209
209
|
"Service account credentials '#{attr_name}' is missing. To generate service account credentials " \
|
|
210
|
-
|
|
210
|
+
"see https://cloud.google.com/iam/docs/service-accounts"
|
|
211
211
|
end
|
|
212
212
|
|
|
213
213
|
def service_account_signer signer
|
|
@@ -243,7 +243,7 @@ module Google
|
|
|
243
243
|
headers_arr = canonical_headers.map do |k, v|
|
|
244
244
|
[k.downcase, v.strip.gsub(/[^\S\t]+/, " ").gsub(/\t+/, " ")]
|
|
245
245
|
end
|
|
246
|
-
canonical_headers =
|
|
246
|
+
canonical_headers = headers_arr.to_h
|
|
247
247
|
canonical_headers["host"] = host_name virtual_hosted_style, bucket_bound_hostname
|
|
248
248
|
|
|
249
249
|
canonical_headers = canonical_headers.sort_by(&:first).to_h
|
|
@@ -295,13 +295,13 @@ module Google
|
|
|
295
295
|
##
|
|
296
296
|
# The external path to the bucket, with trailing slash.
|
|
297
297
|
def bucket_path path_style
|
|
298
|
-
|
|
298
|
+
"/#{@bucket_name}/" if path_style
|
|
299
299
|
end
|
|
300
300
|
|
|
301
301
|
##
|
|
302
302
|
# The external url to the file.
|
|
303
303
|
def ext_url scheme, virtual_hosted_style, bucket_bound_hostname
|
|
304
|
-
url =
|
|
304
|
+
url = @service.service.root_url.chomp "/"
|
|
305
305
|
if virtual_hosted_style
|
|
306
306
|
parts = url.split "//"
|
|
307
307
|
parts[1] = "#{@bucket_name}.#{parts[1]}"
|