class GoogleDrive::Acl

ACL (access control list) of a spreadsheet.

Use GoogleDrive::Spreadsheet#acl to get GoogleDrive::Acl object. See GoogleDrive::Spreadsheet#acl for usage example.

This code is based on github.com/guyboertje/gdata-spreadsheet-ruby .

Public Class Methods

new(session, file) click to toggle source

@api private

# File lib/google_drive/acl.rb, line 21
def initialize(session, file)
  @session = session
  @file = file
  api_permissions = @session.drive_service.list_permissions(
    @file.id, fields: '*', supports_all_drives: true
  )
  @entries =
    api_permissions.permissions.map { |perm| AclEntry.new(perm, self) }
end

Public Instance Methods

delete(entry) click to toggle source

Deletes an ACL entry.

e.g.

spreadsheet.acl.delete(spreadsheet.acl[1])
# File lib/google_drive/acl.rb, line 87
def delete(entry)
  @session.drive_service.delete_permission(
    @file.id, entry.id, supports_all_drives: true
  )
  @entries.delete(entry)
end
inspect() click to toggle source
# File lib/google_drive/acl.rb, line 107
def inspect
  format("\#<%p %p>", self.class, @entries)
end
push(params_or_entry, options = {}) click to toggle source

Adds a new entry. entry is either a GoogleDrive::AclEntry or a Hash with keys :type, :email_address, :domain, :role and :allow_file_discovery. See GoogleDrive::AclEntry#type and GoogleDrive::AclEntry#role for the document of the fields.

Also you can pass the second hash argument options, which specifies optional query parameters for the API. Possible keys of options are,

  • :email_message – A custom message to include in notification emails

  • :send_notification_email – Whether to send notification emails when sharing to users or groups. (Default: true)

  • :transfer_ownership – Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect. (Default: false)

e.g.

# A specific user can read or write.
spreadsheet.acl.push(
    {type: "user", email_address: "example2@gmail.com", role: "reader"})
spreadsheet.acl.push(
    {type: "user", email_address: "example3@gmail.com", role: "writer"})
# Share with a Google Apps domain.
spreadsheet.acl.push(
    {type: "domain", domain: "gimite.net", role: "reader"})
# Publish on the Web.
spreadsheet.acl.push(
    {type: "anyone", role: "reader"})
# Anyone who knows the link can read.
spreadsheet.acl.push(
    {type: "anyone", allow_file_discovery: false, role: "reader"})
# Set ACL without sending notification emails
spreadsheet.acl.push(
    {type: "user", email_address: "example2@gmail.com", role: "reader"},
    {send_notification_email: false})

See here for parameter detais: developers.google.com/drive/v3/reference/permissions/create

# File lib/google_drive/acl.rb, line 70
def push(params_or_entry, options = {})
  entry = params_or_entry.is_a?(AclEntry) ?
    params_or_entry : AclEntry.new(params_or_entry)
  api_permission = @session.drive_service.create_permission(
    @file.id,
    entry.params,
    **{ fields: '*', supports_all_drives: true }.merge(options)
  )
  new_entry = AclEntry.new(api_permission, self)
  @entries.push(new_entry)
  new_entry
end
update_role(entry) click to toggle source

@api private

# File lib/google_drive/acl.rb, line 95
def update_role(entry)
  api_permission = @session.drive_service.update_permission(
    @file.id,
    entry.id,
    { role: entry.role },
    fields: '*',
    supports_all_drives: true
  )
  entry.api_permission = api_permission
  entry
end