Skip to content

Commit 5bc8902

Browse files
committed
feat(storage-control): add Ruby delete_folder_recursive sample
Adds a Ruby code sample demonstrating hierarchical namespace recursive folder delete. Fixes: b/530059259 [Generated-by: AI]
1 parent a8bf081 commit 5bc8902

2 files changed

Lines changed: 69 additions & 0 deletions

File tree

google-cloud-storage-control/samples/acceptance/storage_control_folders_test.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
require_relative "../storage_control_list_folders"
1919
require_relative "../storage_control_rename_folder"
2020
require_relative "../storage_control_delete_folder"
21+
require_relative "../storage_control_delete_folder_recursive"
2122

2223
describe "Storage Control Folders" do
2324
let(:bucket_name) { random_bucket_name }
@@ -64,5 +65,33 @@
6465
assert_output "Deleted folder: #{new_folder_name}\n" do
6566
delete_folder bucket_name: bucket_name, folder_name: new_folder_name
6667
end
68+
69+
# create parent folder for recursive delete
70+
capture_io do
71+
create_folder bucket_name: bucket_name, folder_name: folder_name
72+
end
73+
74+
# create a child folder inside parent folder
75+
child_folder_name = "#{folder_name}/child-folder"
76+
capture_io do
77+
create_folder bucket_name: bucket_name, folder_name: child_folder_name
78+
end
79+
80+
# delete parent folder recursively
81+
begin
82+
assert_output "Deleted folder recursively: #{folder_name}\n" do
83+
delete_folder_recursive bucket_name: bucket_name, folder_name: folder_name
84+
end
85+
rescue Minitest::UnexpectedError => e
86+
is_invalid_arg = e.error.is_a? Google::Cloud::InvalidArgumentError
87+
is_not_enabled = e.error.message.include? "Recursive folder delete is not enabled for this bucket"
88+
raise e unless is_invalid_arg && is_not_enabled
89+
90+
skip "Skipping recursive delete test because the feature is not enabled for this bucket."
91+
rescue Google::Cloud::InvalidArgumentError => e
92+
raise e unless e.message.include? "Recursive folder delete is not enabled for this bucket"
93+
94+
skip "Skipping recursive delete test because the feature is not enabled for this bucket."
95+
end
6796
end
6897
end
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright 2026 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# [START storage_control_delete_folder_recursive]
16+
def delete_folder_recursive bucket_name:, folder_name:
17+
# The ID of your GCS bucket
18+
# bucket_name = "your-unique-bucket-name"
19+
#
20+
# Name of the folder you want to delete recursively
21+
# folder_name = "name-of-the-folder"
22+
23+
require "google/cloud/storage/control"
24+
25+
storage_control = Google::Cloud::Storage::Control.storage_control
26+
27+
# The storage folder path uses the global access pattern, in which the "_"
28+
# denotes this bucket exists in the global namespace.
29+
folder_path = storage_control.folder_path project: "_", bucket: bucket_name, folder: folder_name
30+
31+
request = Google::Cloud::Storage::Control::V2::DeleteFolderRecursiveRequest.new name: folder_path
32+
33+
result = storage_control.delete_folder_recursive request
34+
result.wait_until_done! timeout: 60
35+
36+
puts "Deleted folder recursively: #{folder_name}"
37+
end
38+
# [END storage_control_delete_folder_recursive]
39+
40+
delete_folder_recursive bucket_name: ARGV.shift if $PROGRAM_NAME == __FILE__

0 commit comments

Comments
 (0)