google-cloud-storage 1.29.2 → 1.33.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/CHANGELOG.md +55 -0
- data/CONTRIBUTING.md +3 -4
- data/lib/google/cloud/storage/bucket.rb +344 -76
- data/lib/google/cloud/storage/bucket/acl.rb +12 -14
- data/lib/google/cloud/storage/bucket/cors.rb +4 -1
- data/lib/google/cloud/storage/bucket/lifecycle.rb +11 -11
- data/lib/google/cloud/storage/bucket/list.rb +3 -3
- data/lib/google/cloud/storage/credentials.rb +16 -14
- data/lib/google/cloud/storage/file.rb +223 -32
- data/lib/google/cloud/storage/file/acl.rb +181 -20
- data/lib/google/cloud/storage/file/list.rb +3 -3
- data/lib/google/cloud/storage/file/signer_v2.rb +2 -4
- data/lib/google/cloud/storage/file/signer_v4.rb +11 -9
- data/lib/google/cloud/storage/file/verifier.rb +2 -2
- data/lib/google/cloud/storage/hmac_key/list.rb +3 -3
- data/lib/google/cloud/storage/policy.rb +2 -2
- data/lib/google/cloud/storage/policy/binding.rb +5 -3
- data/lib/google/cloud/storage/policy/bindings.rb +2 -2
- data/lib/google/cloud/storage/policy/condition.rb +4 -2
- data/lib/google/cloud/storage/post_object.rb +2 -1
- data/lib/google/cloud/storage/project.rb +18 -6
- data/lib/google/cloud/storage/service.rb +193 -64
- data/lib/google/cloud/storage/version.rb +1 -1
- metadata +34 -14
@@ -198,7 +198,7 @@ module Google
|
|
198
198
|
gapi = @service.insert_bucket_acl @bucket, entity, "OWNER",
|
199
199
|
user_project: user_project
|
200
200
|
entity = gapi.entity
|
201
|
-
@owners
|
201
|
+
@owners&.push entity
|
202
202
|
entity
|
203
203
|
end
|
204
204
|
|
@@ -243,7 +243,7 @@ module Google
|
|
243
243
|
gapi = @service.insert_bucket_acl @bucket, entity, "WRITER",
|
244
244
|
user_project: user_project
|
245
245
|
entity = gapi.entity
|
246
|
-
@writers
|
246
|
+
@writers&.push entity
|
247
247
|
entity
|
248
248
|
end
|
249
249
|
|
@@ -288,7 +288,7 @@ module Google
|
|
288
288
|
gapi = @service.insert_bucket_acl @bucket, entity, "READER",
|
289
289
|
user_project: user_project
|
290
290
|
entity = gapi.entity
|
291
|
-
@readers
|
291
|
+
@readers&.push entity
|
292
292
|
entity
|
293
293
|
end
|
294
294
|
|
@@ -323,9 +323,9 @@ module Google
|
|
323
323
|
def delete entity
|
324
324
|
@service.delete_bucket_acl @bucket, entity,
|
325
325
|
user_project: user_project
|
326
|
-
@owners
|
327
|
-
@writers
|
328
|
-
@readers
|
326
|
+
@owners&.delete entity
|
327
|
+
@writers&.delete entity
|
328
|
+
@readers&.delete entity
|
329
329
|
true
|
330
330
|
end
|
331
331
|
|
@@ -445,8 +445,7 @@ module Google
|
|
445
445
|
|
446
446
|
def entities_from_acls acls, role
|
447
447
|
selected = acls.select { |acl| acl.role == role }
|
448
|
-
|
449
|
-
entities
|
448
|
+
selected.map(&:entity)
|
450
449
|
end
|
451
450
|
end
|
452
451
|
|
@@ -614,7 +613,7 @@ module Google
|
|
614
613
|
gapi = @service.insert_default_acl @bucket, entity, "OWNER",
|
615
614
|
user_project: user_project
|
616
615
|
entity = gapi.entity
|
617
|
-
@owners
|
616
|
+
@owners&.push entity
|
618
617
|
entity
|
619
618
|
end
|
620
619
|
|
@@ -657,7 +656,7 @@ module Google
|
|
657
656
|
gapi = @service.insert_default_acl @bucket, entity, "READER",
|
658
657
|
user_project: user_project
|
659
658
|
entity = gapi.entity
|
660
|
-
@readers
|
659
|
+
@readers&.push entity
|
661
660
|
entity
|
662
661
|
end
|
663
662
|
|
@@ -690,8 +689,8 @@ module Google
|
|
690
689
|
def delete entity
|
691
690
|
@service.delete_default_acl @bucket, entity,
|
692
691
|
user_project: user_project
|
693
|
-
@owners
|
694
|
-
@readers
|
692
|
+
@owners&.delete entity
|
693
|
+
@readers&.delete entity
|
695
694
|
true
|
696
695
|
end
|
697
696
|
|
@@ -829,8 +828,7 @@ module Google
|
|
829
828
|
|
830
829
|
def entities_from_acls acls, role
|
831
830
|
selected = acls.select { |acl| acl.role == role }
|
832
|
-
|
833
|
-
entities
|
831
|
+
selected.map(&:entity)
|
834
832
|
end
|
835
833
|
end
|
836
834
|
end
|
@@ -172,7 +172,10 @@ module Google
|
|
172
172
|
# rule.max_age #=> 3600
|
173
173
|
#
|
174
174
|
class Rule
|
175
|
-
attr_accessor :origin
|
175
|
+
attr_accessor :origin
|
176
|
+
attr_accessor :methods
|
177
|
+
attr_accessor :headers
|
178
|
+
attr_accessor :max_age
|
176
179
|
|
177
180
|
# @private
|
178
181
|
def initialize origin, methods, headers: nil, max_age: nil
|
@@ -371,17 +371,17 @@ module Google
|
|
371
371
|
# end
|
372
372
|
#
|
373
373
|
class Rule
|
374
|
-
attr_accessor :action
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
374
|
+
attr_accessor :action
|
375
|
+
attr_accessor :storage_class
|
376
|
+
attr_accessor :age
|
377
|
+
attr_accessor :created_before
|
378
|
+
attr_accessor :custom_time_before
|
379
|
+
attr_accessor :days_since_custom_time
|
380
|
+
attr_accessor :days_since_noncurrent_time
|
381
|
+
attr_accessor :is_live
|
382
|
+
attr_accessor :matches_storage_class
|
383
|
+
attr_accessor :noncurrent_time_before
|
384
|
+
attr_accessor :num_newer_versions
|
385
385
|
|
386
386
|
# @private
|
387
387
|
def initialize action,
|
@@ -125,17 +125,17 @@ module Google
|
|
125
125
|
# puts bucket.name
|
126
126
|
# end
|
127
127
|
#
|
128
|
-
def all request_limit: nil
|
128
|
+
def all request_limit: nil, &block
|
129
129
|
request_limit = request_limit.to_i if request_limit
|
130
130
|
unless block_given?
|
131
131
|
return enum_for :all, request_limit: request_limit
|
132
132
|
end
|
133
133
|
results = self
|
134
134
|
loop do
|
135
|
-
results.each
|
135
|
+
results.each(&block)
|
136
136
|
if request_limit
|
137
137
|
request_limit -= 1
|
138
|
-
break if request_limit
|
138
|
+
break if request_limit.negative?
|
139
139
|
end
|
140
140
|
break unless results.next?
|
141
141
|
results = results.next
|
@@ -38,20 +38,22 @@ module Google
|
|
38
38
|
# storage.project_id #=> "my-project"
|
39
39
|
#
|
40
40
|
class Credentials < Google::Auth::Credentials
|
41
|
-
SCOPE =
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
41
|
+
SCOPE = ["https://www.googleapis.com/auth/devstorage.full_control"].freeze
|
42
|
+
PATH_ENV_VARS = [
|
43
|
+
"STORAGE_CREDENTIALS",
|
44
|
+
"STORAGE_KEYFILE",
|
45
|
+
"GOOGLE_CLOUD_CREDENTIALS",
|
46
|
+
"GOOGLE_CLOUD_KEYFILE",
|
47
|
+
"GCLOUD_KEYFILE"
|
48
|
+
].freeze
|
49
|
+
JSON_ENV_VARS = [
|
50
|
+
"STORAGE_CREDENTIALS_JSON",
|
51
|
+
"STORAGE_KEYFILE_JSON",
|
52
|
+
"GOOGLE_CLOUD_CREDENTIALS_JSON",
|
53
|
+
"GOOGLE_CLOUD_KEYFILE_JSON",
|
54
|
+
"GCLOUD_KEYFILE_JSON"
|
55
|
+
].freeze
|
56
|
+
DEFAULT_PATHS = ["~/.config/gcloud/application_default_credentials.json"].freeze
|
55
57
|
end
|
56
58
|
end
|
57
59
|
end
|
@@ -191,7 +191,7 @@ module Google
|
|
191
191
|
# @return [Integer]
|
192
192
|
#
|
193
193
|
def size
|
194
|
-
@gapi.size
|
194
|
+
@gapi.size&.to_i
|
195
195
|
end
|
196
196
|
|
197
197
|
##
|
@@ -260,6 +260,9 @@ module Google
|
|
260
260
|
# directive for the file data. If omitted, and the file is accessible
|
261
261
|
# to all anonymous users, the default will be `public, max-age=3600`.
|
262
262
|
#
|
263
|
+
# To pass generation and/or metageneration preconditions, call this
|
264
|
+
# method within a block passed to {#update}.
|
265
|
+
#
|
263
266
|
# @param [String] cache_control The Cache-Control directive.
|
264
267
|
#
|
265
268
|
def cache_control= cache_control
|
@@ -281,6 +284,9 @@ module Google
|
|
281
284
|
# Updates the [Content-Disposition](https://tools.ietf.org/html/rfc6266)
|
282
285
|
# of the file data.
|
283
286
|
#
|
287
|
+
# To pass generation and/or metageneration preconditions, call this
|
288
|
+
# method within a block passed to {#update}.
|
289
|
+
#
|
284
290
|
# @param [String] content_disposition The Content-Disposition of the
|
285
291
|
# file.
|
286
292
|
#
|
@@ -305,6 +311,9 @@ module Google
|
|
305
311
|
# ](https://tools.ietf.org/html/rfc7231#section-3.1.2.2) of the file
|
306
312
|
# data.
|
307
313
|
#
|
314
|
+
# To pass generation and/or metageneration preconditions, call this
|
315
|
+
# method within a block passed to {#update}.
|
316
|
+
#
|
308
317
|
# @param [String] content_encoding The Content-Encoding of the file.
|
309
318
|
#
|
310
319
|
def content_encoding= content_encoding
|
@@ -326,6 +335,9 @@ module Google
|
|
326
335
|
# Updates the [Content-Language](http://tools.ietf.org/html/bcp47) of
|
327
336
|
# the file data.
|
328
337
|
#
|
338
|
+
# To pass generation and/or metageneration preconditions, call this
|
339
|
+
# method within a block passed to {#update}.
|
340
|
+
#
|
329
341
|
# @param [String] content_language The Content-Language of the file.
|
330
342
|
#
|
331
343
|
def content_language= content_language
|
@@ -348,6 +360,9 @@ module Google
|
|
348
360
|
# [Content-Type](https://tools.ietf.org/html/rfc2616#section-14.17) of
|
349
361
|
# the file data.
|
350
362
|
#
|
363
|
+
# To pass generation and/or metageneration preconditions, call this
|
364
|
+
# method within a block passed to {#update}.
|
365
|
+
#
|
351
366
|
# @param [String] content_type The Content-Type of the file.
|
352
367
|
#
|
353
368
|
def content_type= content_type
|
@@ -370,6 +385,9 @@ module Google
|
|
370
385
|
# future. If custom_time must be unset, you must either perform a rewrite
|
371
386
|
# operation, or upload the data again and create a new file.
|
372
387
|
#
|
388
|
+
# To pass generation and/or metageneration preconditions, call this
|
389
|
+
# method within a block passed to {#update}.
|
390
|
+
#
|
373
391
|
# @param [DateTime] custom_time A custom time specified by the user
|
374
392
|
# for the file.
|
375
393
|
#
|
@@ -396,6 +414,9 @@ module Google
|
|
396
414
|
# string values that will returned with requests for the file as
|
397
415
|
# "x-goog-meta-" response headers.
|
398
416
|
#
|
417
|
+
# To pass generation and/or metageneration preconditions, call this
|
418
|
+
# method within a block passed to {#update}.
|
419
|
+
#
|
399
420
|
# @param [Hash(String => String)] metadata The user-provided metadata,
|
400
421
|
# in key/value pairs.
|
401
422
|
#
|
@@ -465,6 +486,9 @@ module Google
|
|
465
486
|
# The default value is the default storage class for the bucket. See
|
466
487
|
# {Bucket#storage_class}.
|
467
488
|
#
|
489
|
+
# To pass generation and/or metageneration preconditions, call this
|
490
|
+
# method within a block passed to {#update}.
|
491
|
+
#
|
468
492
|
# @param [Symbol, String] storage_class Storage class of the file.
|
469
493
|
#
|
470
494
|
def storage_class= storage_class
|
@@ -505,6 +529,9 @@ module Google
|
|
505
529
|
# removed, the file's `retention_expires_at` date is not changed. The
|
506
530
|
# default value is `false`.
|
507
531
|
#
|
532
|
+
# To pass generation and/or metageneration preconditions, call this
|
533
|
+
# method within a block passed to {#update}.
|
534
|
+
#
|
508
535
|
# See {#retention_expires_at}.
|
509
536
|
#
|
510
537
|
# @example
|
@@ -533,6 +560,9 @@ module Google
|
|
533
560
|
#
|
534
561
|
# See {#retention_expires_at}.
|
535
562
|
#
|
563
|
+
# To pass generation and/or metageneration preconditions, call this
|
564
|
+
# method within a block passed to {#update}.
|
565
|
+
#
|
536
566
|
# @example
|
537
567
|
# require "google/cloud/storage"
|
538
568
|
#
|
@@ -643,6 +673,9 @@ module Google
|
|
643
673
|
# holds released prior to the effective date of the new policy may
|
644
674
|
# have already been deleted by the user.
|
645
675
|
#
|
676
|
+
# To pass generation and/or metageneration preconditions, call this
|
677
|
+
# method within a block passed to {#update}.
|
678
|
+
#
|
646
679
|
# @example
|
647
680
|
# require "google/cloud/storage"
|
648
681
|
#
|
@@ -681,6 +714,9 @@ module Google
|
|
681
714
|
# {Bucket#default_event_based_hold?} and
|
682
715
|
# {Bucket#default_event_based_hold=}.
|
683
716
|
#
|
717
|
+
# To pass generation and/or metageneration preconditions, call this
|
718
|
+
# method within a block passed to {#update}.
|
719
|
+
#
|
684
720
|
# @example
|
685
721
|
# require "google/cloud/storage"
|
686
722
|
#
|
@@ -774,6 +810,22 @@ module Google
|
|
774
810
|
# accessible in the block is completely mutable and will be included in the
|
775
811
|
# request.
|
776
812
|
#
|
813
|
+
# @param [Integer] generation Select a specific revision of the file to
|
814
|
+
# update. The default is the latest version.
|
815
|
+
# @param [Integer] if_generation_match Makes the operation conditional
|
816
|
+
# on whether the file's current generation matches the given value.
|
817
|
+
# Setting to 0 makes the operation succeed only if there are no live
|
818
|
+
# versions of the file.
|
819
|
+
# @param [Integer] if_generation_not_match Makes the operation conditional
|
820
|
+
# on whether the file's current generation does not match the given
|
821
|
+
# value. If no live file exists, the precondition fails. Setting to 0
|
822
|
+
# makes the operation succeed only if there is a live version of the file.
|
823
|
+
# @param [Integer] if_metageneration_match Makes the operation conditional
|
824
|
+
# on whether the file's current metageneration matches the given value.
|
825
|
+
# @param [Integer] if_metageneration_not_match Makes the operation
|
826
|
+
# conditional on whether the file's current metageneration does not
|
827
|
+
# match the given value.
|
828
|
+
#
|
777
829
|
# @yield [file] a block yielding a delegate object for updating the file
|
778
830
|
#
|
779
831
|
# @example
|
@@ -796,11 +848,34 @@ module Google
|
|
796
848
|
# f.metadata["score"] = "10"
|
797
849
|
# end
|
798
850
|
#
|
799
|
-
|
851
|
+
# @example With a `if_generation_match` precondition:
|
852
|
+
# require "google/cloud/storage"
|
853
|
+
#
|
854
|
+
# storage = Google::Cloud::Storage.new
|
855
|
+
#
|
856
|
+
# bucket = storage.bucket "my-bucket"
|
857
|
+
#
|
858
|
+
# file = bucket.file "path/to/my-file.ext"
|
859
|
+
#
|
860
|
+
# file.update if_generation_match: 1602263125261858 do |f|
|
861
|
+
# f.cache_control = "private, max-age=0, no-cache"
|
862
|
+
# end
|
863
|
+
#
|
864
|
+
def update generation: nil,
|
865
|
+
if_generation_match: nil,
|
866
|
+
if_generation_not_match: nil,
|
867
|
+
if_metageneration_match: nil,
|
868
|
+
if_metageneration_not_match: nil
|
800
869
|
updater = Updater.new gapi
|
801
870
|
yield updater
|
802
871
|
updater.check_for_changed_metadata!
|
803
|
-
|
872
|
+
return if updater.updates.empty?
|
873
|
+
update_gapi! updater.updates,
|
874
|
+
generation: generation,
|
875
|
+
if_generation_match: if_generation_match,
|
876
|
+
if_generation_not_match: if_generation_not_match,
|
877
|
+
if_metageneration_match: if_metageneration_match,
|
878
|
+
if_metageneration_not_match: if_metageneration_not_match
|
804
879
|
end
|
805
880
|
|
806
881
|
##
|
@@ -1138,6 +1213,27 @@ module Google
|
|
1138
1213
|
# access, and allUsers get READER access.
|
1139
1214
|
# @param [Integer] generation Select a specific revision of the file to
|
1140
1215
|
# rewrite. The default is the latest version.
|
1216
|
+
# @param [Integer] if_generation_match Makes the operation conditional
|
1217
|
+
# on whether the destination file's current generation matches the given value.
|
1218
|
+
# Setting to 0 makes the operation succeed only if there are no live
|
1219
|
+
# versions of the file.
|
1220
|
+
# @param [Integer] if_generation_not_match Makes the operation conditional
|
1221
|
+
# on whether the destination file's current generation does not match the given
|
1222
|
+
# value. If no live file exists, the precondition fails. Setting to 0
|
1223
|
+
# makes the operation succeed only if there is a live version of the file.
|
1224
|
+
# @param [Integer] if_metageneration_match Makes the operation conditional
|
1225
|
+
# on whether the destination file's current metageneration matches the given value.
|
1226
|
+
# @param [Integer] if_metageneration_not_match Makes the operation
|
1227
|
+
# conditional on whether the destination file's current metageneration does not
|
1228
|
+
# match the given value.
|
1229
|
+
# @param [Integer] if_source_generation_match Makes the operation conditional on
|
1230
|
+
# whether the source object's current generation matches the given value.
|
1231
|
+
# @param [Integer] if_source_generation_not_match Makes the operation conditional
|
1232
|
+
# on whether the source object's current generation does not match the given value.
|
1233
|
+
# @param [Integer] if_source_metageneration_match Makes the operation conditional
|
1234
|
+
# on whether the source object's current metageneration matches the given value.
|
1235
|
+
# @param [Integer] if_source_metageneration_not_match Makes the operation conditional
|
1236
|
+
# on whether the source object's current metageneration does not match the given value.
|
1141
1237
|
# @param [String] encryption_key Optional. The customer-supplied,
|
1142
1238
|
# AES-256 encryption key used to decrypt the file, if the existing
|
1143
1239
|
# file is encrypted.
|
@@ -1259,11 +1355,24 @@ module Google
|
|
1259
1355
|
# f.metadata["rewritten_from"] = "#{file.bucket}/#{file.name}"
|
1260
1356
|
# end
|
1261
1357
|
#
|
1262
|
-
def rewrite dest_bucket_or_path,
|
1263
|
-
|
1358
|
+
def rewrite dest_bucket_or_path,
|
1359
|
+
dest_path = nil,
|
1360
|
+
acl: nil,
|
1361
|
+
generation: nil,
|
1362
|
+
if_generation_match: nil,
|
1363
|
+
if_generation_not_match: nil,
|
1364
|
+
if_metageneration_match: nil,
|
1365
|
+
if_metageneration_not_match: nil,
|
1366
|
+
if_source_generation_match: nil,
|
1367
|
+
if_source_generation_not_match: nil,
|
1368
|
+
if_source_metageneration_match: nil,
|
1369
|
+
if_source_metageneration_not_match: nil,
|
1370
|
+
encryption_key: nil,
|
1371
|
+
new_encryption_key: nil,
|
1372
|
+
new_kms_key: nil,
|
1373
|
+
force_copy_metadata: nil
|
1264
1374
|
ensure_service!
|
1265
|
-
dest_bucket, dest_path = fix_rewrite_args dest_bucket_or_path,
|
1266
|
-
dest_path
|
1375
|
+
dest_bucket, dest_path = fix_rewrite_args dest_bucket_or_path, dest_path
|
1267
1376
|
|
1268
1377
|
update_gapi = nil
|
1269
1378
|
if block_given?
|
@@ -1276,9 +1385,21 @@ module Google
|
|
1276
1385
|
end
|
1277
1386
|
end
|
1278
1387
|
|
1279
|
-
new_gapi = rewrite_gapi bucket,
|
1280
|
-
|
1281
|
-
|
1388
|
+
new_gapi = rewrite_gapi bucket,
|
1389
|
+
name,
|
1390
|
+
update_gapi,
|
1391
|
+
new_bucket: dest_bucket,
|
1392
|
+
new_name: dest_path,
|
1393
|
+
acl: acl,
|
1394
|
+
generation: generation,
|
1395
|
+
if_generation_match: if_generation_match,
|
1396
|
+
if_generation_not_match: if_generation_not_match,
|
1397
|
+
if_metageneration_match: if_metageneration_match,
|
1398
|
+
if_metageneration_not_match: if_metageneration_not_match,
|
1399
|
+
if_source_generation_match: if_source_generation_match,
|
1400
|
+
if_source_generation_not_match: if_source_generation_not_match,
|
1401
|
+
if_source_metageneration_match: if_source_metageneration_match,
|
1402
|
+
if_source_metageneration_not_match: if_source_metageneration_not_match,
|
1282
1403
|
encryption_key: encryption_key,
|
1283
1404
|
new_encryption_key: new_encryption_key,
|
1284
1405
|
new_kms_key: new_kms_key,
|
@@ -1375,6 +1496,20 @@ module Google
|
|
1375
1496
|
# {#generation}. The default behavior is to delete the latest version
|
1376
1497
|
# of the file (regardless of the version to which the file is set,
|
1377
1498
|
# which is the version returned by {#generation}.)
|
1499
|
+
# @param [Integer] if_generation_match Makes the operation conditional
|
1500
|
+
# on whether the file's current generation matches the given value.
|
1501
|
+
# Setting to 0 makes the operation succeed only if there are no live
|
1502
|
+
# versions of the file.
|
1503
|
+
# @param [Integer] if_generation_not_match Makes the operation conditional
|
1504
|
+
# on whether the file's current generation does not match the given
|
1505
|
+
# value. If no live file exists, the precondition fails. Setting to 0
|
1506
|
+
# makes the operation succeed only if there is a live version of the file.
|
1507
|
+
# @param [Integer] if_metageneration_match Makes the operation conditional
|
1508
|
+
# on whether the file's current metageneration matches the given value.
|
1509
|
+
# @param [Integer] if_metageneration_not_match Makes the operation
|
1510
|
+
# conditional on whether the file's current metageneration does not
|
1511
|
+
# match the given value.
|
1512
|
+
#
|
1378
1513
|
# @return [Boolean] Returns `true` if the file was deleted.
|
1379
1514
|
#
|
1380
1515
|
# @example
|
@@ -1407,11 +1542,21 @@ module Google
|
|
1407
1542
|
# file = bucket.file "path/to/my-file.ext"
|
1408
1543
|
# file.delete generation: 123456
|
1409
1544
|
#
|
1410
|
-
def delete generation: nil
|
1545
|
+
def delete generation: nil,
|
1546
|
+
if_generation_match: nil,
|
1547
|
+
if_generation_not_match: nil,
|
1548
|
+
if_metageneration_match: nil,
|
1549
|
+
if_metageneration_not_match: nil
|
1411
1550
|
generation = self.generation if generation == true
|
1412
1551
|
ensure_service!
|
1413
|
-
service.delete_file bucket,
|
1414
|
-
|
1552
|
+
service.delete_file bucket,
|
1553
|
+
name,
|
1554
|
+
generation: generation,
|
1555
|
+
if_generation_match: if_generation_match,
|
1556
|
+
if_generation_not_match: if_generation_not_match,
|
1557
|
+
if_metageneration_match: if_metageneration_match,
|
1558
|
+
if_metageneration_not_match: if_metageneration_not_match,
|
1559
|
+
user_project: user_project
|
1415
1560
|
true
|
1416
1561
|
end
|
1417
1562
|
|
@@ -1618,11 +1763,11 @@ module Google
|
|
1618
1763
|
# scopes = ["https://www.googleapis.com/auth/iam"]
|
1619
1764
|
# iam_client.authorization = Google::Auth.get_application_default scopes
|
1620
1765
|
#
|
1621
|
-
# request =
|
1622
|
-
#
|
1623
|
-
#
|
1766
|
+
# request = Google::Apis::IamcredentialsV1::SignBlobRequest.new(
|
1767
|
+
# payload: string_to_sign
|
1768
|
+
# )
|
1624
1769
|
# resource = "projects/-/serviceAccounts/#{issuer}"
|
1625
|
-
# response = iam_client.sign_service_account_blob resource, request
|
1770
|
+
# response = iam_client.sign_service_account_blob resource, request
|
1626
1771
|
# response.signed_blob
|
1627
1772
|
# end
|
1628
1773
|
#
|
@@ -1865,7 +2010,13 @@ module Google
|
|
1865
2010
|
reload! generation: true
|
1866
2011
|
end
|
1867
2012
|
|
1868
|
-
def update_gapi!
|
2013
|
+
def update_gapi! attributes,
|
2014
|
+
generation: nil,
|
2015
|
+
if_generation_match: nil,
|
2016
|
+
if_generation_not_match: nil,
|
2017
|
+
if_metageneration_match: nil,
|
2018
|
+
if_metageneration_not_match: nil
|
2019
|
+
attributes = Array(attributes)
|
1869
2020
|
attributes.flatten!
|
1870
2021
|
return if attributes.empty?
|
1871
2022
|
update_gapi = self.class.gapi_from_attrs @gapi, attributes
|
@@ -1873,28 +2024,67 @@ module Google
|
|
1873
2024
|
|
1874
2025
|
ensure_service!
|
1875
2026
|
|
1876
|
-
rewrite_attrs =
|
2027
|
+
rewrite_attrs = [:storage_class, :kms_key_name]
|
1877
2028
|
@gapi = if attributes.any? { |a| rewrite_attrs.include? a }
|
1878
|
-
rewrite_gapi
|
1879
|
-
|
2029
|
+
rewrite_gapi bucket,
|
2030
|
+
name,
|
2031
|
+
update_gapi,
|
2032
|
+
generation: generation,
|
2033
|
+
if_generation_match: if_generation_match,
|
2034
|
+
if_generation_not_match: if_generation_not_match,
|
2035
|
+
if_metageneration_match: if_metageneration_match,
|
2036
|
+
if_metageneration_not_match: if_metageneration_not_match,
|
2037
|
+
user_project: user_project
|
1880
2038
|
else
|
1881
|
-
service.patch_file
|
1882
|
-
|
2039
|
+
service.patch_file bucket,
|
2040
|
+
name,
|
2041
|
+
update_gapi,
|
2042
|
+
generation: generation,
|
2043
|
+
if_generation_match: if_generation_match,
|
2044
|
+
if_generation_not_match: if_generation_not_match,
|
2045
|
+
if_metageneration_match: if_metageneration_match,
|
2046
|
+
if_metageneration_not_match: if_metageneration_not_match,
|
2047
|
+
user_project: user_project
|
1883
2048
|
end
|
1884
2049
|
end
|
1885
2050
|
|
1886
|
-
def rewrite_gapi bucket,
|
1887
|
-
|
1888
|
-
|
1889
|
-
|
2051
|
+
def rewrite_gapi bucket,
|
2052
|
+
name,
|
2053
|
+
updated_gapi,
|
2054
|
+
new_bucket: nil,
|
2055
|
+
new_name: nil,
|
2056
|
+
acl: nil,
|
2057
|
+
generation: nil,
|
2058
|
+
if_generation_match: nil,
|
2059
|
+
if_generation_not_match: nil,
|
2060
|
+
if_metageneration_match: nil,
|
2061
|
+
if_metageneration_not_match: nil,
|
2062
|
+
if_source_generation_match: nil,
|
2063
|
+
if_source_generation_not_match: nil,
|
2064
|
+
if_source_metageneration_match: nil,
|
2065
|
+
if_source_metageneration_not_match: nil,
|
2066
|
+
encryption_key: nil,
|
2067
|
+
new_encryption_key: nil,
|
2068
|
+
new_kms_key: nil,
|
1890
2069
|
user_project: nil
|
1891
2070
|
new_bucket ||= bucket
|
1892
2071
|
new_name ||= name
|
1893
|
-
options = {
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
2072
|
+
options = {
|
2073
|
+
acl: File::Acl.predefined_rule_for(acl),
|
2074
|
+
generation: generation,
|
2075
|
+
if_generation_match: if_generation_match,
|
2076
|
+
if_generation_not_match: if_generation_not_match,
|
2077
|
+
if_metageneration_match: if_metageneration_match,
|
2078
|
+
if_metageneration_not_match: if_metageneration_not_match,
|
2079
|
+
if_source_generation_match: if_source_generation_match,
|
2080
|
+
if_source_generation_not_match: if_source_generation_not_match,
|
2081
|
+
if_source_metageneration_match: if_source_metageneration_match,
|
2082
|
+
if_source_metageneration_not_match: if_source_metageneration_not_match,
|
2083
|
+
source_key: encryption_key,
|
2084
|
+
destination_key: new_encryption_key,
|
2085
|
+
destination_kms_key: new_kms_key,
|
2086
|
+
user_project: user_project
|
2087
|
+
}.delete_if { |_k, v| v.nil? }
|
1898
2088
|
|
1899
2089
|
resp = service.rewrite_file \
|
1900
2090
|
bucket, name, new_bucket, new_name, updated_gapi, **options
|
@@ -1972,6 +2162,7 @@ module Google
|
|
1972
2162
|
##
|
1973
2163
|
# @private Create an Updater object.
|
1974
2164
|
def initialize gapi
|
2165
|
+
super()
|
1975
2166
|
@updates = []
|
1976
2167
|
@gapi = gapi
|
1977
2168
|
@metadata ||= @gapi.metadata.to_h.dup
|