google-cloud-storage 1.18.1 → 1.44.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/AUTHENTICATION.md +17 -30
- data/CHANGELOG.md +312 -0
- data/CONTRIBUTING.md +4 -5
- data/LOGGING.md +1 -1
- data/OVERVIEW.md +37 -5
- data/TROUBLESHOOTING.md +2 -8
- data/lib/google/cloud/storage/bucket/acl.rb +40 -40
- data/lib/google/cloud/storage/bucket/cors.rb +4 -1
- data/lib/google/cloud/storage/bucket/lifecycle.rb +259 -44
- data/lib/google/cloud/storage/bucket/list.rb +3 -3
- data/lib/google/cloud/storage/bucket.rb +1096 -172
- data/lib/google/cloud/storage/convert.rb +4 -3
- data/lib/google/cloud/storage/credentials.rb +16 -14
- data/lib/google/cloud/storage/errors.rb +7 -2
- data/lib/google/cloud/storage/file/acl.rb +181 -20
- data/lib/google/cloud/storage/file/list.rb +10 -8
- data/lib/google/cloud/storage/file/signer_v2.rb +36 -18
- data/lib/google/cloud/storage/file/signer_v4.rb +249 -61
- data/lib/google/cloud/storage/file/verifier.rb +2 -2
- data/lib/google/cloud/storage/file.rb +450 -84
- data/lib/google/cloud/storage/hmac_key/list.rb +182 -0
- data/lib/google/cloud/storage/hmac_key.rb +316 -0
- data/lib/google/cloud/storage/policy/binding.rb +246 -0
- data/lib/google/cloud/storage/policy/bindings.rb +196 -0
- data/lib/google/cloud/storage/policy/condition.rb +138 -0
- data/lib/google/cloud/storage/policy.rb +277 -24
- data/lib/google/cloud/storage/post_object.rb +20 -2
- data/lib/google/cloud/storage/project.rb +249 -50
- data/lib/google/cloud/storage/service.rb +479 -288
- data/lib/google/cloud/storage/version.rb +1 -1
- data/lib/google/cloud/storage.rb +86 -16
- data/lib/google-cloud-storage.rb +54 -7
- metadata +74 -27
@@ -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
|
|
@@ -349,8 +349,8 @@ module Google
|
|
349
349
|
#
|
350
350
|
# bucket.acl.auth!
|
351
351
|
#
|
352
|
-
def auth!
|
353
|
-
update_predefined_acl! "authenticatedRead"
|
352
|
+
def auth! if_metageneration_match: nil
|
353
|
+
update_predefined_acl! "authenticatedRead", if_metageneration_match: if_metageneration_match
|
354
354
|
end
|
355
355
|
alias authenticatedRead! auth!
|
356
356
|
alias auth_read! auth!
|
@@ -370,8 +370,8 @@ module Google
|
|
370
370
|
#
|
371
371
|
# bucket.acl.private!
|
372
372
|
#
|
373
|
-
def private!
|
374
|
-
update_predefined_acl! "private"
|
373
|
+
def private! if_metageneration_match: nil
|
374
|
+
update_predefined_acl! "private", if_metageneration_match: if_metageneration_match
|
375
375
|
end
|
376
376
|
|
377
377
|
##
|
@@ -387,8 +387,8 @@ module Google
|
|
387
387
|
#
|
388
388
|
# bucket.acl.project_private!
|
389
389
|
#
|
390
|
-
def project_private!
|
391
|
-
update_predefined_acl! "projectPrivate"
|
390
|
+
def project_private! if_metageneration_match: nil
|
391
|
+
update_predefined_acl! "projectPrivate", if_metageneration_match: if_metageneration_match
|
392
392
|
end
|
393
393
|
alias projectPrivate! project_private!
|
394
394
|
|
@@ -405,8 +405,8 @@ module Google
|
|
405
405
|
#
|
406
406
|
# bucket.acl.public!
|
407
407
|
#
|
408
|
-
def public!
|
409
|
-
update_predefined_acl! "publicRead"
|
408
|
+
def public! if_metageneration_match: nil
|
409
|
+
update_predefined_acl! "publicRead", if_metageneration_match: if_metageneration_match
|
410
410
|
end
|
411
411
|
alias publicRead! public!
|
412
412
|
alias public_read! public!
|
@@ -423,8 +423,8 @@ module Google
|
|
423
423
|
#
|
424
424
|
# bucket.acl.public_write!
|
425
425
|
#
|
426
|
-
def public_write!
|
427
|
-
update_predefined_acl! "publicReadWrite"
|
426
|
+
def public_write! if_metageneration_match: nil
|
427
|
+
update_predefined_acl! "publicReadWrite", if_metageneration_match: if_metageneration_match
|
428
428
|
end
|
429
429
|
alias publicReadWrite! public_write!
|
430
430
|
|
@@ -437,16 +437,16 @@ module Google
|
|
437
437
|
self
|
438
438
|
end
|
439
439
|
|
440
|
-
def update_predefined_acl! acl_role
|
440
|
+
def update_predefined_acl! acl_role, if_metageneration_match: nil
|
441
441
|
@service.patch_bucket @bucket, predefined_acl: acl_role,
|
442
|
-
user_project: user_project
|
442
|
+
user_project: user_project,
|
443
|
+
if_metageneration_match: if_metageneration_match
|
443
444
|
clear!
|
444
445
|
end
|
445
446
|
|
446
447
|
def entities_from_acls acls, role
|
447
448
|
selected = acls.select { |acl| acl.role == role }
|
448
|
-
|
449
|
-
entities
|
449
|
+
selected.map(&:entity)
|
450
450
|
end
|
451
451
|
end
|
452
452
|
|
@@ -614,7 +614,7 @@ module Google
|
|
614
614
|
gapi = @service.insert_default_acl @bucket, entity, "OWNER",
|
615
615
|
user_project: user_project
|
616
616
|
entity = gapi.entity
|
617
|
-
@owners
|
617
|
+
@owners&.push entity
|
618
618
|
entity
|
619
619
|
end
|
620
620
|
|
@@ -657,7 +657,7 @@ module Google
|
|
657
657
|
gapi = @service.insert_default_acl @bucket, entity, "READER",
|
658
658
|
user_project: user_project
|
659
659
|
entity = gapi.entity
|
660
|
-
@readers
|
660
|
+
@readers&.push entity
|
661
661
|
entity
|
662
662
|
end
|
663
663
|
|
@@ -690,8 +690,8 @@ module Google
|
|
690
690
|
def delete entity
|
691
691
|
@service.delete_default_acl @bucket, entity,
|
692
692
|
user_project: user_project
|
693
|
-
@owners
|
694
|
-
@readers
|
693
|
+
@owners&.delete entity
|
694
|
+
@readers&.delete entity
|
695
695
|
true
|
696
696
|
end
|
697
697
|
|
@@ -715,8 +715,8 @@ module Google
|
|
715
715
|
#
|
716
716
|
# bucket.default_acl.auth!
|
717
717
|
#
|
718
|
-
def auth!
|
719
|
-
update_predefined_default_acl! "authenticatedRead"
|
718
|
+
def auth! if_metageneration_match: nil
|
719
|
+
update_predefined_default_acl! "authenticatedRead", if_metageneration_match: if_metageneration_match
|
720
720
|
end
|
721
721
|
alias authenticatedRead! auth!
|
722
722
|
alias auth_read! auth!
|
@@ -736,8 +736,8 @@ module Google
|
|
736
736
|
#
|
737
737
|
# bucket.default_acl.owner_full!
|
738
738
|
#
|
739
|
-
def owner_full!
|
740
|
-
update_predefined_default_acl! "bucketOwnerFullControl"
|
739
|
+
def owner_full! if_metageneration_match: nil
|
740
|
+
update_predefined_default_acl! "bucketOwnerFullControl", if_metageneration_match: if_metageneration_match
|
741
741
|
end
|
742
742
|
alias bucketOwnerFullControl! owner_full!
|
743
743
|
|
@@ -754,8 +754,8 @@ module Google
|
|
754
754
|
#
|
755
755
|
# bucket.default_acl.owner_read!
|
756
756
|
#
|
757
|
-
def owner_read!
|
758
|
-
update_predefined_default_acl! "bucketOwnerRead"
|
757
|
+
def owner_read! if_metageneration_match: nil
|
758
|
+
update_predefined_default_acl! "bucketOwnerRead", if_metageneration_match: if_metageneration_match
|
759
759
|
end
|
760
760
|
alias bucketOwnerRead! owner_read!
|
761
761
|
|
@@ -772,8 +772,8 @@ module Google
|
|
772
772
|
#
|
773
773
|
# bucket.default_acl.private!
|
774
774
|
#
|
775
|
-
def private!
|
776
|
-
update_predefined_default_acl! "private"
|
775
|
+
def private! if_metageneration_match: nil
|
776
|
+
update_predefined_default_acl! "private", if_metageneration_match: if_metageneration_match
|
777
777
|
end
|
778
778
|
|
779
779
|
##
|
@@ -789,8 +789,8 @@ module Google
|
|
789
789
|
#
|
790
790
|
# bucket.default_acl.project_private!
|
791
791
|
#
|
792
|
-
def project_private!
|
793
|
-
update_predefined_default_acl! "projectPrivate"
|
792
|
+
def project_private! if_metageneration_match: nil
|
793
|
+
update_predefined_default_acl! "projectPrivate", if_metageneration_match: if_metageneration_match
|
794
794
|
end
|
795
795
|
alias projectPrivate! project_private!
|
796
796
|
|
@@ -807,8 +807,8 @@ module Google
|
|
807
807
|
#
|
808
808
|
# bucket.default_acl.public!
|
809
809
|
#
|
810
|
-
def public!
|
811
|
-
update_predefined_default_acl! "publicRead"
|
810
|
+
def public! if_metageneration_match: nil
|
811
|
+
update_predefined_default_acl! "publicRead", if_metageneration_match: if_metageneration_match
|
812
812
|
end
|
813
813
|
alias publicRead! public!
|
814
814
|
alias public_read! public!
|
@@ -821,16 +821,16 @@ module Google
|
|
821
821
|
self
|
822
822
|
end
|
823
823
|
|
824
|
-
def update_predefined_default_acl! acl_role
|
824
|
+
def update_predefined_default_acl! acl_role, if_metageneration_match: nil
|
825
825
|
@service.patch_bucket @bucket, predefined_default_acl: acl_role,
|
826
|
-
user_project: user_project
|
826
|
+
user_project: user_project,
|
827
|
+
if_metageneration_match: if_metageneration_match
|
827
828
|
clear!
|
828
829
|
end
|
829
830
|
|
830
831
|
def entities_from_acls acls, role
|
831
832
|
selected = acls.select { |acl| acl.role == role }
|
832
|
-
|
833
|
-
entities
|
833
|
+
selected.map(&:entity)
|
834
834
|
end
|
835
835
|
end
|
836
836
|
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
|
@@ -52,7 +52,9 @@ module Google
|
|
52
52
|
# rule.action #=> "SetStorageClass"
|
53
53
|
# rule.storage_class #=> "COLDLINE"
|
54
54
|
# rule.age #=> 10
|
55
|
-
# rule.matches_storage_class #=> ["
|
55
|
+
# rule.matches_storage_class #=> ["STANDARD", "NEARLINE"]
|
56
|
+
# rule.matches_prefix #=> ["myprefix/foo"]
|
57
|
+
# rule.matches_suffix #=> [".jpg", ".png"]
|
56
58
|
#
|
57
59
|
# @example Updating the bucket's lifecycle management rules in a block.
|
58
60
|
# require "google/cloud/storage"
|
@@ -105,19 +107,45 @@ module Google
|
|
105
107
|
# only the date part (for instance, "2013-01-15"). This condition is
|
106
108
|
# satisfied when a file is created before midnight of the specified
|
107
109
|
# date in UTC.
|
110
|
+
# @param [String,Date] custom_time_before A date in RFC 3339 format with
|
111
|
+
# only the date part (for instance, "2013-01-15"). This condition is
|
112
|
+
# satisfied when the custom time on an object is before this date in UTC.
|
113
|
+
# @param [Integer] days_since_custom_time Represents the number of
|
114
|
+
# days elapsed since the user-specified timestamp set on an object.
|
115
|
+
# The condition is satisfied if the days elapsed is at least this
|
116
|
+
# number. If no custom timestamp is specified on an object, the
|
117
|
+
# condition does not apply.
|
118
|
+
# @param [Integer] days_since_noncurrent_time Represents the number of
|
119
|
+
# days elapsed since the noncurrent timestamp of an object. The
|
120
|
+
# condition is satisfied if the days elapsed is at least this number.
|
121
|
+
# The value of the field must be a nonnegative integer. If it's zero,
|
122
|
+
# the object version will become eligible for Lifecycle action as
|
123
|
+
# soon as it becomes noncurrent. Relevant only for versioning-enabled
|
124
|
+
# buckets. (See {Bucket#versioning?})
|
108
125
|
# @param [Boolean] is_live Relevant only for versioned files. If the
|
109
126
|
# value is `true`, this condition matches live files; if the value
|
110
127
|
# is `false`, it matches archived files.
|
111
128
|
# @param [String,Symbol,Array<String,Symbol>] matches_storage_class
|
112
129
|
# Files having any of the storage classes specified by this
|
113
|
-
# condition will be matched. Values include `
|
114
|
-
# `
|
115
|
-
# `DURABLE_REDUCED_AVAILABILITY
|
116
|
-
# symbols and lower-case
|
130
|
+
# condition will be matched. Values include `STANDARD`, `NEARLINE`,
|
131
|
+
# `COLDLINE`, and `ARCHIVE`. `REGIONAL`,`MULTI_REGIONAL`, and
|
132
|
+
# `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
|
133
|
+
# classes. Arguments will be converted from symbols and lower-case
|
134
|
+
# to upper-case strings.
|
135
|
+
# @param [String,Date] noncurrent_time_before A date in RFC 3339 format
|
136
|
+
# with only the date part (for instance, "2013-01-15"). This condition
|
137
|
+
# is satisfied when the noncurrent time on an object is before this
|
138
|
+
# date in UTC. This condition is relevant only for versioned objects.
|
117
139
|
# @param [Integer] num_newer_versions Relevant only for versioned
|
118
140
|
# files. If the value is N, this condition is satisfied when there
|
119
141
|
# are at least N versions (including the live version) newer than
|
120
142
|
# this version of the file.
|
143
|
+
# @param [Array<String,Symbol>] matches_prefix
|
144
|
+
# Files having their name with the specified list of prefixs will be matched.
|
145
|
+
# Arguments will be converted from symbols to strings.
|
146
|
+
# @param [Array<String,Symbol>] matches_suffix
|
147
|
+
# Files having their name with the specified list of suffixes will be matched.
|
148
|
+
# Arguments will be converted from symbols to strings.
|
121
149
|
#
|
122
150
|
# @example
|
123
151
|
# require "google/cloud/storage"
|
@@ -128,20 +156,37 @@ module Google
|
|
128
156
|
# b.lifecycle.add_set_storage_class_rule "COLDLINE", age: 10
|
129
157
|
# end
|
130
158
|
#
|
131
|
-
def add_set_storage_class_rule storage_class,
|
132
|
-
|
159
|
+
def add_set_storage_class_rule storage_class,
|
160
|
+
age: nil,
|
161
|
+
created_before: nil,
|
162
|
+
custom_time_before: nil,
|
163
|
+
days_since_custom_time: nil,
|
164
|
+
days_since_noncurrent_time: nil,
|
165
|
+
is_live: nil,
|
133
166
|
matches_storage_class: nil,
|
134
|
-
|
135
|
-
|
167
|
+
noncurrent_time_before: nil,
|
168
|
+
num_newer_versions: nil,
|
169
|
+
matches_prefix: nil,
|
170
|
+
matches_suffix: nil
|
171
|
+
push Rule.new(
|
136
172
|
"SetStorageClass",
|
137
173
|
storage_class: storage_class_for(storage_class),
|
138
|
-
age: age,
|
174
|
+
age: age,
|
175
|
+
created_before: created_before,
|
176
|
+
custom_time_before: custom_time_before,
|
177
|
+
days_since_custom_time: days_since_custom_time,
|
178
|
+
days_since_noncurrent_time: days_since_noncurrent_time,
|
179
|
+
is_live: is_live,
|
139
180
|
matches_storage_class: storage_class_for(matches_storage_class),
|
140
|
-
|
181
|
+
noncurrent_time_before: noncurrent_time_before,
|
182
|
+
num_newer_versions: num_newer_versions,
|
183
|
+
matches_prefix: Array(matches_prefix),
|
184
|
+
matches_suffix: Array(matches_suffix)
|
185
|
+
)
|
141
186
|
end
|
142
187
|
|
143
188
|
##
|
144
|
-
# Adds a
|
189
|
+
# Adds a Delete lifecycle rule to the Object Lifecycle
|
145
190
|
# Management rules for a bucket.
|
146
191
|
#
|
147
192
|
# @see https://cloud.google.com/storage/docs/lifecycle Object
|
@@ -155,19 +200,45 @@ module Google
|
|
155
200
|
# only the date part (for instance, "2013-01-15"). This condition is
|
156
201
|
# satisfied when a file is created before midnight of the specified
|
157
202
|
# date in UTC.
|
203
|
+
# @param [String,Date] custom_time_before A date in RFC 3339 format with
|
204
|
+
# only the date part (for instance, "2013-01-15"). This condition is
|
205
|
+
# satisfied when the custom time on an object is before this date in UTC.
|
206
|
+
# @param [Integer] days_since_custom_time Represents the number of
|
207
|
+
# days elapsed since the user-specified timestamp set on an object.
|
208
|
+
# The condition is satisfied if the days elapsed is at least this
|
209
|
+
# number. If no custom timestamp is specified on an object, the
|
210
|
+
# condition does not apply.
|
211
|
+
# @param [Integer] days_since_noncurrent_time Represents the number of
|
212
|
+
# days elapsed since the noncurrent timestamp of an object. The
|
213
|
+
# condition is satisfied if the days elapsed is at least this number.
|
214
|
+
# The value of the field must be a nonnegative integer. If it's zero,
|
215
|
+
# the object version will become eligible for Lifecycle action as
|
216
|
+
# soon as it becomes noncurrent. Relevant only for versioning-enabled
|
217
|
+
# buckets. (See {Bucket#versioning?})
|
158
218
|
# @param [Boolean] is_live Relevant only for versioned files. If the
|
159
219
|
# value is `true`, this condition matches live files; if the value
|
160
220
|
# is `false`, it matches archived files.
|
161
221
|
# @param [String,Symbol,Array<String,Symbol>] matches_storage_class
|
162
222
|
# Files having any of the storage classes specified by this
|
163
|
-
# condition will be matched. Values include `
|
164
|
-
# `
|
165
|
-
# `DURABLE_REDUCED_AVAILABILITY
|
166
|
-
# symbols and lower-case
|
223
|
+
# condition will be matched. Values include `STANDARD`, `NEARLINE`,
|
224
|
+
# `COLDLINE`, and `ARCHIVE`. `REGIONAL`,`MULTI_REGIONAL`, and
|
225
|
+
# `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
|
226
|
+
# classes. Arguments will be converted from symbols and lower-case
|
227
|
+
# to upper-case strings.
|
228
|
+
# @param [String,Date] noncurrent_time_before A date in RFC 3339 format
|
229
|
+
# with only the date part (for instance, "2013-01-15"). This condition
|
230
|
+
# is satisfied when the noncurrent time on an object is before this
|
231
|
+
# date in UTC. This condition is relevant only for versioned objects.
|
167
232
|
# @param [Integer] num_newer_versions Relevant only for versioned
|
168
233
|
# files. If the value is N, this condition is satisfied when there
|
169
234
|
# are at least N versions (including the live version) newer than
|
170
235
|
# this version of the file.
|
236
|
+
# @param [Array<String,Symbol>] matches_prefix
|
237
|
+
# Files having their name with the specified list of prefixs will be matched.
|
238
|
+
# Arguments will be converted from symbols to strings.
|
239
|
+
# @param [Array<String,Symbol>] matches_suffix
|
240
|
+
# Files having their name with the specified list of suffixes will be matched.
|
241
|
+
# Arguments will be converted from symbols to strings.
|
171
242
|
#
|
172
243
|
# @example
|
173
244
|
# require "google/cloud/storage"
|
@@ -178,14 +249,71 @@ module Google
|
|
178
249
|
# b.lifecycle.add_delete_rule age: 30, is_live: false
|
179
250
|
# end
|
180
251
|
#
|
181
|
-
def add_delete_rule age: nil,
|
252
|
+
def add_delete_rule age: nil,
|
253
|
+
created_before: nil,
|
254
|
+
custom_time_before: nil,
|
255
|
+
days_since_custom_time: nil,
|
256
|
+
days_since_noncurrent_time: nil,
|
257
|
+
is_live: nil,
|
182
258
|
matches_storage_class: nil,
|
183
|
-
|
184
|
-
|
259
|
+
noncurrent_time_before: nil,
|
260
|
+
num_newer_versions: nil,
|
261
|
+
matches_prefix: nil,
|
262
|
+
matches_suffix: nil
|
263
|
+
push Rule.new(
|
185
264
|
"Delete",
|
186
|
-
age: age,
|
265
|
+
age: age,
|
266
|
+
created_before: created_before,
|
267
|
+
custom_time_before: custom_time_before,
|
268
|
+
days_since_custom_time: days_since_custom_time,
|
269
|
+
days_since_noncurrent_time: days_since_noncurrent_time,
|
270
|
+
is_live: is_live,
|
187
271
|
matches_storage_class: storage_class_for(matches_storage_class),
|
188
|
-
|
272
|
+
noncurrent_time_before: noncurrent_time_before,
|
273
|
+
num_newer_versions: num_newer_versions,
|
274
|
+
matches_prefix: Array(matches_prefix),
|
275
|
+
matches_suffix: Array(matches_suffix)
|
276
|
+
)
|
277
|
+
end
|
278
|
+
|
279
|
+
##
|
280
|
+
# Adds a AbortIncompleteMultipartUpload lifecycle rule to the Object Lifecycle
|
281
|
+
# Management rules for a bucket.
|
282
|
+
#
|
283
|
+
# @see https://cloud.google.com/storage/docs/lifecycle Object
|
284
|
+
# Lifecycle Management
|
285
|
+
# @see https://cloud.google.com/storage/docs/managing-lifecycles
|
286
|
+
# Managing Object Lifecycles
|
287
|
+
#
|
288
|
+
# @param [Integer] age The age of a file (in days). This condition is
|
289
|
+
# satisfied when a file reaches the specified age.
|
290
|
+
# @param [Array<String,Symbol>] matches_prefix
|
291
|
+
# Files having their name with the specified list of prefixs will be matched.
|
292
|
+
# Arguments will be converted from symbols to strings.
|
293
|
+
# @param [Array<String,Symbol>] matches_suffix
|
294
|
+
# Files having their name with the specified list of suffixes will be matched.
|
295
|
+
# Arguments will be converted from symbols to strings.
|
296
|
+
#
|
297
|
+
# @example
|
298
|
+
# require "google/cloud/storage"
|
299
|
+
#
|
300
|
+
# storage = Google::Cloud::Storage.new
|
301
|
+
#
|
302
|
+
# bucket = storage.create_bucket "my-bucket" do |b|
|
303
|
+
# b.lifecycle.add_abort_incomplete_multipart_upload_rule age: 10,
|
304
|
+
# matches_prefix: ["images/"],
|
305
|
+
# matches_suffix: [".pdf"]
|
306
|
+
# end
|
307
|
+
#
|
308
|
+
def add_abort_incomplete_multipart_upload_rule age: nil,
|
309
|
+
matches_prefix: nil,
|
310
|
+
matches_suffix: nil
|
311
|
+
push Rule.new(
|
312
|
+
"AbortIncompleteMultipartUpload",
|
313
|
+
age: age,
|
314
|
+
matches_prefix: Array(matches_prefix),
|
315
|
+
matches_suffix: Array(matches_suffix)
|
316
|
+
)
|
189
317
|
end
|
190
318
|
|
191
319
|
# @private
|
@@ -229,17 +357,40 @@ module Google
|
|
229
357
|
# action. Required only if the action is `SetStorageClass`.
|
230
358
|
# @attr [Integer] age The age of a file (in days). This condition is
|
231
359
|
# satisfied when a file reaches the specified age.
|
232
|
-
# @attr [String,Date] created_before A date in RFC 3339 format with
|
360
|
+
# @attr [String,Date,nil] created_before A date in RFC 3339 format with
|
233
361
|
# only the date part (for instance, "2013-01-15"). This condition is
|
234
362
|
# satisfied when a file is created before midnight of the specified
|
235
|
-
# date in UTC.
|
363
|
+
# date in UTC. When returned by the service, a non-empty value will
|
364
|
+
# always be a Date object.
|
365
|
+
# @attr [String,Date,nil] custom_time_before A date in RFC 3339 format with
|
366
|
+
# only the date part (for instance, "2013-01-15"). This condition is
|
367
|
+
# satisfied when the custom time on an object is before this date in UTC.
|
368
|
+
# @attr [Integer,nil] days_since_custom_time Represents the number of
|
369
|
+
# days elapsed since the user-specified timestamp set on an object.
|
370
|
+
# The condition is satisfied if the days elapsed is at least this
|
371
|
+
# number. If no custom timestamp is specified on an object, the
|
372
|
+
# condition does not apply.
|
373
|
+
# @attr [Integer] days_since_noncurrent_time Represents the number of
|
374
|
+
# days elapsed since the noncurrent timestamp of an object. The
|
375
|
+
# condition is satisfied if the days elapsed is at least this number.
|
376
|
+
# The value of the field must be a nonnegative integer. If it's zero,
|
377
|
+
# the object version will become eligible for Lifecycle action as
|
378
|
+
# soon as it becomes noncurrent. Relevant only for versioning-enabled
|
379
|
+
# buckets. (See {Bucket#versioning?})
|
236
380
|
# @attr [Boolean] is_live Relevant only for versioned files. If the
|
237
381
|
# value is `true`, this condition matches live files; if the value
|
238
382
|
# is `false`, it matches archived files.
|
239
383
|
# @attr [Array<String>] matches_storage_class Files having any of the
|
240
384
|
# storage classes specified by this condition will be matched.
|
241
|
-
# Values include `
|
242
|
-
# `
|
385
|
+
# Values include `STANDARD`, `NEARLINE`, `COLDLINE`, and `ARCHIVE`.
|
386
|
+
# `REGIONAL`, `MULTI_REGIONAL`, and `DURABLE_REDUCED_AVAILABILITY`
|
387
|
+
# are supported as legacy storage classes.
|
388
|
+
# @attr [String,Date,nil] noncurrent_time_before A date in RFC 3339 format
|
389
|
+
# with only the date part (for instance, "2013-01-15"). This condition
|
390
|
+
# is satisfied when the noncurrent time on an object is before this
|
391
|
+
# date in UTC. This condition is relevant only for versioned objects.
|
392
|
+
# When returned by the service, a non-empty value will always be a
|
393
|
+
# Date object.
|
243
394
|
# @attr [Integer] num_newer_versions Relevant only for versioned
|
244
395
|
# files. If the value is N, this condition is satisfied when there
|
245
396
|
# are at least N versions (including the live version) newer than
|
@@ -256,7 +407,9 @@ module Google
|
|
256
407
|
# rule.action #=> "SetStorageClass"
|
257
408
|
# rule.storage_class #=> "COLDLINE"
|
258
409
|
# rule.age #=> 10
|
259
|
-
# rule.matches_storage_class #=> ["
|
410
|
+
# rule.matches_storage_class #=> ["STANDARD", "NEARLINE"]
|
411
|
+
# rule.matches_prefix #=> ["myprefix/foo"]
|
412
|
+
# rule.matches_suffix #=> [".jpg", ".png"]
|
260
413
|
#
|
261
414
|
# @example Updating the bucket's lifecycle rules in a block.
|
262
415
|
# require "google/cloud/storage"
|
@@ -282,28 +435,65 @@ module Google
|
|
282
435
|
# end
|
283
436
|
#
|
284
437
|
class Rule
|
285
|
-
attr_accessor :action
|
286
|
-
|
438
|
+
attr_accessor :action
|
439
|
+
attr_accessor :storage_class
|
440
|
+
attr_accessor :age
|
441
|
+
attr_accessor :created_before
|
442
|
+
attr_accessor :custom_time_before
|
443
|
+
attr_accessor :days_since_custom_time
|
444
|
+
attr_accessor :days_since_noncurrent_time
|
445
|
+
attr_accessor :is_live
|
446
|
+
attr_accessor :matches_storage_class
|
447
|
+
attr_accessor :noncurrent_time_before
|
448
|
+
attr_accessor :num_newer_versions
|
449
|
+
attr_accessor :matches_prefix
|
450
|
+
attr_accessor :matches_suffix
|
287
451
|
|
288
452
|
# @private
|
289
|
-
def initialize action,
|
290
|
-
|
291
|
-
|
453
|
+
def initialize action,
|
454
|
+
storage_class: nil,
|
455
|
+
age: nil,
|
456
|
+
created_before: nil,
|
457
|
+
custom_time_before: nil,
|
458
|
+
days_since_custom_time: nil,
|
459
|
+
days_since_noncurrent_time: nil,
|
460
|
+
is_live: nil,
|
461
|
+
matches_storage_class: nil,
|
462
|
+
noncurrent_time_before: nil,
|
463
|
+
num_newer_versions: nil,
|
464
|
+
matches_prefix: nil,
|
465
|
+
matches_suffix: nil
|
292
466
|
@action = action
|
293
467
|
@storage_class = storage_class
|
294
468
|
@age = age
|
295
469
|
@created_before = created_before
|
470
|
+
@custom_time_before = custom_time_before
|
471
|
+
@days_since_custom_time = days_since_custom_time
|
472
|
+
@days_since_noncurrent_time = days_since_noncurrent_time
|
296
473
|
@is_live = is_live
|
297
474
|
@matches_storage_class = Array(matches_storage_class)
|
475
|
+
@noncurrent_time_before = noncurrent_time_before
|
298
476
|
@num_newer_versions = num_newer_versions
|
477
|
+
@matches_prefix = Array(matches_prefix)
|
478
|
+
@matches_suffix = Array(matches_suffix)
|
299
479
|
end
|
300
480
|
|
301
481
|
# @private
|
302
482
|
# @return [Google::Apis::StorageV1::Bucket::Lifecycle]
|
303
483
|
def to_gapi
|
304
|
-
condition = condition_gapi(
|
305
|
-
|
306
|
-
|
484
|
+
condition = condition_gapi(
|
485
|
+
age,
|
486
|
+
created_before,
|
487
|
+
custom_time_before,
|
488
|
+
days_since_custom_time,
|
489
|
+
days_since_noncurrent_time,
|
490
|
+
is_live,
|
491
|
+
matches_storage_class,
|
492
|
+
noncurrent_time_before,
|
493
|
+
num_newer_versions,
|
494
|
+
matches_prefix,
|
495
|
+
matches_suffix
|
496
|
+
)
|
307
497
|
Google::Apis::StorageV1::Bucket::Lifecycle::Rule.new(
|
308
498
|
action: action_gapi(action, storage_class),
|
309
499
|
condition: condition
|
@@ -313,19 +503,35 @@ module Google
|
|
313
503
|
# @private
|
314
504
|
def action_gapi action, storage_class
|
315
505
|
Google::Apis::StorageV1::Bucket::Lifecycle::Rule::Action.new(
|
316
|
-
type: action,
|
506
|
+
type: action,
|
507
|
+
storage_class: storage_class
|
317
508
|
)
|
318
509
|
end
|
319
510
|
|
320
511
|
# @private
|
321
|
-
def condition_gapi age,
|
322
|
-
|
512
|
+
def condition_gapi age,
|
513
|
+
created_before,
|
514
|
+
custom_time_before,
|
515
|
+
days_since_custom_time,
|
516
|
+
days_since_noncurrent_time,
|
517
|
+
is_live,
|
518
|
+
matches_storage_class,
|
519
|
+
noncurrent_time_before,
|
520
|
+
num_newer_versions,
|
521
|
+
matches_prefix,
|
522
|
+
matches_suffix
|
323
523
|
Google::Apis::StorageV1::Bucket::Lifecycle::Rule::Condition.new(
|
324
524
|
age: age,
|
325
525
|
created_before: created_before,
|
526
|
+
custom_time_before: custom_time_before,
|
527
|
+
days_since_custom_time: days_since_custom_time,
|
528
|
+
days_since_noncurrent_time: days_since_noncurrent_time,
|
326
529
|
is_live: is_live,
|
327
530
|
matches_storage_class: Array(matches_storage_class),
|
328
|
-
|
531
|
+
noncurrent_time_before: noncurrent_time_before,
|
532
|
+
num_newer_versions: num_newer_versions,
|
533
|
+
matches_prefix: Array(matches_prefix),
|
534
|
+
matches_suffix: Array(matches_suffix)
|
329
535
|
)
|
330
536
|
end
|
331
537
|
|
@@ -334,12 +540,21 @@ module Google
|
|
334
540
|
def self.from_gapi gapi
|
335
541
|
action = gapi.action
|
336
542
|
c = gapi.condition
|
337
|
-
new
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
543
|
+
new(
|
544
|
+
action.type,
|
545
|
+
storage_class: action.storage_class,
|
546
|
+
age: c.age,
|
547
|
+
created_before: c.created_before,
|
548
|
+
custom_time_before: c.custom_time_before,
|
549
|
+
days_since_custom_time: c.days_since_custom_time,
|
550
|
+
days_since_noncurrent_time: c.days_since_noncurrent_time,
|
551
|
+
is_live: c.is_live,
|
552
|
+
matches_storage_class: c.matches_storage_class,
|
553
|
+
noncurrent_time_before: c.noncurrent_time_before,
|
554
|
+
num_newer_versions: c.num_newer_versions,
|
555
|
+
matches_prefix: c.matches_prefix,
|
556
|
+
matches_suffix: c.matches_suffix
|
557
|
+
)
|
343
558
|
end
|
344
559
|
|
345
560
|
# @private
|