class GoogleDrive::File

Public Instance Methods

acl_entry(email) click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 59
def acl_entry(email)
  f = self
  f.acls.select{|a| ['group','user'].include?(a.scope_type) and a.scope and a.scope == email}.first
end
acls() click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 55
def acls
  f = self
  f.acl.to_enum.to_a
end
add_admin_acl() click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 10
def add_admin_acl
  f = self
  email = "#{Mobilize::Gdrive.admin_group_name}@#{Mobilize::Gdrive.domain}"
  f.update_acl(email,"group")
  #if adding acl ,must currently add workers as well
  f.add_worker_acl
end
add_worker_acl() click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 4
def add_worker_acl
  f = self
  email = "#{Mobilize::Gdrive.worker_group_name}@#{Mobilize::Gdrive.domain}"
  f.update_acl(email,"group")
end
entry_hash() click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 63
def entry_hash
  f = self
  dfe_xml = f.document_feed_entry.to_xml
  result = Nokogiri::XML(dfe_xml)
  { result.root.name.to_sym => Hash.xml_node_to_hash(result.root)}[:entry]
end
read(user_name) click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 18
def read(user_name)
  f = self
  entry = f.acl_entry("#{user_name}@#{Mobilize::Gdrive.domain}")
  if entry and ['reader','writer','owner'].include?(entry.role)
    f.download_to_string
  else
    raise "User #{user_name} is not allowed to read #{f.title}"
  end
end
update_acl(email,scope_type="user",role="writer") click to toggle source
# File lib/mobilize-base/extensions/google_drive/file.rb, line 28
def update_acl(email,scope_type="user",role="writer")
  f = self
  #need these flags for HTTP retries
  #create req_acl hash to add to current acl
  if entry = f.acl_entry(email)
    if [nil,"none","delete"].include?(role)
      f.acl.delete(entry)
    elsif entry.role != role and ['reader','writer','owner'].include?(role)
      entry.role=role
      f.acl.update_role(entry,entry.role)
      if entry.role != role
        #for whatever reason
        f.acl.delete(entry)
        f.acl.push({:scope_type=>scope_type,:scope=>email,:role=>role})
      end
    elsif !['reader','writer','owner'].include?(role)
      raise "Invalid role #{role}"
    end
  else
    begin
      f.acl.push({:scope_type=>scope_type,:scope=>email,:role=>role})
    rescue => exc
      raise exc unless exc.to_s.index("already has access")
    end
  end
  return true
end