google_drive 2.1.8 → 2.1.9
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/lib/google_drive.rb +9 -4
- data/lib/google_drive/acl.rb +16 -11
- data/lib/google_drive/acl_entry.rb +18 -16
- data/lib/google_drive/api_client_fetcher.rb +3 -3
- data/lib/google_drive/collection.rb +50 -39
- data/lib/google_drive/config.rb +2 -2
- data/lib/google_drive/file.rb +35 -25
- data/lib/google_drive/list.rb +3 -1
- data/lib/google_drive/list_row.rb +11 -10
- data/lib/google_drive/response_code_error.rb +4 -1
- data/lib/google_drive/session.rb +191 -122
- data/lib/google_drive/spreadsheet.rb +34 -24
- data/lib/google_drive/util.rb +44 -25
- data/lib/google_drive/worksheet.rb +126 -53
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 865c482b6edbfefd86f4a5e9658b9487e70b99c6
|
4
|
+
data.tar.gz: da516192ff4de976a61327eaa61602dc1df51dd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a31cb6ce83639300b5e182b36146dbb4132ce182cd520a44dd1474f105d81e54eeb9cea4522b7b205a57c7530eefcb2e9c872a0766e1aa021232d72cd15c9c0d
|
7
|
+
data.tar.gz: 81986aea9ec0ebd102808fa49c82ae9910ea9bb31b9e7c135e34eb66a1218222a5a09071254a1606839cfd013edfe432dd5f82ec1a00429289d198f84df1cf2b
|
data/lib/google_drive.rb
CHANGED
@@ -18,13 +18,18 @@ module GoogleDrive
|
|
18
18
|
config = ENV['HOME'] + '/.ruby_google_drive.token',
|
19
19
|
proxy = nil,
|
20
20
|
client_id = nil,
|
21
|
-
client_secret = nil
|
21
|
+
client_secret = nil
|
22
|
+
)
|
22
23
|
if proxy
|
23
|
-
|
24
|
+
raise(
|
24
25
|
ArgumentError,
|
25
|
-
'Specifying a proxy object is no longer supported.
|
26
|
+
'Specifying a proxy object is no longer supported. ' \
|
27
|
+
'Set ENV["http_proxy"] instead.'
|
28
|
+
)
|
26
29
|
end
|
27
30
|
|
28
|
-
Session.from_config(
|
31
|
+
Session.from_config(
|
32
|
+
config, client_id: client_id, client_secret: client_secret
|
33
|
+
)
|
29
34
|
end
|
30
35
|
end
|
data/lib/google_drive/acl.rb
CHANGED
@@ -21,14 +21,15 @@ module GoogleDrive
|
|
21
21
|
@session = session
|
22
22
|
@file = file
|
23
23
|
api_permissions = @session.drive.list_permissions(@file.id, fields: '*')
|
24
|
-
@entries =
|
24
|
+
@entries =
|
25
|
+
api_permissions.permissions.map { |perm| AclEntry.new(perm, self) }
|
25
26
|
end
|
26
27
|
|
27
28
|
def_delegators(:@entries, :size, :[], :each)
|
28
29
|
|
29
|
-
# Adds a new entry. +entry+ is either a GoogleDrive::AclEntry or a Hash with
|
30
|
-
# +:type+, +:email_address+, +:domain+, +:role+ and
|
31
|
-
# See GoogleDrive::AclEntry#type and
|
30
|
+
# Adds a new entry. +entry+ is either a GoogleDrive::AclEntry or a Hash with
|
31
|
+
# keys +:type+, +:email_address+, +:domain+, +:role+ and
|
32
|
+
# +:allow_file_discovery+. See GoogleDrive::AclEntry#type and
|
32
33
|
# GoogleDrive::AclEntry#role for the document of the fields.
|
33
34
|
#
|
34
35
|
# Also you can pass the second hash argument +options+, which specifies
|
@@ -37,9 +38,9 @@ module GoogleDrive
|
|
37
38
|
# * :email_message -- A custom message to include in notification emails
|
38
39
|
# * :send_notification_email -- Whether to send notification emails
|
39
40
|
# when sharing to users or groups. (Default: true)
|
40
|
-
# * :transfer_ownership -- Whether to transfer ownership to the specified
|
41
|
-
# and downgrade the current owner to a writer. This parameter is
|
42
|
-
# acknowledgement of the side effect. (Default: false)
|
41
|
+
# * :transfer_ownership -- Whether to transfer ownership to the specified
|
42
|
+
# user and downgrade the current owner to a writer. This parameter is
|
43
|
+
# required as an acknowledgement of the side effect. (Default: false)
|
43
44
|
#
|
44
45
|
# e.g.
|
45
46
|
# # A specific user can read or write.
|
@@ -64,8 +65,11 @@ module GoogleDrive
|
|
64
65
|
# See here for parameter detais:
|
65
66
|
# https://developers.google.com/drive/v3/reference/permissions/create
|
66
67
|
def push(params_or_entry, options = {})
|
67
|
-
entry = params_or_entry.is_a?(AclEntry) ?
|
68
|
-
|
68
|
+
entry = params_or_entry.is_a?(AclEntry) ?
|
69
|
+
params_or_entry : AclEntry.new(params_or_entry)
|
70
|
+
api_permission = @session.drive.create_permission(
|
71
|
+
@file.id, entry.params, { fields: '*' }.merge(options)
|
72
|
+
)
|
69
73
|
new_entry = AclEntry.new(api_permission, self)
|
70
74
|
@entries.push(new_entry)
|
71
75
|
new_entry
|
@@ -83,13 +87,14 @@ module GoogleDrive
|
|
83
87
|
# @api private
|
84
88
|
def update_role(entry)
|
85
89
|
api_permission = @session.drive.update_permission(
|
86
|
-
@file.id, entry.id, {role: entry.role}, fields: '*'
|
90
|
+
@file.id, entry.id, { role: entry.role }, fields: '*'
|
91
|
+
)
|
87
92
|
entry.api_permission = api_permission
|
88
93
|
entry
|
89
94
|
end
|
90
95
|
|
91
96
|
def inspect
|
92
|
-
"\#<%p %p>"
|
97
|
+
format("\#<%p %p>", self.class, @entries)
|
93
98
|
end
|
94
99
|
end
|
95
100
|
end
|
@@ -54,7 +54,7 @@ module GoogleDrive
|
|
54
54
|
@params ? @params[:type] : @api_permission.type
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
alias scope_type type
|
58
58
|
|
59
59
|
def additional_roles
|
60
60
|
@params ? @params[:additionalRoles] : @api_permission.additional_roles
|
@@ -81,8 +81,6 @@ module GoogleDrive
|
|
81
81
|
@params[:email_address]
|
82
82
|
when 'domain'
|
83
83
|
@params[:domain]
|
84
|
-
else
|
85
|
-
nil
|
86
84
|
end
|
87
85
|
else
|
88
86
|
case @api_permission.type
|
@@ -90,18 +88,17 @@ module GoogleDrive
|
|
90
88
|
@api_permission.email_address
|
91
89
|
when 'domain'
|
92
90
|
@api_permission.domain
|
93
|
-
else
|
94
|
-
nil
|
95
91
|
end
|
96
92
|
end
|
97
93
|
end
|
98
94
|
|
99
|
-
|
95
|
+
alias scope value
|
100
96
|
|
101
97
|
# If +false+, the file is shared only with people who know the link.
|
102
98
|
# Only used for type "anyone".
|
103
99
|
def allow_file_discovery
|
104
|
-
@params ?
|
100
|
+
@params ?
|
101
|
+
@params[:allow_file_discovery] : @api_permission.allow_file_discovery
|
105
102
|
end
|
106
103
|
|
107
104
|
# If +true+, the file is shared only with people who know the link.
|
@@ -110,7 +107,7 @@ module GoogleDrive
|
|
110
107
|
allow_file_discovery == false
|
111
108
|
end
|
112
109
|
|
113
|
-
|
110
|
+
alias with_key with_link
|
114
111
|
|
115
112
|
# Changes the role of the scope.
|
116
113
|
#
|
@@ -128,17 +125,22 @@ module GoogleDrive
|
|
128
125
|
def inspect
|
129
126
|
case type
|
130
127
|
when 'user', 'group'
|
131
|
-
|
132
|
-
|
128
|
+
format(
|
129
|
+
"\#<%p type=%p, email_address=%p, role=%p>",
|
130
|
+
self.class, type, email_address, role
|
131
|
+
)
|
133
132
|
when 'domain'
|
134
|
-
|
135
|
-
|
133
|
+
format(
|
134
|
+
"\#<%p type=%p, domain=%p, role=%p>",
|
135
|
+
self.class, type, domain, role
|
136
|
+
)
|
136
137
|
when 'anyone'
|
137
|
-
|
138
|
-
|
138
|
+
format(
|
139
|
+
"\#<%p type=%p, role=%p, allow_file_discovery=%p>",
|
140
|
+
self.class, type, role, allow_file_discovery
|
141
|
+
)
|
139
142
|
else
|
140
|
-
"\#<%p type=%p, role=%p>"
|
141
|
-
[self.class, type, role]
|
143
|
+
format("\#<%p type=%p, role=%p>", self.class, type, role)
|
142
144
|
end
|
143
145
|
end
|
144
146
|
|
@@ -21,10 +21,10 @@ module GoogleDrive
|
|
21
21
|
@drive = Google::Apis::DriveV3::DriveService.new
|
22
22
|
@drive.authorization = authorization
|
23
23
|
|
24
|
-
# Make the timeout virtually infinite because some of the operations
|
25
|
-
# can take very long.
|
24
|
+
# Make the timeout virtually infinite because some of the operations
|
25
|
+
# (e.g., uploading a large file) can take very long.
|
26
26
|
# This value is the maximal allowed timeout in seconds on JRuby.
|
27
|
-
t = (2
|
27
|
+
t = (2**31 - 1) / 1000
|
28
28
|
@drive.client_options.open_timeout_sec = t
|
29
29
|
@drive.client_options.read_timeout_sec = t
|
30
30
|
@drive.client_options.send_timeout_sec = t
|
@@ -8,8 +8,10 @@ require 'google_drive/spreadsheet'
|
|
8
8
|
module GoogleDrive
|
9
9
|
# Represents a folder in Google Drive.
|
10
10
|
#
|
11
|
-
# Use GoogleDrive::Session#root_collection,
|
12
|
-
#
|
11
|
+
# Use GoogleDrive::Session#root_collection,
|
12
|
+
# GoogleDrive::Collection#subcollections,
|
13
|
+
# or GoogleDrive::Session#collection_by_url to get GoogleDrive::Collection
|
14
|
+
# object.
|
13
15
|
class Collection < GoogleDrive::File
|
14
16
|
include(Util)
|
15
17
|
|
@@ -17,26 +19,33 @@ module GoogleDrive
|
|
17
19
|
|
18
20
|
# Adds the given GoogleDrive::File to the folder.
|
19
21
|
def add(file)
|
20
|
-
@session.drive.update_file(
|
22
|
+
@session.drive.update_file(
|
23
|
+
file.id, add_parents: id, fields: '', supports_team_drives: true
|
24
|
+
)
|
21
25
|
nil
|
22
26
|
end
|
23
27
|
|
24
28
|
# Removes the given GoogleDrive::File from the folder.
|
25
29
|
def remove(file)
|
26
|
-
@session.drive.update_file(
|
30
|
+
@session.drive.update_file(
|
31
|
+
file.id, remove_parents: id, fields: '', supports_team_drives: true
|
32
|
+
)
|
27
33
|
end
|
28
34
|
|
29
|
-
# Creates a sub-folder with given title. Returns GoogleDrive::Collection
|
35
|
+
# Creates a sub-folder with given title. Returns GoogleDrive::Collection
|
36
|
+
# object.
|
30
37
|
def create_subcollection(title)
|
31
38
|
file_metadata = {
|
32
39
|
name: title,
|
33
40
|
mime_type: 'application/vnd.google-apps.folder',
|
34
|
-
parents: [
|
41
|
+
parents: [id]
|
35
42
|
}
|
36
|
-
file = @session.drive.create_file(
|
43
|
+
file = @session.drive.create_file(
|
44
|
+
file_metadata, fields: '*', supports_team_drives: true
|
45
|
+
)
|
37
46
|
@session.wrap_api_file(file)
|
38
47
|
end
|
39
|
-
|
48
|
+
|
40
49
|
alias create_subfolder create_subcollection
|
41
50
|
|
42
51
|
# Returns true if this is a root folder.
|
@@ -44,8 +53,8 @@ module GoogleDrive
|
|
44
53
|
!api_file.parents || api_file.parents.empty?
|
45
54
|
end
|
46
55
|
|
47
|
-
# Returns all the files (including spreadsheets, documents, subfolders) in
|
48
|
-
# You can specify parameters documented at
|
56
|
+
# Returns all the files (including spreadsheets, documents, subfolders) in
|
57
|
+
# the folder. You can specify parameters documented at
|
49
58
|
# https://developers.google.com/drive/v3/web/search-parameters
|
50
59
|
#
|
51
60
|
# e.g.
|
@@ -59,73 +68,74 @@ module GoogleDrive
|
|
59
68
|
# # Same as above with a placeholder.
|
60
69
|
# collection.files(q: ["name = ?", "hoge"])
|
61
70
|
#
|
62
|
-
# By default, it returns the first 100 files. See document of
|
63
|
-
# for how to get all files.
|
71
|
+
# By default, it returns the first 100 files. See document of
|
72
|
+
# GoogleDrive::Session#files method for how to get all files.
|
64
73
|
def files(params = {}, &block)
|
65
74
|
files_with_type(nil, params, &block)
|
66
75
|
end
|
67
76
|
|
68
77
|
# Uploads a file to this folder. See Session#upload_from_file for details.
|
69
78
|
def upload_from_file(path, title = nil, params = {})
|
70
|
-
params = {parents: [
|
79
|
+
params = { parents: [id] }.merge(params)
|
71
80
|
@session.upload_from_file(path, title, params)
|
72
81
|
end
|
73
82
|
|
74
83
|
# Uploads a file to this folder. See Session#upload_from_io for details.
|
75
84
|
def upload_from_io(io, title = 'Untitled', params = {})
|
76
|
-
params = {parents: [
|
85
|
+
params = { parents: [id] }.merge(params)
|
77
86
|
@session.upload_from_io(io, title, params)
|
78
87
|
end
|
79
88
|
|
80
89
|
# Uploads a file to this folder. See Session#upload_from_string for details.
|
81
90
|
def upload_from_string(content, title = 'Untitled', params = {})
|
82
|
-
params = {parents: [
|
91
|
+
params = { parents: [id] }.merge(params)
|
83
92
|
@session.upload_from_string(content, title, params)
|
84
93
|
end
|
85
94
|
|
86
|
-
|
95
|
+
alias contents files
|
87
96
|
|
88
97
|
# Returns all the spreadsheets in the folder.
|
89
98
|
#
|
90
|
-
# By default, it returns the first 100 spreadsheets. See document of
|
91
|
-
# for how to get all spreadsheets.
|
99
|
+
# By default, it returns the first 100 spreadsheets. See document of
|
100
|
+
# GoogleDrive::Session#files method for how to get all spreadsheets.
|
92
101
|
def spreadsheets(params = {}, &block)
|
93
102
|
files_with_type('application/vnd.google-apps.spreadsheet', params, &block)
|
94
103
|
end
|
95
104
|
|
96
105
|
# Returns all the Google Docs documents in the folder.
|
97
106
|
#
|
98
|
-
# By default, it returns the first 100 documents. See document of
|
99
|
-
# for how to get all documents.
|
107
|
+
# By default, it returns the first 100 documents. See document of
|
108
|
+
# GoogleDrive::Session#files method for how to get all documents.
|
100
109
|
def documents(params = {}, &block)
|
101
110
|
files_with_type('application/vnd.google-apps.document', params, &block)
|
102
111
|
end
|
103
112
|
|
104
113
|
# Returns all its subfolders.
|
105
114
|
#
|
106
|
-
# By default, it returns the first 100 subfolders. See document of
|
107
|
-
# for how to get all subfolders.
|
115
|
+
# By default, it returns the first 100 subfolders. See document of
|
116
|
+
# GoogleDrive::Session#files method for how to get all subfolders.
|
108
117
|
def subcollections(params = {}, &block)
|
109
118
|
files_with_type('application/vnd.google-apps.folder', params, &block)
|
110
119
|
end
|
111
|
-
|
120
|
+
|
112
121
|
alias subfolders subcollections
|
113
122
|
|
114
|
-
# Returns a file (can be a spreadsheet, document, subfolder or other files)
|
115
|
-
# folder which exactly matches +title+ as GoogleDrive::File.
|
116
|
-
# Returns nil if not found. If multiple folders with the +title+ are found,
|
117
|
-
# one of them.
|
123
|
+
# Returns a file (can be a spreadsheet, document, subfolder or other files)
|
124
|
+
# in the folder which exactly matches +title+ as GoogleDrive::File.
|
125
|
+
# Returns nil if not found. If multiple folders with the +title+ are found,
|
126
|
+
# returns one of them.
|
118
127
|
#
|
119
128
|
# If given an Array, does a recursive subfolder traversal.
|
120
129
|
def file_by_title(title)
|
121
130
|
file_by_title_with_type(title, nil)
|
122
131
|
end
|
123
|
-
|
132
|
+
|
124
133
|
alias file_by_name file_by_title
|
125
134
|
|
126
|
-
# Returns its subfolder whose title exactly matches +title+ as
|
127
|
-
#
|
128
|
-
#
|
135
|
+
# Returns its subfolder whose title exactly matches +title+ as
|
136
|
+
# GoogleDrive::Collection.
|
137
|
+
# Returns nil if not found. If multiple folders with the +title+ are found,
|
138
|
+
# returns one of them.
|
129
139
|
#
|
130
140
|
# If given an Array, does a recursive subfolder traversal.
|
131
141
|
def subcollection_by_title(title)
|
@@ -133,7 +143,7 @@ module GoogleDrive
|
|
133
143
|
end
|
134
144
|
|
135
145
|
alias subfolder_by_name subcollection_by_title
|
136
|
-
|
146
|
+
|
137
147
|
# Returns URL of the deprecated contents feed.
|
138
148
|
def contents_url
|
139
149
|
document_feed_url + '/contents'
|
@@ -154,7 +164,7 @@ module GoogleDrive
|
|
154
164
|
files_with_type(type, q: ['name = ?', title], page_size: 1)[0]
|
155
165
|
end
|
156
166
|
end
|
157
|
-
|
167
|
+
|
158
168
|
alias file_by_name_with_type file_by_title_with_type
|
159
169
|
|
160
170
|
private
|
@@ -162,15 +172,16 @@ module GoogleDrive
|
|
162
172
|
def files_with_type(type, params = {}, &block)
|
163
173
|
params = convert_params(params)
|
164
174
|
query = construct_and_query([
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
175
|
+
['? in parents', id],
|
176
|
+
type ? ['mimeType = ?', type] : nil,
|
177
|
+
params[:q]
|
178
|
+
])
|
169
179
|
params = params.merge(q: query)
|
170
|
-
# This is faster than calling children.list and then files.get for each
|
180
|
+
# This is faster than calling children.list and then files.get for each
|
181
|
+
# file.
|
171
182
|
@session.files(params, &block)
|
172
183
|
end
|
173
184
|
end
|
174
|
-
|
185
|
+
|
175
186
|
Folder = Collection
|
176
187
|
end
|
data/lib/google_drive/config.rb
CHANGED
@@ -6,7 +6,7 @@ require 'json'
|
|
6
6
|
module GoogleDrive
|
7
7
|
# @api private
|
8
8
|
class Config
|
9
|
-
FIELDS = %w
|
9
|
+
FIELDS = %w[client_id client_secret scope refresh_token type].freeze
|
10
10
|
attr_accessor(*FIELDS)
|
11
11
|
|
12
12
|
def initialize(config_path)
|
@@ -19,7 +19,7 @@ module GoogleDrive
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def save
|
22
|
-
::File.open(@config_path, 'w',
|
22
|
+
::File.open(@config_path, 'w', 0o600) { |f| f.write(to_json) }
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
data/lib/google_drive/file.rb
CHANGED
@@ -9,12 +9,14 @@ require 'google_drive/util'
|
|
9
9
|
require 'google_drive/acl'
|
10
10
|
|
11
11
|
module GoogleDrive
|
12
|
-
# A file in Google Drive, including Google Docs
|
12
|
+
# A file in Google Drive, including a Google Docs
|
13
|
+
# document/spreadsheet/presentation and a folder.
|
13
14
|
#
|
14
15
|
# Use GoogleDrive::Session#files or GoogleDrive::Session#file_by_title to
|
15
16
|
# get this object.
|
16
17
|
#
|
17
|
-
# In addition to the methods below, properties defined here are also available
|
18
|
+
# In addition to the methods below, properties defined here are also available
|
19
|
+
# as attributes:
|
18
20
|
# https://developers.google.com/drive/v3/reference/files#resource
|
19
21
|
#
|
20
22
|
# e.g.,
|
@@ -36,18 +38,21 @@ module GoogleDrive
|
|
36
38
|
|
37
39
|
# Reloads file metadata such as title and acl.
|
38
40
|
def reload_metadata
|
39
|
-
@api_file = @session.drive.get_file(
|
41
|
+
@api_file = @session.drive.get_file(
|
42
|
+
id, fields: '*', supports_team_drives: true
|
43
|
+
)
|
40
44
|
@acl = Acl.new(@session, self) if @acl
|
41
45
|
end
|
42
46
|
|
43
47
|
# Returns resource_type + ":" + id.
|
44
48
|
def resource_id
|
45
|
-
'%s:%s'
|
49
|
+
format('%s:%s', resource_type, id)
|
46
50
|
end
|
47
51
|
|
48
52
|
# URL of feed used in the deprecated document list feed API.
|
49
53
|
def document_feed_url
|
50
|
-
'https://docs.google.com/feeds/default/private/full/' +
|
54
|
+
'https://docs.google.com/feeds/default/private/full/' +
|
55
|
+
CGI.escape(resource_id)
|
51
56
|
end
|
52
57
|
|
53
58
|
# Deprecated ACL feed URL of the file.
|
@@ -65,7 +70,7 @@ module GoogleDrive
|
|
65
70
|
reload_metadata if params[:reload]
|
66
71
|
api_file.name
|
67
72
|
end
|
68
|
-
|
73
|
+
|
69
74
|
alias name title
|
70
75
|
|
71
76
|
# URL to view/edit the file in a Web browser.
|
@@ -75,11 +80,11 @@ module GoogleDrive
|
|
75
80
|
api_file.web_view_link
|
76
81
|
end
|
77
82
|
|
78
|
-
# Content types you can specify in methods download_to_file,
|
79
|
-
# download_to_io
|
83
|
+
# Content types you can specify in methods download_to_file,
|
84
|
+
# download_to_string, download_to_io.
|
80
85
|
#
|
81
|
-
# This returns zero or one file type. You may be able to download the file
|
82
|
-
# export_as_file, export_as_string, or export_to_io.
|
86
|
+
# This returns zero or one file type. You may be able to download the file
|
87
|
+
# in other formats using export_as_file, export_as_string, or export_to_io.
|
83
88
|
def available_content_types
|
84
89
|
api_file.web_content_link ? [api_file.mime_type] : []
|
85
90
|
end
|
@@ -90,8 +95,9 @@ module GoogleDrive
|
|
90
95
|
# To export the file in other formats, use export_as_file.
|
91
96
|
def download_to_file(path, params = {})
|
92
97
|
@session.drive.get_file(
|
93
|
-
|
94
|
-
|
98
|
+
id,
|
99
|
+
{ download_dest: path, supports_team_drives: true }.merge(params)
|
100
|
+
)
|
95
101
|
end
|
96
102
|
|
97
103
|
# Downloads the file and returns as a String.
|
@@ -108,8 +114,9 @@ module GoogleDrive
|
|
108
114
|
# To export the file in other formats, use export_to_io.
|
109
115
|
def download_to_io(io, params = {})
|
110
116
|
@session.drive.get_file(
|
111
|
-
|
112
|
-
|
117
|
+
id,
|
118
|
+
{ download_dest: io, supports_team_drives: true }.merge(params)
|
119
|
+
)
|
113
120
|
end
|
114
121
|
|
115
122
|
# Export the file to +path+ in content type +format+.
|
@@ -119,15 +126,15 @@ module GoogleDrive
|
|
119
126
|
# spreadsheet.export_as_file("/path/to/hoge.csv")
|
120
127
|
# spreadsheet.export_as_file("/path/to/hoge", "text/csv")
|
121
128
|
#
|
122
|
-
# If you want to download the file in the original format,
|
129
|
+
# If you want to download the file in the original format,
|
130
|
+
# use download_to_file instead.
|
123
131
|
def export_as_file(path, format = nil)
|
124
132
|
unless format
|
125
133
|
format = EXT_TO_CONTENT_TYPE[::File.extname(path).downcase]
|
126
134
|
unless format
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
path)
|
135
|
+
raise(ArgumentError,
|
136
|
+
format("Cannot guess format from the file name: %s\n" \
|
137
|
+
'Specify format argument explicitly.', path))
|
131
138
|
end
|
132
139
|
end
|
133
140
|
export_to_dest(path, format)
|
@@ -138,7 +145,8 @@ module GoogleDrive
|
|
138
145
|
# e.g.,
|
139
146
|
# spreadsheet.export_as_string("text/csv")
|
140
147
|
#
|
141
|
-
# If you want to download the file in the original format, use
|
148
|
+
# If you want to download the file in the original format, use
|
149
|
+
# download_to_string instead.
|
142
150
|
def export_as_string(format)
|
143
151
|
sio = StringIO.new
|
144
152
|
export_to_dest(sio, format)
|
@@ -147,7 +155,8 @@ module GoogleDrive
|
|
147
155
|
|
148
156
|
# Export the file to +io+ in content type +format+.
|
149
157
|
#
|
150
|
-
# If you want to download the file in the original format, use
|
158
|
+
# If you want to download the file in the original format, use
|
159
|
+
# download_to_io instead.
|
151
160
|
def export_to_io(io, format)
|
152
161
|
export_to_dest(io, format)
|
153
162
|
end
|
@@ -165,7 +174,8 @@ module GoogleDrive
|
|
165
174
|
# e.g.
|
166
175
|
# file.update_from_file("/path/to/hoge.txt")
|
167
176
|
def update_from_file(path, params = {})
|
168
|
-
# Somehow it doesn't work if I specify the file name directly as
|
177
|
+
# Somehow it doesn't work if I specify the file name directly as
|
178
|
+
# upload_source.
|
169
179
|
open(path, 'rb') do |f|
|
170
180
|
update_from_io(f, params)
|
171
181
|
end
|
@@ -196,7 +206,7 @@ module GoogleDrive
|
|
196
206
|
nil
|
197
207
|
end
|
198
208
|
|
199
|
-
|
209
|
+
alias title= rename
|
200
210
|
|
201
211
|
# Creates copy of this file with the given title.
|
202
212
|
def copy(title)
|
@@ -204,7 +214,7 @@ module GoogleDrive
|
|
204
214
|
@session.wrap_api_file(api_file)
|
205
215
|
end
|
206
216
|
|
207
|
-
|
217
|
+
alias duplicate copy
|
208
218
|
|
209
219
|
# Returns GoogleDrive::Acl object for the file.
|
210
220
|
#
|
@@ -236,7 +246,7 @@ module GoogleDrive
|
|
236
246
|
end
|
237
247
|
|
238
248
|
def inspect
|
239
|
-
"\#<%p id=%p title=%p>"
|
249
|
+
format("\#<%p id=%p title=%p>", self.class, id, title)
|
240
250
|
end
|
241
251
|
|
242
252
|
private
|