Skip to content

Commit aeb8329

Browse files
committed
feat(cloud-storage): support match_glob for Object.list
Introduce `match_glob` parameter to `Bucket.files, with required changes to the service method and storing instance variables for pagination in `File::List`. Updating gem to Ruby v2.7 as current supported version. More info at https://cloud.google.com/storage/docs/json_api/v1/objects/list
1 parent 9a97018 commit aeb8329

10 files changed

Lines changed: 136 additions & 86 deletions

File tree

.github/workflows/storage-retry-conformance-test-against-emulator.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
2727
- uses: ruby/setup-ruby@v1
2828
with:
29-
ruby-version: '2.6'
29+
ruby-version: '3.2'
3030
- run: ruby --version
3131
- run: bundle install
3232
- run: bundle exec rake conformance

google-cloud-storage/google-cloud-storage.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
1616
["OVERVIEW.md", "AUTHENTICATION.md", "LOGGING.md", "CONTRIBUTING.md", "TROUBLESHOOTING.md", "CHANGELOG.md", "CODE_OF_CONDUCT.md", "LICENSE", ".yardopts"]
1717
gem.require_paths = ["lib"]
1818

19-
gem.required_ruby_version = ">= 2.5"
19+
gem.required_ruby_version = ">= 2.7"
2020

2121
gem.add_dependency "google-cloud-core", "~> 1.6"
2222
gem.add_dependency "google-apis-iamcredentials_v1", "~> 0.1"

google-cloud-storage/lib/google/cloud/storage/bucket.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,9 @@ def delete if_metageneration_match: nil, if_metageneration_not_match: nil
12991299
# `prefixes` are omitted.
13001300
# @param [String] token A previously-returned page token representing
13011301
# part of the larger set of results to view.
1302+
# @param [String] match_glob A glob pattern used to filter results returned in items (e.g. `foo*bar`).
1303+
# The string value must be UTF-8 encoded. See:
1304+
# https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-object-glob
13021305
# @param [Integer] max Maximum number of items plus prefixes to return.
13031306
# As duplicate prefixes are omitted, fewer total results may be
13041307
# returned than requested. The default value of this parameter is
@@ -1334,14 +1337,17 @@ def delete if_metageneration_match: nil, if_metageneration_not_match: nil
13341337
# end
13351338
#
13361339
def files prefix: nil, delimiter: nil, token: nil, max: nil,
1337-
versions: nil
1340+
versions: nil, match_glob: nil
13381341
ensure_service!
13391342
gapi = service.list_files name, prefix: prefix, delimiter: delimiter,
13401343
token: token, max: max,
13411344
versions: versions,
1342-
user_project: user_project
1345+
user_project: user_project,
1346+
match_glob: match_glob
13431347
File::List.from_gapi gapi, service, name, prefix, delimiter, max,
1344-
versions, user_project: user_project
1348+
versions,
1349+
user_project: user_project,
1350+
match_glob: match_glob
13451351
end
13461352
alias find_files files
13471353

google-cloud-storage/lib/google/cloud/storage/file/list.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ def next
8383
token: @token,
8484
max: @max,
8585
versions: @versions,
86-
user_project: @user_project
86+
user_project: @user_project,
87+
match_glob: @match_glob
8788
File::List.from_gapi gapi, @service, @bucket, @prefix,
8889
@delimiter, @max, @versions,
89-
user_project: @user_project
90+
user_project: @user_project,
91+
match_glob: @match_glob
9092
end
9193

9294
##
@@ -163,7 +165,8 @@ def all request_limit: nil, &block
163165
# Google::Apis::StorageV1::Objects object.
164166
def self.from_gapi gapi_list, service, bucket = nil, prefix = nil,
165167
delimiter = nil, max = nil, versions = nil,
166-
user_project: nil
168+
user_project: nil,
169+
match_glob: nil
167170
files = new(Array(gapi_list.items).map do |gapi_object|
168171
File.from_gapi gapi_object, service, user_project: user_project
169172
end)
@@ -176,6 +179,7 @@ def self.from_gapi gapi_list, service, bucket = nil, prefix = nil,
176179
files.instance_variable_set :@max, max
177180
files.instance_variable_set :@versions, versions
178181
files.instance_variable_set :@user_project, user_project
182+
files.instance_variable_set :@match_glob, match_glob
179183
files
180184
end
181185

google-cloud-storage/lib/google/cloud/storage/service.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,13 +349,15 @@ def delete_notification bucket_name, notification_id, user_project: nil, options
349349
# Retrieves a list of files matching the criteria.
350350
def list_files bucket_name, delimiter: nil, max: nil, token: nil,
351351
prefix: nil, versions: nil, user_project: nil,
352+
match_glob: nil,
352353
options: {}
353354
execute do
354355
service.list_objects \
355356
bucket_name, delimiter: delimiter, max_results: max,
356357
page_token: token, prefix: prefix,
357358
versions: versions,
358359
user_project: user_project(user_project),
360+
match_glob: match_glob,
359361
options: options
360362
end
361363
end

0 commit comments

Comments
 (0)