google_drive 1.0.6 → 2.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|