Как переименовать файл с помощью Google Drive API для Ruby?


Это кажется основным вопросом, но я уже на второй день: (

Я использую Google Drive Ruby Api здесь: https://github.com/google/google-api-ruby-client но основные примеры файлов в README, по-видимому, сильно устарели. В частности, вызовы Drive.update_file не принимают ничего похожего на показанные параметры.

Пока что я могу получить авторизованный сервис DriveService:

drive = Google::Apis::DriveV3::DriveService.new
drive.authorization = Google::Auth.get_application_default(['https://www.googleapis.com/auth/drive'])

Я могу получить файл:

file_id = 'string-of-stuff'
file = drive.get_file file_id

Я могу установить атрибуты на объект File, который выглядит нормально:

file.update!(name: 'My new name')
Но я не могу понять, как заставить обновление / патч действительно работать после этого. README предлагает drive.update_file(file), но это просто взрывается с ошибкой типа.
TypeError: Can't convert Google::Apis::DriveV3::File into String or Array.

Глядя на код, #update_file фактически ожидает file_id в качестве первого парама.

Я пробовал всевозможные вариации, основанные на README, например:

drive.update_file(file_id, {name: 'New name'})

Или:

drive.update_file(file_id, {title: 'New name'})

Или (глядя на код):

drive.update_file(file_id, fields: {title: 'New name'})

Или даже:

drive.update_file(file_id, file)

Который взрывается с:

Google::Apis::ClientError: fieldNotWritable: The resource body includes fields which are not directly writable.

Но ничего не работает для меня. Кто-нибудь пользовался этой библиотекой? Все остальное кажется довольно простым, но это просто трудно.

1 2

1 ответ:

Ну, после гораздо большего количества проб и ошибок, единственный способ, которым этот API работает с новым File объект. Если вы используете get_file для получения вашего File, то в конечном итоге вы получаете объект, который имеет неписаное поле id.

Итак, это - и только это-кажется, работает:

drive.update_file(file_id, Google::Apis::DriveV3::File.new(name: name))

Вздох.