Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
62c6d40
functionality working
shubhangi-google Feb 13, 2025
b02f881
adding missing config
shubhangi-google Feb 27, 2025
4a6d3ca
fixing unit tests
shubhangi-google Feb 27, 2025
bb4d94d
fixing lint issues
shubhangi-google Feb 27, 2025
a8a5a36
changing storage_cleint approach
shubhangi-google Mar 10, 2025
7b15578
fix linter
shubhangi-google Mar 10, 2025
238c190
code refactoring
shubhangi-google Mar 13, 2025
756a6ae
wip - implementation 2
shubhangi-google Apr 21, 2025
3dcc3ce
changes working
shubhangi-google Apr 24, 2025
128a8ed
adding test cases
shubhangi-google Apr 30, 2025
c313da6
fix typo
shubhangi-google Apr 30, 2025
9b06029
removing unwanted change
shubhangi-google Apr 30, 2025
77068a5
removing unwanted changes
shubhangi-google Apr 30, 2025
b39dca7
rewritting delete upload
shubhangi-google May 7, 2025
e136db8
Update google-cloud-storage/lib/google/cloud/storage/bucket.rb
shubhangi-google May 21, 2025
2e0294c
chnaging method params
shubhangi-google Jun 11, 2025
86378a6
addressing comments
shubhangi-google Aug 25, 2025
2835d79
removing space
shubhangi-google Aug 25, 2025
d3b9da8
resolving syntax
shubhangi-google Aug 25, 2025
c9c9223
Update bucket.rb
shubhangi-google Aug 25, 2025
61350b0
adding returntype
shubhangi-google Aug 25, 2025
b1331c7
adding returntype
shubhangi-google Aug 25, 2025
7e1a89f
modifying test
shubhangi-google Aug 25, 2025
8d60e4c
fixing rubocop issue in toys
shubhangi-google Aug 26, 2025
c646691
update storage_v1 gem version
shubhangi-google Aug 26, 2025
6f1fb62
updating test cases
shubhangi-google Aug 29, 2025
90b87de
updating documentation
shubhangi-google Aug 31, 2025
9c627c8
fix rubocop issue
shubhangi-google Aug 31, 2025
b4f9b69
Update google-cloud-storage/lib/google/cloud/storage/bucket.rb
shubhangi-google Sep 1, 2025
deee402
Update google-cloud-storage/lib/google/cloud/storage/bucket.rb
shubhangi-google Sep 1, 2025
25c3b97
Update google-cloud-storage.gemspec
shubhangi-google Sep 1, 2025
0b4cd36
add test case
shubhangi-google Sep 12, 2025
d14e180
Update bucket_test.rb
shubhangi-google Sep 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .toys/batch-review-legacy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
/\.release-please-manifest\.json$/,
/\/CHANGELOG\.md$/,
/\/version\.rb$/,
/\/snippets\/snippet_metadata_[\w\.]+\.json$/,
/\/snippets\/snippet_metadata_[\w.]+\.json$/,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we making these changes?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

was getting rubocop failure due to this

],
},
"releases-wrappers" => {
Expand All @@ -62,7 +62,7 @@
/\.release-please-manifest\.json$/,
/\/CHANGELOG\.md$/,
/\/version\.rb$/,
/\/snippets\/snippet_metadata_[\w\.]+\.json$/,
/\/snippets\/snippet_metadata_[\w.]+\.json$/,
],
},
}.freeze
Expand Down
2 changes: 1 addition & 1 deletion .toys/batch-review.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
batch_reviewer.define_preset "releases", based_on: :basic_releases do |preset|
preset.message << :pr_title_number
preset.diff_expectations.expect name: "snippet metadata" do |expect|
expect.change_type(:changed).path_pattern(/\/snippets\/snippet_metadata_[\w\.]+\.json$/)
expect.change_type(:changed).path_pattern(/\/snippets\/snippet_metadata_[\w.]+\.json$/)
end
preset.diff_expectations.expect name: "repo metadata" do |expect|
expect.change_type(:changed).path_pattern(/\/\.repo-metadata\.json$/)
Expand Down
45 changes: 45 additions & 0 deletions google-cloud-storage/lib/google/cloud/storage/bucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,30 @@ def default_kms_key= new_default_kms_key
patch_gapi! :encryption
end

##
# Restart resumable upload
# @param [String, ::File] file Path of the file on the filesystem to
# upload. Can be a File object, or File-like object such as StringIO.
# @param [String] upload_id Unique Id of a resumable upload
#
# @return [Google::Apis::StorageV1::Object, Boolean]
# The object metadata on success, or 'false' request is not completed.
#
# @example
# require "google/cloud/storage"
#
# storage = Google::Cloud::Storage.new
#
# bucket = storage.bucket "my-bucket"
# bucket.restart_resumable_upload file, upload_id

def restart_resumable_upload file, upload_id
ensure_service!
ensure_io_or_file_exists! file
raise ArgumentError, "Upload Id missing" unless upload_id
service.restart_resumable_upload name, file, upload_id
end

##
# The period of time (in seconds) that files in the bucket must be
# retained, and cannot be deleted, overwritten, or archived.
Expand Down Expand Up @@ -1410,6 +1434,27 @@ def delete if_metageneration_match: nil, if_metageneration_not_match: nil
user_project: user_project
end

##
# Delete resumable upload
# @param [String] upload_id Unique Id of a resumable upload
#
# @return [Boolean] Returns `true` if the resumable upload was deleted,
# 'false' if the request is not completed.
#
# @example
# require "google/cloud/storage"
#
# storage = Google::Cloud::Storage.new
#
# bucket = storage.bucket "my-bucket"
# bucket.delete_resumable_upload upload_id

def delete_resumable_upload upload_id
ensure_service!
raise ArgumentError, "Upload Id missing" unless upload_id
service.delete_resumable_upload name, upload_id
end

##
# Retrieves a list of files matching the criteria.
#
Expand Down
12 changes: 12 additions & 0 deletions google-cloud-storage/lib/google/cloud/storage/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,18 @@ def delete_file bucket_name,
end
end

def restart_resumable_upload bucket_name, source, upload_id, options: {}
execute do
service.restart_resumable_upload bucket_name, source, upload_id, options: options
end
end

def delete_resumable_upload bucket_name, upload_id, options: {}
execute do
service.delete_resumable_upload bucket_name, upload_id, options: options
end
end

##
# Restore soft deleted bucket
def restore_bucket bucket_name,
Expand Down
106 changes: 106 additions & 0 deletions google-cloud-storage/test/google/cloud/storage/bucket_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1408,6 +1408,112 @@
end
end

it "restarts a resumable upload with upload_id" do
new_file_name = random_file_path
upload_id = "TEST_ID"

Tempfile.open ["google-cloud", ".txt"] do |tmpfile|
tmpfile.write "Hello world"
tmpfile.rewind
mock = Minitest::Mock.new
expected_return_value = create_file_gapi(bucket.name, new_file_name)
mock.expect :restart_resumable_upload, expected_return_value,
[bucket.name, tmpfile, upload_id],
**resumable_upload_args(options: {})
bucket.service.mocked_service = mock
returned_value= bucket.restart_resumable_upload tmpfile, upload_id
assert_equal expected_return_value, returned_value
mock.verify
end
end

it "raises ArgumentError if anyone or both arguments are not provided to restart_resumable_upload" do
upload_id = "TEST_ID"

Tempfile.open ["google-cloud", ".txt"] do |tmpfile|
tmpfile.write "Hello world"
tmpfile.rewind
error = _ { bucket.restart_resumable_upload }.must_raise ArgumentError
assert_match "wrong number of arguments", error.message

error = _ { bucket.restart_resumable_upload upload_id }.must_raise ArgumentError
assert_match "wrong number of arguments", error.message

error = _ { bucket.restart_resumable_upload tmpfile }.must_raise ArgumentError
assert_match "wrong number of arguments", error.message
end
end

it "raises ArgumentError if upload_id as nil is provided to restart_resumable_upload" do
upload_id = nil

Tempfile.open ["google-cloud", ".txt"] do |tmpfile|
tmpfile.write "Hello world"
tmpfile.rewind
error = _ { bucket.restart_resumable_upload tmpfile, upload_id }.must_raise ArgumentError
assert_match "Upload Id missing", error.message
end
end

it "returns false if restart_resumable_upload is provided wrong upload_id" do
new_file_name = random_file_path
upload_id = "wrong_TEST_ID"

Tempfile.open ["google-cloud", ".txt"] do |tmpfile|
tmpfile.write "Hello world"
tmpfile.rewind
mock = Minitest::Mock.new
expected_return_value = false
mock.expect :restart_resumable_upload, expected_return_value,
[bucket.name, tmpfile, upload_id],
**resumable_upload_args(options: {})
bucket.service.mocked_service = mock
returned_value= bucket.restart_resumable_upload tmpfile, upload_id
assert_equal expected_return_value, returned_value
mock.verify
end
end


it "deletes a resumable upload with upload_id" do
upload_id = "TEST_ID"

mock = Minitest::Mock.new
expected_return_value = true
mock.expect :delete_resumable_upload, expected_return_value,
[bucket.name, upload_id],
**resumable_upload_args(options: {})
bucket.service.mocked_service = mock
returned_value = bucket.delete_resumable_upload upload_id
assert_equal expected_return_value, returned_value
mock.verify
end

it "returns false if delete_resumable_upload is provided wrong upload_id" do
upload_id = "wrong_TEST_ID"

mock = Minitest::Mock.new
expected_return_value = false
mock.expect :delete_resumable_upload, expected_return_value,
[bucket.name, upload_id],
**resumable_upload_args(options: {})
bucket.service.mocked_service = mock
returned_value = bucket.delete_resumable_upload upload_id
assert_equal expected_return_value, returned_value
mock.verify
end

it "raises ArgumentError if upload_id is not provided to delete_resumable_upload" do
error = _ { bucket.delete_resumable_upload }.must_raise ArgumentError
assert_match "wrong number of arguments", error.message
end

it "raises ArgumentError if upload_id as nil is provided to delete_resumable_upload" do
upload_id = nil
error = _ { bucket.delete_resumable_upload upload_id }.must_raise ArgumentError
assert_match "Upload Id missing", error.message
end

def create_file_gapi bucket=nil, name = nil
Google::Apis::StorageV1::Object.from_json random_file_hash(bucket, name).to_json
end
Expand Down
6 changes: 6 additions & 0 deletions google-cloud-storage/test/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,12 @@ def insert_object_args name: nil,
}
end

def resumable_upload_args options: {}
{
options: options
}
end

def get_object_args generation: nil,
if_generation_match: nil,
if_generation_not_match: nil,
Expand Down
Loading