Class: GoogleDrive::File
- Inherits:
-
Object
- Object
- GoogleDrive::File
- Extended by:
- Forwardable
- Includes:
- Util
- Defined in:
- lib/google_drive/file.rb
Overview
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"
Direct Known Subclasses
Constant Summary
Constants included from Util
Util::EXT_TO_CONTENT_TYPE, Util::IMPORTABLE_CONTENT_TYPE_MAP
Instance Attribute Summary collapse
-
#api_file ⇒ Object
readonly
Wrapped Google::APIClient::Schema::Drive::V3::File object.
Instance Method Summary collapse
-
#acl(params = {}) ⇒ Object
Returns GoogleDrive::Acl object for the file.
-
#acl_feed_url ⇒ Object
Deprecated ACL feed URL of the file.
-
#available_content_types ⇒ Object
Content types you can specify in methods download_to_file, download_to_string, download_to_io.
-
#copy(title, file_properties = {}) ⇒ Object
(also: #duplicate)
Creates copy of this file with the given title.
-
#delete(permanent = false) ⇒ Object
If
permanent
isfalse
, moves the file to the trash. -
#document_feed_url ⇒ Object
URL of feed used in the deprecated document list feed API.
-
#download_to_file(path, params = {}) ⇒ Object
Downloads the file to a local file.
-
#download_to_io(io, params = {}) ⇒ Object
Downloads the file and writes it to
io
. -
#download_to_string(params = {}) ⇒ Object
Downloads the file and returns as a String.
-
#export_as_file(path, format = nil) ⇒ Object
Export the file to
path
in content typeformat
. -
#export_as_string(format) ⇒ Object
Export the file as String in content type
format
. -
#export_to_io(io, format) ⇒ Object
Export the file to
io
in content typeformat
. -
#human_url ⇒ Object
URL to view/edit the file in a Web browser.
-
#initialize(session, api_file) ⇒ File
constructor
private
A new instance of File.
- #inspect ⇒ Object
-
#reload_metadata ⇒ Object
Reloads file metadata such as title and acl.
-
#rename(title) ⇒ Object
(also: #title=)
Renames title of the file.
-
#resource_id ⇒ Object
Returns resource_type + “:” + id.
-
#resource_type ⇒ Object
The type of resourse.
-
#title(params = {}) ⇒ Object
(also: #name)
Title of the file.
-
#update_from_file(path, params = {}) ⇒ Object
Updates the file with the content of the local file.
-
#update_from_io(io, params = {}) ⇒ Object
Reads content from
io
and updates the file with the content. -
#update_from_string(content, params = {}) ⇒ Object
Updates the file with
content
.
Methods included from Util
concat_url, construct_and_query, construct_query, convert_params, delegate_api_methods, encode_query, get_singleton_class, h
Constructor Details
#initialize(session, api_file) ⇒ File
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of File.
29 30 31 32 33 34 |
# 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 |
Instance Attribute Details
#api_file ⇒ Object (readonly)
Wrapped Google::APIClient::Schema::Drive::V3::File object.
37 38 39 |
# File 'lib/google_drive/file.rb', line 37 def api_file @api_file end |
Instance Method Details
#acl(params = {}) ⇒ Object
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", "[email protected]", "owner"]
end
# Shares the file with new people:
# NOTE: This sends email to the new people.
file.acl.push(
{type: "user", email_address: "[email protected]", role: "reader"})
file.acl.push(
{type: "user", email_address: "[email protected]", role: "writer"})
# Changes the role of a person:
file.acl[1].role = "writer"
# Deletes an ACL entry:
file.acl.delete(file.acl[1])
249 250 251 252 |
# File 'lib/google_drive/file.rb', line 249 def acl(params = {}) @acl = Acl.new(@session, self) if !@acl || params[:reload] @acl end |
#acl_feed_url ⇒ Object
Deprecated ACL feed URL of the file.
59 60 61 |
# File 'lib/google_drive/file.rb', line 59 def acl_feed_url document_feed_url + '/acl' end |
#available_content_types ⇒ Object
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.
88 89 90 |
# File 'lib/google_drive/file.rb', line 88 def available_content_types api_file.web_content_link ? [api_file.mime_type] : [] end |
#copy(title, file_properties = {}) ⇒ Object Also known as: duplicate
Creates copy of this file with the given title.
216 217 218 219 220 221 |
# 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 |
#delete(permanent = false) ⇒ Object
If permanent
is false
, moves the file to the trash. If permanent
is true
, deletes the file permanently.
194 195 196 197 198 199 200 201 202 203 |
# 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 |
#document_feed_url ⇒ Object
URL of feed used in the deprecated document list feed API.
53 54 55 56 |
# 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 |
#download_to_file(path, params = {}) ⇒ Object
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.
96 97 98 99 100 101 |
# 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 |
#download_to_io(io, params = {}) ⇒ Object
Downloads the file and writes it to io
.
To export the file in other formats, use export_to_io.
115 116 117 118 119 120 |
# 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 |
#download_to_string(params = {}) ⇒ Object
Downloads the file and returns as a String.
To export the file in other formats, use export_as_string.
106 107 108 109 110 |
# 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_as_file(path, format = nil) ⇒ Object
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.
131 132 133 134 135 136 137 138 139 140 141 |
# 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_as_string(format) ⇒ Object
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.
150 151 152 153 154 |
# 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_to_io(io, format) ⇒ Object
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.
160 161 162 |
# File 'lib/google_drive/file.rb', line 160 def export_to_io(io, format) export_to_dest(io, format) end |
#human_url ⇒ Object
URL to view/edit the file in a Web browser.
79 80 81 |
# File 'lib/google_drive/file.rb', line 79 def human_url api_file.web_view_link end |
#inspect ⇒ Object
254 255 256 |
# File 'lib/google_drive/file.rb', line 254 def inspect format("\#<%p id=%p title=%p>", self.class, id, title) end |
#reload_metadata ⇒ Object
Reloads file metadata such as title and acl.
40 41 42 43 44 45 |
# File 'lib/google_drive/file.rb', line 40 def @api_file = @session.drive_service.get_file( id, fields: '*', supports_all_drives: true ) @acl = Acl.new(@session, self) if @acl end |
#rename(title) ⇒ Object Also known as: title=
Renames title of the file.
206 207 208 209 210 211 |
# 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 |
#resource_id ⇒ Object
Returns resource_type + “:” + id.
48 49 50 |
# File 'lib/google_drive/file.rb', line 48 def resource_id format('%s:%s', resource_type, id) end |
#resource_type ⇒ Object
The type of resourse. e.g. “document”, “spreadsheet”, “folder”
64 65 66 |
# File 'lib/google_drive/file.rb', line 64 def resource_type mime_type.slice(/^application\/vnd.google-apps.(.+)$/, 1) || 'file' end |
#title(params = {}) ⇒ Object Also known as: name
Title of the file.
69 70 71 72 |
# File 'lib/google_drive/file.rb', line 69 def title(params = {}) if params[:reload] api_file.name end |
#update_from_file(path, params = {}) ⇒ Object
Updates the file with the content of the local file.
e.g.
file.update_from_file("/path/to/hoge.txt")
176 177 178 179 180 181 182 183 |
# 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 |
#update_from_io(io, params = {}) ⇒ Object
Reads content from io
and updates the file with the content.
186 187 188 189 190 |
# 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 |
#update_from_string(content, params = {}) ⇒ Object
Updates the file with content
.
e.g.
file.update_from_string("Good bye, world.")
168 169 170 |
# File 'lib/google_drive/file.rb', line 168 def update_from_string(content, params = {}) update_from_io(StringIO.new(content), params) end |