google_drive 1.0.6 → 2.0.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.rdoc +3 -7
- data/doc_src/google_drive/acl.rb +13 -17
- data/lib/google_drive.rb +130 -160
- data/lib/google_drive/acl.rb +77 -93
- data/lib/google_drive/acl_entry.rb +149 -105
- data/lib/google_drive/api_client_fetcher.rb +22 -41
- data/lib/google_drive/authentication_error.rb +4 -8
- data/lib/google_drive/collection.rb +127 -149
- data/lib/google_drive/config.rb +23 -25
- data/lib/google_drive/error.rb +3 -3
- data/lib/google_drive/file.rb +215 -273
- data/lib/google_drive/list.rb +108 -113
- data/lib/google_drive/list_row.rb +65 -70
- data/lib/google_drive/response_code_error.rb +11 -16
- data/lib/google_drive/session.rb +412 -444
- data/lib/google_drive/spreadsheet.rb +62 -67
- data/lib/google_drive/util.rb +200 -160
- data/lib/google_drive/worksheet.rb +453 -469
- metadata +60 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55c7313948e140230848e220a36ab07648790d38
|
4
|
+
data.tar.gz: aea2dafd3efb8cce5911a5a0475a51276bdef75f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4866bc23c4cad36082f3487ad90f9b15cca81fb789c19a869770eb9d40b10651b1e40e4a10833f39a802884dba4f8a0b9855c57d4160ca9aa56ddd3621bc1fd
|
7
|
+
data.tar.gz: cf998e7d7ed9073c7f5f3bb3d10a29ea45fc79c99f9f1fa3c2d23d306c17e2e2e38a6d6a289db115ee678ff66179c76f2484db5d3dd42349ebccf1c27cc9b2fc
|
data/README.rdoc
CHANGED
@@ -3,11 +3,9 @@ This is a Ruby library to read/write files/spreadsheets in Google Drive/Docs.
|
|
3
3
|
NOTE: This is NOT a library to create Google Drive App.
|
4
4
|
|
5
5
|
|
6
|
-
= Migration from 0.
|
6
|
+
= Migration from ver. 0.x.x / 1.x.x to to ver. 2.x.x
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
Ver. 1.0.x is not 100% backward compatible with 0.3.x. Some methods have been removed. Especially, GoogleDrive.login has been removed, and you must use GoogleDrive.saved_session or GoogleDrive.login_with_oauth instead, as in the example code below.
|
8
|
+
There are some incompatible API changes. See {MIGRATING.md}[https://github.com/gimite/google-drive-ruby/blob/master/MIGRATING.md].
|
11
9
|
|
12
10
|
|
13
11
|
= How to install
|
@@ -28,7 +26,6 @@ Next, create a file config.json which contains the client ID and crient secret y
|
|
28
26
|
|
29
27
|
Example to read/write files in Google Drive:
|
30
28
|
|
31
|
-
require "google/api_client"
|
32
29
|
require "google_drive"
|
33
30
|
|
34
31
|
# Creates a session. This will prompt the credential via command line for the
|
@@ -52,7 +49,6 @@ Example to read/write files in Google Drive:
|
|
52
49
|
|
53
50
|
Example to read/write spreadsheets:
|
54
51
|
|
55
|
-
require "google/api_client"
|
56
52
|
require "google_drive"
|
57
53
|
|
58
54
|
# Creates a session. This will prompt the credential via command line for the
|
@@ -97,7 +93,7 @@ The license of this source is "New BSD Licence"
|
|
97
93
|
|
98
94
|
= Supported environments
|
99
95
|
|
100
|
-
Ruby
|
96
|
+
Ruby 2.0.0 or later. Checked with Ruby 2.3.0.
|
101
97
|
|
102
98
|
|
103
99
|
= Author
|
data/doc_src/google_drive/acl.rb
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
module GoogleDrive
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# Returns the number of entries.
|
6
|
-
def size
|
7
|
-
end
|
8
|
-
|
9
|
-
# Returns GoogleDrive::AclEntry object at +index+.
|
10
|
-
def [](index)
|
11
|
-
end
|
12
|
-
|
13
|
-
# Iterates over GoogleDrive::AclEntry objects.
|
14
|
-
def each(&block)
|
15
|
-
yield(entry)
|
16
|
-
end
|
17
|
-
|
2
|
+
class Acl
|
3
|
+
# Returns the number of entries.
|
4
|
+
def size
|
18
5
|
end
|
19
|
-
|
6
|
+
|
7
|
+
# Returns GoogleDrive::AclEntry object at +index+.
|
8
|
+
def [](index)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Iterates over GoogleDrive::AclEntry objects.
|
12
|
+
def each(&_block)
|
13
|
+
yield(entry)
|
14
|
+
end
|
15
|
+
end
|
20
16
|
end
|
data/lib/google_drive.rb
CHANGED
@@ -2,177 +2,147 @@
|
|
2
2
|
# The license of this source is "New BSD Licence"
|
3
3
|
|
4
4
|
require 'json'
|
5
|
-
require '
|
5
|
+
require 'googleauth'
|
6
6
|
|
7
7
|
require 'google_drive/session'
|
8
8
|
|
9
9
|
module GoogleDrive
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
#
|
55
|
-
# require "rubygems"
|
56
|
-
# require "google/api_client"
|
57
|
-
# client = Google::APIClient.new
|
58
|
-
# auth = client.authorization
|
59
|
-
# # Follow "Create a client ID and client secret" in
|
60
|
-
# # https://developers.google.com/drive/web/auth/web-server] to get a client ID and client secret.
|
61
|
-
# auth.client_id = "YOUR CLIENT ID"
|
62
|
-
# auth.client_secret = "YOUR CLIENT SECRET"
|
63
|
-
# auth.scope =
|
64
|
-
# "https://www.googleapis.com/auth/drive " +
|
65
|
-
# "https://spreadsheets.google.com/feeds/"
|
66
|
-
# auth.redirect_uri = "urn:ietf:wg:oauth:2.0:oob"
|
67
|
-
# print("1. Open this page:\n%s\n\n" % auth.authorization_uri)
|
68
|
-
# print("2. Enter the authorization code shown in the page: ")
|
69
|
-
# auth.code = $stdin.gets.chomp
|
70
|
-
# auth.fetch_access_token!
|
71
|
-
# session = GoogleDrive.login_with_oauth(auth.access_token)
|
72
|
-
#
|
73
|
-
# See this document for details:
|
74
|
-
#
|
75
|
-
# - https://developers.google.com/drive/web/about-auth
|
76
|
-
def self.login_with_oauth(client_or_access_token, proxy = nil)
|
77
|
-
return Session.new(client_or_access_token, proxy)
|
78
|
-
end
|
79
|
-
|
80
|
-
# Returns GoogleDrive::Session constructed from a config JSON file at +path+.
|
81
|
-
#
|
82
|
-
# Follow the following steps to use this method:
|
83
|
-
#
|
84
|
-
# First, follow "Create a client ID and client secret" in
|
85
|
-
# {this page}[https://developers.google.com/drive/web/auth/web-server] to get a client ID
|
86
|
-
# and client secret for OAuth. Set "Application type" to "Other" in the form to create a
|
87
|
-
# client ID if you use GoogleDrive.saved_session method as in the example below.
|
88
|
-
#
|
89
|
-
# Next, create a file config.json which contains the client ID and client secret you got
|
90
|
-
# above, which looks like:
|
91
|
-
#
|
92
|
-
# {
|
93
|
-
# "client_id": "xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
|
94
|
-
# "client_secret": "xxxxxxxxxxxxxxxxxxxxxxxx"
|
95
|
-
# }
|
96
|
-
#
|
97
|
-
# Then you can construct a GoogleDrive::Session by:
|
98
|
-
#
|
99
|
-
# session = GoogleDrive.saved_session("config.json")
|
100
|
-
#
|
101
|
-
# This will prompt the credential via command line for the first time and save it to
|
102
|
-
# config.json file for later usages.
|
103
|
-
#
|
104
|
-
# +path+ defaults to ENV["HOME"] + "/.ruby_google_drive.token".
|
105
|
-
#
|
106
|
-
# If the file doesn't exist or client ID/secret are not given in the file, the default client
|
107
|
-
# ID/secret embedded in the library is used.
|
108
|
-
#
|
109
|
-
# You can also provide a config object that must respond to:
|
110
|
-
# client_id
|
111
|
-
# client_secret
|
112
|
-
# refesh_token
|
113
|
-
# refresh_token=
|
114
|
-
# scope
|
115
|
-
# scope=
|
116
|
-
# save
|
117
|
-
def self.saved_session(
|
118
|
-
path_or_config = nil, proxy = nil, client_id = nil, client_secret = nil)
|
119
|
-
config = case path_or_config
|
120
|
-
when String
|
121
|
-
Config.new(path_or_config)
|
122
|
-
when nil
|
123
|
-
Config.new(ENV['HOME'] + '/.ruby_google_drive.token')
|
124
|
-
else
|
125
|
-
path_or_config
|
126
|
-
end
|
10
|
+
# Authenticates with given OAuth2 token.
|
11
|
+
#
|
12
|
+
# +access_token+ can be either OAuth2 access_token string, OAuth2::AccessToken
|
13
|
+
# or credentials generated by googleauth library.
|
14
|
+
#
|
15
|
+
# OAuth2 code example for Web apps:
|
16
|
+
#
|
17
|
+
# require "googleauth"
|
18
|
+
#
|
19
|
+
# credentials = Google::Auth::UserRefreshCredentials.new(
|
20
|
+
# client_id: "YOUR CLIENT ID",
|
21
|
+
# client_secret: "YOUR CLIENT SECRET",
|
22
|
+
# scope: [
|
23
|
+
# "https://www.googleapis.com/auth/drive",
|
24
|
+
# "https://spreadsheets.google.com/feeds/",
|
25
|
+
# ],
|
26
|
+
# redirect_uri: "http://example.com/redirect")
|
27
|
+
# auth_url = credentials.authorization_uri
|
28
|
+
# # Redirect the user to auth_url and get authorization code from redirect URL.
|
29
|
+
# credentials.code = authorization_code
|
30
|
+
# credentials.fetch_access_token!
|
31
|
+
# session = GoogleDrive.login_with_oauth(credentials)
|
32
|
+
#
|
33
|
+
# auth.access_token expires in 1 hour. If you want to restore a session afterwards, you can store
|
34
|
+
# auth.refresh_token somewhere after auth.fetch_access_token! above, and use this code:
|
35
|
+
#
|
36
|
+
# require "googleauth"
|
37
|
+
#
|
38
|
+
# credentials = Google::Auth::UserRefreshCredentials.new(
|
39
|
+
# client_id: "YOUR CLIENT ID",
|
40
|
+
# client_secret: "YOUR CLIENT SECRET",
|
41
|
+
# scope: [
|
42
|
+
# "https://www.googleapis.com/auth/drive",
|
43
|
+
# "https://spreadsheets.google.com/feeds/",
|
44
|
+
# ],
|
45
|
+
# redirect_uri: "http://example.com/redirect")
|
46
|
+
# auth.refresh_token = refresh_token
|
47
|
+
# auth.fetch_access_token!
|
48
|
+
# session = GoogleDrive.login_with_oauth(auth.access_token)
|
49
|
+
#
|
50
|
+
# For command-line apps, it would be easier to use saved_session method instead.
|
51
|
+
def self.login_with_oauth(client_or_access_token, proxy = nil)
|
52
|
+
Session.new(client_or_access_token, proxy)
|
53
|
+
end
|
127
54
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
55
|
+
# Returns GoogleDrive::Session constructed from a config JSON file at +path+.
|
56
|
+
#
|
57
|
+
# Follow the following steps to use this method:
|
58
|
+
#
|
59
|
+
# First, follow "Create a client ID and client secret" in
|
60
|
+
# {this page}[https://developers.google.com/drive/web/auth/web-server] to get a client ID
|
61
|
+
# and client secret for OAuth. Set "Application type" to "Other" in the form to create a
|
62
|
+
# client ID if you use GoogleDrive.saved_session method as in the example below.
|
63
|
+
#
|
64
|
+
# Next, create a file config.json which contains the client ID and client secret you got
|
65
|
+
# above, which looks like:
|
66
|
+
#
|
67
|
+
# {
|
68
|
+
# "client_id": "xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
|
69
|
+
# "client_secret": "xxxxxxxxxxxxxxxxxxxxxxxx"
|
70
|
+
# }
|
71
|
+
#
|
72
|
+
# Then you can construct a GoogleDrive::Session by:
|
73
|
+
#
|
74
|
+
# session = GoogleDrive.saved_session("config.json")
|
75
|
+
#
|
76
|
+
# This will prompt the credential via command line for the first time and save it to
|
77
|
+
# config.json file for later usages.
|
78
|
+
#
|
79
|
+
# +path+ defaults to ENV["HOME"] + "/.ruby_google_drive.token".
|
80
|
+
#
|
81
|
+
# If the file doesn't exist or client ID/secret are not given in the file, the default client
|
82
|
+
# ID/secret embedded in the library is used.
|
83
|
+
#
|
84
|
+
# You can also provide a config object that must respond to:
|
85
|
+
# client_id
|
86
|
+
# client_secret
|
87
|
+
# refesh_token
|
88
|
+
# refresh_token=
|
89
|
+
# scope
|
90
|
+
# scope=
|
91
|
+
# save
|
92
|
+
def self.saved_session(
|
93
|
+
path_or_config = nil, proxy = nil, client_id = nil, client_secret = nil)
|
94
|
+
config = case path_or_config
|
95
|
+
when String
|
96
|
+
Config.new(path_or_config)
|
97
|
+
when nil
|
98
|
+
Config.new(ENV['HOME'] + '/.ruby_google_drive.token')
|
99
|
+
else
|
100
|
+
path_or_config
|
101
|
+
end
|
132
102
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
if !config.client_id && !config.client_secret
|
138
|
-
config.client_id = "452925651630-egr1f18o96acjjvphpbbd1qlsevkho1d.apps.googleusercontent.com"
|
139
|
-
config.client_secret = "1U3-Krii5x1oLPrwD5zgn-ry"
|
140
|
-
elsif !config.client_id || !config.client_secret
|
141
|
-
raise(ArgumentError, "client_id and client_secret must be both specified or both omitted")
|
142
|
-
end
|
103
|
+
config.scope ||= [
|
104
|
+
'https://www.googleapis.com/auth/drive',
|
105
|
+
'https://spreadsheets.google.com/feeds/'
|
106
|
+
]
|
143
107
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
108
|
+
if client_id && client_secret
|
109
|
+
config.client_id = client_id
|
110
|
+
config.client_secret = client_secret
|
111
|
+
end
|
112
|
+
if !config.client_id && !config.client_secret
|
113
|
+
config.client_id = '452925651630-egr1f18o96acjjvphpbbd1qlsevkho1d.apps.googleusercontent.com'
|
114
|
+
config.client_secret = '1U3-Krii5x1oLPrwD5zgn-ry'
|
115
|
+
elsif !config.client_id || !config.client_secret
|
116
|
+
fail(ArgumentError, 'client_id and client_secret must be both specified or both omitted')
|
117
|
+
end
|
149
118
|
|
150
|
-
|
119
|
+
if proxy
|
120
|
+
fail(
|
121
|
+
ArgumentError,
|
122
|
+
'Specifying a proxy object is no longer supported. Set ENV["http_proxy"] instead.')
|
123
|
+
end
|
151
124
|
|
152
|
-
|
153
|
-
:application_name => 'google_drive Ruby library',
|
154
|
-
:application_version => '0.4.0'
|
155
|
-
)
|
125
|
+
refresh_token = config.refresh_token
|
156
126
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
127
|
+
credentials = Google::Auth::UserRefreshCredentials.new(
|
128
|
+
client_id: config.client_id,
|
129
|
+
client_secret: config.client_secret,
|
130
|
+
scope: config.scope,
|
131
|
+
redirect_uri: 'urn:ietf:wg:oauth:2.0:oob')
|
162
132
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
133
|
+
if config.refresh_token
|
134
|
+
credentials.refresh_token = config.refresh_token
|
135
|
+
credentials.fetch_access_token!
|
136
|
+
else
|
137
|
+
$stderr.print("\n1. Open this page:\n%s\n\n" % credentials.authorization_uri)
|
138
|
+
$stderr.print('2. Enter the authorization code shown in the page: ')
|
139
|
+
credentials.code = $stdin.gets.chomp
|
140
|
+
credentials.fetch_access_token!
|
141
|
+
config.refresh_token = credentials.refresh_token
|
142
|
+
end
|
173
143
|
|
174
|
-
|
144
|
+
config.save
|
175
145
|
|
176
|
-
|
177
|
-
|
146
|
+
GoogleDrive.login_with_oauth(credentials)
|
147
|
+
end
|
178
148
|
end
|
data/lib/google_drive/acl.rb
CHANGED
@@ -3,106 +3,90 @@
|
|
3
3
|
# Author: Hiroshi Ichikawa <http://gimite.net/>
|
4
4
|
# The license of this source is "New BSD Licence"
|
5
5
|
|
6
|
-
require
|
6
|
+
require 'google_drive/acl_entry'
|
7
7
|
|
8
8
|
module GoogleDrive
|
9
|
+
# ACL (access control list) of a spreadsheet.
|
10
|
+
#
|
11
|
+
# Use GoogleDrive::Spreadsheet#acl to get GoogleDrive::Acl object.
|
12
|
+
# See GoogleDrive::Spreadsheet#acl for usage example.
|
13
|
+
#
|
14
|
+
# This code is based on https://github.com/guyboertje/gdata-spreadsheet-ruby .
|
15
|
+
class Acl
|
16
|
+
include(Util)
|
17
|
+
extend(Forwardable)
|
9
18
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
class Acl
|
17
|
-
|
18
|
-
include(Util)
|
19
|
-
extend(Forwardable)
|
20
|
-
|
21
|
-
def initialize(session, file) #:nodoc:
|
22
|
-
@session = session
|
23
|
-
@file = file
|
24
|
-
api_result = @session.execute!(
|
25
|
-
:api_method => @session.drive.permissions.list,
|
26
|
-
:parameters => { "fileId" => @file.id })
|
27
|
-
@entries = api_result.data.items.map(){ |i| AclEntry.new(i, self) }
|
28
|
-
end
|
29
|
-
|
30
|
-
def_delegators(:@entries, :size, :[], :each)
|
31
|
-
|
32
|
-
# Adds a new entry. +entry+ is either a GoogleDrive::AclEntry or a Hash with keys
|
33
|
-
# :scope_type, :scope and :role. See GoogleDrive::AclEntry#scope_type and
|
34
|
-
# GoogleDrive::AclEntry#role for the document of the fields.
|
35
|
-
#
|
36
|
-
# Also you can pass the second hash argument +options+, which specifies
|
37
|
-
# optional query parameters for the API.
|
38
|
-
# Possible keys of +options+ are,
|
39
|
-
# * :emailMessage -- A custom message to include in notification emails
|
40
|
-
# * :sendNotificationEmails -- Whether to send notification emails
|
41
|
-
# when sharing to users or groups.
|
42
|
-
#
|
43
|
-
# NOTE: This sends email to the new people.
|
44
|
-
#
|
45
|
-
# e.g.
|
46
|
-
# # A specific user can read or write.
|
47
|
-
# spreadsheet.acl.push(
|
48
|
-
# {:type => "user", :value => "example2@gmail.com", :role => "reader"})
|
49
|
-
# spreadsheet.acl.push(
|
50
|
-
# {:type => "user", :value => "example3@gmail.com", :role => "writer"})
|
51
|
-
# # Publish on the Web.
|
52
|
-
# spreadsheet.acl.push(
|
53
|
-
# {:type => "anyone", :role => "reader"})
|
54
|
-
# # Anyone who knows the link can read.
|
55
|
-
# spreadsheet.acl.push(
|
56
|
-
# {:type => "anyone", :withLink => true, :role => "reader"})
|
57
|
-
# # Set ACL without sending notification emails
|
58
|
-
# spreadsheet.acl.push(
|
59
|
-
# {:type => "user", :value => "example2@gmail.com", :role => "reader"},
|
60
|
-
# {:sendNotificationEmails => false})
|
61
|
-
#
|
62
|
-
# See here for parameter detais:
|
63
|
-
# https://developers.google.com/drive/v2/reference/permissions/insert
|
64
|
-
def push(params_or_entry, options = {})
|
65
|
-
entry = params_or_entry.is_a?(AclEntry) ? params_or_entry : AclEntry.new(params_or_entry)
|
66
|
-
new_permission = @session.drive.permissions.insert.request_schema.new(entry.params)
|
67
|
-
api_result = @session.execute!(
|
68
|
-
:api_method => @session.drive.permissions.insert,
|
69
|
-
:body_object => new_permission,
|
70
|
-
:parameters => options.merge({ "fileId" => @file.id }))
|
71
|
-
new_entry = AclEntry.new(api_result.data, self)
|
72
|
-
@entries.push(new_entry)
|
73
|
-
return new_entry
|
74
|
-
end
|
19
|
+
def initialize(session, file) #:nodoc:
|
20
|
+
@session = session
|
21
|
+
@file = file
|
22
|
+
api_permissions = @session.drive.list_permissions(@file.id, fields: '*')
|
23
|
+
@entries = api_permissions.permissions.map { |perm| AclEntry.new(perm, self) }
|
24
|
+
end
|
75
25
|
|
76
|
-
|
77
|
-
#
|
78
|
-
# e.g.
|
79
|
-
# spreadsheet.acl.delete(spreadsheet.acl[1])
|
80
|
-
def delete(entry)
|
81
|
-
@session.execute!(
|
82
|
-
:api_method => @session.drive.permissions.delete,
|
83
|
-
:parameters => {
|
84
|
-
"fileId" => @file.id,
|
85
|
-
"permissionId" => entry.id,
|
86
|
-
})
|
87
|
-
@entries.delete(entry)
|
88
|
-
end
|
26
|
+
def_delegators(:@entries, :size, :[], :each)
|
89
27
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
28
|
+
# Adds a new entry. +entry+ is either a GoogleDrive::AclEntry or a Hash with keys
|
29
|
+
# +:type+, +:email_address+, +:domain+, +:role+ and +:allow_file_discovery+.
|
30
|
+
# See GoogleDrive::AclEntry#type and
|
31
|
+
# GoogleDrive::AclEntry#role for the document of the fields.
|
32
|
+
#
|
33
|
+
# Also you can pass the second hash argument +options+, which specifies
|
34
|
+
# optional query parameters for the API.
|
35
|
+
# Possible keys of +options+ are,
|
36
|
+
# * :emailMessage -- A custom message to include in notification emails
|
37
|
+
# * :sendNotificationEmails -- Whether to send notification emails
|
38
|
+
# when sharing to users or groups.
|
39
|
+
#
|
40
|
+
# NOTE: This sends email to the new people.
|
41
|
+
#
|
42
|
+
# e.g.
|
43
|
+
# # A specific user can read or write.
|
44
|
+
# spreadsheet.acl.push(
|
45
|
+
# {type: "user", email_address: "example2@gmail.com", role: "reader"})
|
46
|
+
# spreadsheet.acl.push(
|
47
|
+
# {type: "user", email_address: "example3@gmail.com", role: "writer"})
|
48
|
+
# # Share with a Google Apps domain.
|
49
|
+
# spreadsheet.acl.push(
|
50
|
+
# {type: "domain", domain: "gimite.net", role: "reader"})
|
51
|
+
# # Publish on the Web.
|
52
|
+
# spreadsheet.acl.push(
|
53
|
+
# {type: "anyone", role: "reader"})
|
54
|
+
# # Anyone who knows the link can read.
|
55
|
+
# spreadsheet.acl.push(
|
56
|
+
# {type: "anyone", allow_file_discovery: false, role: "reader"})
|
57
|
+
# # Set ACL without sending notification emails
|
58
|
+
# spreadsheet.acl.push(
|
59
|
+
# {type: "user", email_address: "example2@gmail.com", role: "reader"},
|
60
|
+
# {sendNotificationEmails: false})
|
61
|
+
#
|
62
|
+
# See here for parameter detais:
|
63
|
+
# https://developers.google.com/drive/v3/reference/permissions/create
|
64
|
+
def push(params_or_entry, options = {})
|
65
|
+
entry = params_or_entry.is_a?(AclEntry) ? params_or_entry : AclEntry.new(params_or_entry)
|
66
|
+
api_permission = @session.drive.create_permission(@file.id, entry.params, fields: '*')
|
67
|
+
new_entry = AclEntry.new(api_permission, self)
|
68
|
+
@entries.push(new_entry)
|
69
|
+
new_entry
|
70
|
+
end
|
101
71
|
|
102
|
-
|
103
|
-
|
104
|
-
|
72
|
+
# Deletes an ACL entry.
|
73
|
+
#
|
74
|
+
# e.g.
|
75
|
+
# spreadsheet.acl.delete(spreadsheet.acl[1])
|
76
|
+
def delete(entry)
|
77
|
+
@session.drive.delete_permission(@file.id, entry.id)
|
78
|
+
@entries.delete(entry)
|
79
|
+
end
|
105
80
|
|
81
|
+
def update_role(entry) #:nodoc:
|
82
|
+
api_permission = @session.drive.update_permission(
|
83
|
+
@file.id, entry.id, {role: entry.role}, fields: '*')
|
84
|
+
entry.api_permission = api_permission
|
85
|
+
entry
|
106
86
|
end
|
107
87
|
|
88
|
+
def inspect
|
89
|
+
"\#<%p %p>" % [self.class, @entries]
|
90
|
+
end
|
91
|
+
end
|
108
92
|
end
|