class GoogleDrive::File
A file in Google Drive, including a Google Docs document/spreadsheet/presentation and a folder.
Use GoogleDrive::Session#files
or GoogleDrive::Session#file_by_title
to get this object.
In addition to the methods below, properties defined here are also available as attributes: developers.google.com/drive/v3/reference/files#resource
e.g.,
file.mime_type # ==> "text/plain"
Attributes
Wrapped Google::APIClient::Schema::Drive::V3::File object.
Public Class Methods
@api private
# File lib/google_drive/file.rb, line 29 def initialize(session, api_file) @session = session @api_file = api_file @acl = nil delegate_api_methods(self, @api_file, [:title]) end
Public Instance Methods
Returns GoogleDrive::Acl
object for the file.
With the object, you can see and modify people who can access the file. Modifications take effect immediately.
e.g.
# Dumps people who have access: for entry in file.acl p [entry.type, entry.email_address, entry.role] # => e.g. ["user", "example1@gmail.com", "owner"] end # Shares the file with new people: # NOTE: This sends email to the new people. file.acl.push( {type: "user", email_address: "example2@gmail.com", role: "reader"}) file.acl.push( {type: "user", email_address: "example3@gmail.com", role: "writer"}) # Changes the role of a person: file.acl[1].role = "writer" # Deletes an ACL entry: file.acl.delete(file.acl[1])
# File lib/google_drive/file.rb, line 249 def acl(params = {}) @acl = Acl.new(@session, self) if !@acl || params[:reload] @acl end
Deprecated ACL feed URL of the file.
# File lib/google_drive/file.rb, line 59 def acl_feed_url document_feed_url + '/acl' end
Content types you can specify in methods download_to_file
, download_to_string
, download_to_io.
This returns zero or one file type. You may be able to download the file in other formats using export_as_file
, export_as_string
, or export_to_io.
# File lib/google_drive/file.rb, line 88 def available_content_types api_file.web_content_link ? [api_file.mime_type] : [] end
Creates copy of this file with the given title.
# File lib/google_drive/file.rb, line 216 def copy(title, file_properties = {}) api_file = @session.drive_service.copy_file( id, { name: title }.merge(file_properties), fields: '*', supports_all_drives: true ) @session.wrap_api_file(api_file) end
If permanent
is false
, moves the file to the trash. If permanent
is true
, deletes the file permanently.
# File lib/google_drive/file.rb, line 194 def delete(permanent = false) if permanent @session.drive_service.delete_file(id, supports_all_drives: true) else @session.drive_service.update_file( id, { trashed: true }, supports_all_drives: true ) end nil end
URL of feed used in the deprecated document list feed API.
# File lib/google_drive/file.rb, line 53 def document_feed_url 'https://docs.google.com/feeds/default/private/full/' + CGI.escape(resource_id) end
Downloads the file to a local file. e.g.
file.download_to_file("/path/to/hoge.txt")
To export the file in other formats, use export_as_file.
# File lib/google_drive/file.rb, line 96 def download_to_file(path, params = {}) @session.drive_service.get_file( id, { download_dest: path, supports_all_drives: true }.merge(params) ) end
Downloads the file and writes it to io
.
To export the file in other formats, use export_to_io.
# File lib/google_drive/file.rb, line 115 def download_to_io(io, params = {}) @session.drive_service.get_file( id, **{ download_dest: io, supports_all_drives: true }.merge(params) ) end
Downloads the file and returns as a String.
To export the file in other formats, use export_as_string.
# File lib/google_drive/file.rb, line 106 def download_to_string(params = {}) sio = StringIO.new download_to_io(sio, params) sio.string end
Export the file to path
in content type format
. If format
is nil, it is guessed from the file name.
e.g.,
spreadsheet.export_as_file("/path/to/hoge.csv") spreadsheet.export_as_file("/path/to/hoge", "text/csv")
If you want to download the file in the original format, use download_to_file
instead.
# File lib/google_drive/file.rb, line 131 def export_as_file(path, format = nil) unless format format = EXT_TO_CONTENT_TYPE[::File.extname(path).downcase] unless format raise(ArgumentError, format("Cannot guess format from the file name: %s\n" \ 'Specify format argument explicitly.', path)) end end export_to_dest(path, format) end
Export the file as String in content type format
.
e.g.,
spreadsheet.export_as_string("text/csv")
If you want to download the file in the original format, use download_to_string
instead.
# File lib/google_drive/file.rb, line 150 def export_as_string(format) sio = StringIO.new export_to_dest(sio, format) sio.string end
Export the file to io
in content type format
.
If you want to download the file in the original format, use download_to_io
instead.
# File lib/google_drive/file.rb, line 160 def export_to_io(io, format) export_to_dest(io, format) end
URL to view/edit the file in a Web browser.
e.g. “docs.google.com/file/d/xxxx/edit”
# File lib/google_drive/file.rb, line 79 def human_url api_file.web_view_link end
# File lib/google_drive/file.rb, line 254 def inspect format("\#<%p id=%p title=%p>", self.class, id, title) end
Reloads file metadata such as title and acl.
# File lib/google_drive/file.rb, line 40 def reload_metadata @api_file = @session.drive_service.get_file( id, fields: '*', supports_all_drives: true ) @acl = Acl.new(@session, self) if @acl end
Renames title of the file.
# File lib/google_drive/file.rb, line 206 def rename(title) @session.drive_service.update_file( id, { name: title }, supports_all_drives: true ) nil end
Returns resource_type
+ “:” + id.
# File lib/google_drive/file.rb, line 48 def resource_id format('%s:%s', resource_type, id) end
The type of resourse. e.g. “document”, “spreadsheet”, “folder”
# File lib/google_drive/file.rb, line 64 def resource_type mime_type.slice(/^application\/vnd.google-apps.(.+)$/, 1) || 'file' end
Title of the file.
# File lib/google_drive/file.rb, line 69 def title(params = {}) reload_metadata if params[:reload] api_file.name end
Updates the file with the content of the local file.
e.g.
file.update_from_file("/path/to/hoge.txt")
# File lib/google_drive/file.rb, line 176 def update_from_file(path, params = {}) # Somehow it doesn't work if I specify the file name directly as # upload_source. open(path, 'rb') do |f| update_from_io(f, params) end nil end
Reads content from io
and updates the file with the content.
# File lib/google_drive/file.rb, line 186 def update_from_io(io, params = {}) params = { upload_source: io, supports_all_drives: true }.merge(params) @session.drive_service.update_file(id, nil, **params) nil end
Updates the file with content
.
e.g.
file.update_from_string("Good bye, world.")
# File lib/google_drive/file.rb, line 168 def update_from_string(content, params = {}) update_from_io(StringIO.new(content), params) end
Private Instance Methods
# File lib/google_drive/file.rb, line 260 def export_to_dest(dest, format) mime_type = EXT_TO_CONTENT_TYPE['.' + format] || format @session.drive_service.export_file(id, mime_type, download_dest: dest) nil end