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 Google Docs document/spreadsheet/presentation.
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) ⇒ 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
:nodoc:.
- #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
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
:nodoc:
26 27 28 29 30 31 |
# File 'lib/google_drive/file.rb', line 26 def initialize(session, api_file) #:nodoc: @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.
34 35 36 |
# File 'lib/google_drive/file.rb', line 34 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])
226 227 228 229 |
# File 'lib/google_drive/file.rb', line 226 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.
53 54 55 |
# File 'lib/google_drive/file.rb', line 53 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.
80 81 82 |
# File 'lib/google_drive/file.rb', line 80 def available_content_types api_file.web_content_link ? [api_file.mime_type] : [] end |
#copy(title) ⇒ Object Also known as: duplicate
Creates copy of this file with the given title.
195 196 197 198 |
# File 'lib/google_drive/file.rb', line 195 def copy(title) api_file = @session.drive.copy_file(id, { name: title }, {}) @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.
177 178 179 180 181 182 183 184 |
# File 'lib/google_drive/file.rb', line 177 def delete(permanent = false) if permanent @session.drive.delete_file(id) else @session.drive.update_file(id, { trashed: true }, {}) end nil end |
#document_feed_url ⇒ Object
URL of feed used in the deprecated document list feed API.
48 49 50 |
# File 'lib/google_drive/file.rb', line 48 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.
88 89 90 |
# File 'lib/google_drive/file.rb', line 88 def download_to_file(path, params = {}) @session.drive.get_file(id, {download_dest: path}.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.
104 105 106 |
# File 'lib/google_drive/file.rb', line 104 def download_to_io(io, params = {}) @session.drive.get_file(id, {download_dest: io}.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.
95 96 97 98 99 |
# File 'lib/google_drive/file.rb', line 95 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.
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/google_drive/file.rb', line 116 def export_as_file(path, format = nil) unless format format = EXT_TO_CONTENT_TYPE[::File.extname(path).downcase] unless format fail(ArgumentError, ("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.
135 136 137 138 139 |
# File 'lib/google_drive/file.rb', line 135 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.
144 145 146 |
# File 'lib/google_drive/file.rb', line 144 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.
71 72 73 |
# File 'lib/google_drive/file.rb', line 71 def human_url api_file.web_view_link end |
#inspect ⇒ Object
231 232 233 |
# File 'lib/google_drive/file.rb', line 231 def inspect "\#<%p id=%p title=%p>" % [self.class, id, title] end |
#reload_metadata ⇒ Object
Reloads file metadata such as title and acl.
37 38 39 40 |
# File 'lib/google_drive/file.rb', line 37 def @api_file = @session.drive.get_file(id, fields: '*') @acl = Acl.new(@session, self) if @acl end |
#rename(title) ⇒ Object Also known as: title=
Renames title of the file.
187 188 189 190 |
# File 'lib/google_drive/file.rb', line 187 def rename(title) @session.drive.update_file(id, { name: title }, {}) nil end |
#resource_id ⇒ Object
Returns resource_type + “:” + id.
43 44 45 |
# File 'lib/google_drive/file.rb', line 43 def resource_id '%s:%s' % [resource_type, id] end |
#resource_type ⇒ Object
The type of resourse. e.g. “document”, “spreadsheet”, “folder”
58 59 60 |
# File 'lib/google_drive/file.rb', line 58 def resource_type mime_type.slice(/^application\/vnd.google-apps.(.+)$/, 1) || 'file' end |
#title(params = {}) ⇒ Object
Title of the file.
63 64 65 66 |
# File 'lib/google_drive/file.rb', line 63 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")
160 161 162 163 164 165 166 |
# File 'lib/google_drive/file.rb', line 160 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.
169 170 171 172 173 |
# File 'lib/google_drive/file.rb', line 169 def update_from_io(io, params = {}) params = { upload_source: io }.merge(params) @session.drive.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.")
152 153 154 |
# File 'lib/google_drive/file.rb', line 152 def update_from_string(content, params = {}) update_from_io(StringIO.new(content), params) end |