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

api_file[R]

Wrapped Google::APIClient::Schema::Drive::V3::File object.

Public Class Methods

new(session, api_file) click to toggle source

@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

acl(params = {}) click to toggle source

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
acl_feed_url() click to toggle source

Deprecated ACL feed URL of the file.

# File lib/google_drive/file.rb, line 59
def acl_feed_url
  document_feed_url + '/acl'
end
available_content_types() click to toggle source

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
copy(title, file_properties = {}) click to toggle source

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
Also aliased as: duplicate
delete(permanent = false) click to toggle source

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
document_feed_url() click to toggle source

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
download_to_file(path, params = {}) click to toggle source

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
download_to_io(io, params = {}) click to toggle source

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
download_to_string(params = {}) click to toggle source

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
duplicate(title, file_properties = {})
Alias for: copy
export_as_file(path, format = nil) click to toggle source

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_as_string(format) click to toggle source

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_to_io(io, format) click to toggle source

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
human_url() click to toggle source

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
inspect() click to toggle source
# File lib/google_drive/file.rb, line 254
def inspect
  format("\#<%p id=%p title=%p>", self.class, id, title)
end
name(params = {})
Alias for: title
reload_metadata() click to toggle source

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
rename(title) click to toggle source

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
Also aliased as: title=
resource_id() click to toggle source

Returns resource_type + “:” + id.

# File lib/google_drive/file.rb, line 48
def resource_id
  format('%s:%s', resource_type, id)
end
resource_type() click to toggle source

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(params = {}) click to toggle source

Title of the file.

# File lib/google_drive/file.rb, line 69
def title(params = {})
  reload_metadata if params[:reload]
  api_file.name
end
Also aliased as: name
title=(title)
Alias for: rename
update_from_file(path, params = {}) click to toggle source

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
update_from_io(io, params = {}) click to toggle source

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
update_from_string(content, params = {}) click to toggle source

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

export_to_dest(dest, format) click to toggle source
# 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