google_drive 2.1.7 → 2.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -12
- data/lib/google_drive/collection.rb +36 -22
- data/lib/google_drive/config.rb +1 -1
- data/lib/google_drive/file.rb +2 -0
- data/lib/google_drive/session.rb +32 -20
- data/lib/google_drive/spreadsheet.rb +2 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a307d368da1d8c3aaddcc80fce8e3ab842e31fbc
|
4
|
+
data.tar.gz: f638dfeb91a08128bfca2e547973efd2b1172a42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6ead9f1d7cedf6efedd25b88b0d36d8599c63824ed616d3401eebaf9d0431c29e4d41ef6e4ec1cfa1754de76dc47c23754946c17334bcd264929e37ffd1e40a
|
7
|
+
data.tar.gz: 56a2e06379ea4a54efbc2c2ac53d65c1f93b89ab7036f6989ce79b143c45b3d43dee68d1fe9d9102b1133a5aab82f94d6d1ce8332475eafd2e2b55c65be4e87b
|
data/README.md
CHANGED
@@ -1,15 +1,28 @@
|
|
1
|
+
# google-drive-ruby [![Build Status](https://travis-ci.org/gimite/google-drive-ruby.svg?branch=master)](https://travis-ci.org/gimite/google-drive-ruby)
|
2
|
+
|
1
3
|
This is a Ruby library to read/write files/spreadsheets in Google Drive/Docs.
|
2
4
|
|
3
5
|
NOTE: This is NOT a library to create Google Drive App.
|
4
6
|
|
5
7
|
|
6
|
-
|
8
|
+
* [Migration from ver. 0.x.x / 1.x.x](#migration)
|
9
|
+
* [How to install](#install)
|
10
|
+
* [How to use](#use)
|
11
|
+
* [API documentation](http://www.rubydoc.info/gems/google_drive)
|
12
|
+
* [Authorization](https://github.com/gimite/google-drive-ruby/blob/master/doc/authorization.md)
|
13
|
+
* [Github](http://github.com/gimite/google-drive-ruby)
|
14
|
+
* [License](#license)
|
15
|
+
* [Supported environments](#environments)
|
16
|
+
* [Author](#author)
|
17
|
+
|
18
|
+
|
19
|
+
## <a name="migration">Migration from ver. 0.x.x / 1.x.x</a>
|
7
20
|
|
8
21
|
There are some incompatible API changes. See
|
9
22
|
[MIGRATING.md](https://github.com/gimite/google-drive-ruby/blob/master/MIGRATING.md).
|
10
23
|
|
11
24
|
|
12
|
-
## How to install
|
25
|
+
## <a name="install">How to install</a>
|
13
26
|
|
14
27
|
Add this line to your application's Gemfile:
|
15
28
|
|
@@ -35,7 +48,7 @@ If you need system wide installation, execute below:
|
|
35
48
|
$ sudo gem install google_drive
|
36
49
|
```
|
37
50
|
|
38
|
-
## How to use
|
51
|
+
## <a name="use">How to use</a>
|
39
52
|
|
40
53
|
### Authorization
|
41
54
|
|
@@ -107,20 +120,17 @@ p ws.rows #==> [["fuga", ""], ["foo", "bar]]
|
|
107
120
|
ws.reload
|
108
121
|
```
|
109
122
|
|
110
|
-
## Learn more
|
111
123
|
|
112
|
-
|
113
|
-
* [Authorization](https://github.com/gimite/google-drive-ruby/blob/master/doc/authorization.md)
|
114
|
-
* [Github](http://github.com/gimite/google-drive-ruby)
|
115
|
-
|
116
|
-
## License
|
124
|
+
## <a name="license">License</a>
|
117
125
|
|
118
126
|
New BSD Licence.
|
119
127
|
|
120
|
-
## Supported environments
|
121
128
|
|
122
|
-
|
129
|
+
## <a name="environments">Supported environments</a>
|
130
|
+
|
131
|
+
Ruby 2.0.0 or later. Checked with Ruby 2.4.1.
|
132
|
+
|
123
133
|
|
124
|
-
## Author
|
134
|
+
## <a name="author">Author</a>
|
125
135
|
|
126
136
|
[Hiroshi Ichikawa](http://gimite.net/en/index.php?Contact)
|
@@ -6,25 +6,27 @@ require 'google_drive/error'
|
|
6
6
|
require 'google_drive/spreadsheet'
|
7
7
|
|
8
8
|
module GoogleDrive
|
9
|
+
# Represents a folder in Google Drive.
|
10
|
+
#
|
9
11
|
# Use GoogleDrive::Session#root_collection, GoogleDrive::Collection#subcollections,
|
10
12
|
# or GoogleDrive::Session#collection_by_url to get GoogleDrive::Collection object.
|
11
13
|
class Collection < GoogleDrive::File
|
12
14
|
include(Util)
|
13
15
|
|
14
|
-
|
16
|
+
alias collection_feed_url document_feed_url
|
15
17
|
|
16
|
-
# Adds the given GoogleDrive::File to the
|
18
|
+
# Adds the given GoogleDrive::File to the folder.
|
17
19
|
def add(file)
|
18
20
|
@session.drive.update_file(file.id, add_parents: self.id, fields: '', supports_team_drives: true)
|
19
21
|
nil
|
20
22
|
end
|
21
23
|
|
22
|
-
# Removes the given GoogleDrive::File from the
|
24
|
+
# Removes the given GoogleDrive::File from the folder.
|
23
25
|
def remove(file)
|
24
26
|
@session.drive.update_file(file.id, remove_parents: self.id, fields: '', supports_team_drives: true)
|
25
27
|
end
|
26
28
|
|
27
|
-
# Creates a sub-
|
29
|
+
# Creates a sub-folder with given title. Returns GoogleDrive::Collection object.
|
28
30
|
def create_subcollection(title)
|
29
31
|
file_metadata = {
|
30
32
|
name: title,
|
@@ -34,19 +36,21 @@ module GoogleDrive
|
|
34
36
|
file = @session.drive.create_file(file_metadata, fields: '*', supports_team_drives: true)
|
35
37
|
@session.wrap_api_file(file)
|
36
38
|
end
|
39
|
+
|
40
|
+
alias create_subfolder create_subcollection
|
37
41
|
|
38
|
-
# Returns true if this is a root
|
42
|
+
# Returns true if this is a root folder.
|
39
43
|
def root?
|
40
44
|
!api_file.parents || api_file.parents.empty?
|
41
45
|
end
|
42
46
|
|
43
|
-
# Returns all the files (including spreadsheets, documents,
|
47
|
+
# Returns all the files (including spreadsheets, documents, subfolders) in the folder.
|
44
48
|
# You can specify parameters documented at
|
45
49
|
# https://developers.google.com/drive/v3/web/search-parameters
|
46
50
|
#
|
47
51
|
# e.g.
|
48
52
|
#
|
49
|
-
# # Gets all the files in the
|
53
|
+
# # Gets all the files in the folder, including subfolders.
|
50
54
|
# collection.files
|
51
55
|
#
|
52
56
|
# # Gets only files with title "hoge".
|
@@ -61,19 +65,19 @@ module GoogleDrive
|
|
61
65
|
files_with_type(nil, params, &block)
|
62
66
|
end
|
63
67
|
|
64
|
-
#
|
68
|
+
# Uploads a file to this folder. See Session#upload_from_file for details.
|
65
69
|
def upload_from_file(path, title = nil, params = {})
|
66
70
|
params = {parents: [self.id]}.merge(params)
|
67
71
|
@session.upload_from_file(path, title, params)
|
68
72
|
end
|
69
73
|
|
70
|
-
#
|
74
|
+
# Uploads a file to this folder. See Session#upload_from_io for details.
|
71
75
|
def upload_from_io(io, title = 'Untitled', params = {})
|
72
76
|
params = {parents: [self.id]}.merge(params)
|
73
77
|
@session.upload_from_io(io, title, params)
|
74
78
|
end
|
75
79
|
|
76
|
-
#
|
80
|
+
# Uploads a file to this folder. See Session#upload_from_string for details.
|
77
81
|
def upload_from_string(content, title = 'Untitled', params = {})
|
78
82
|
params = {parents: [self.id]}.merge(params)
|
79
83
|
@session.upload_from_string(content, title, params)
|
@@ -81,7 +85,7 @@ module GoogleDrive
|
|
81
85
|
|
82
86
|
alias_method :contents, :files
|
83
87
|
|
84
|
-
# Returns all the spreadsheets in the
|
88
|
+
# Returns all the spreadsheets in the folder.
|
85
89
|
#
|
86
90
|
# By default, it returns the first 100 spreadsheets. See document of GoogleDrive::Session#files method
|
87
91
|
# for how to get all spreadsheets.
|
@@ -89,7 +93,7 @@ module GoogleDrive
|
|
89
93
|
files_with_type('application/vnd.google-apps.spreadsheet', params, &block)
|
90
94
|
end
|
91
95
|
|
92
|
-
# Returns all the Google Docs documents in the
|
96
|
+
# Returns all the Google Docs documents in the folder.
|
93
97
|
#
|
94
98
|
# By default, it returns the first 100 documents. See document of GoogleDrive::Session#files method
|
95
99
|
# for how to get all documents.
|
@@ -97,33 +101,39 @@ module GoogleDrive
|
|
97
101
|
files_with_type('application/vnd.google-apps.document', params, &block)
|
98
102
|
end
|
99
103
|
|
100
|
-
# Returns all its
|
104
|
+
# Returns all its subfolders.
|
101
105
|
#
|
102
|
-
# By default, it returns the first 100
|
103
|
-
# for how to get all
|
106
|
+
# By default, it returns the first 100 subfolders. See document of GoogleDrive::Session#files method
|
107
|
+
# for how to get all subfolders.
|
104
108
|
def subcollections(params = {}, &block)
|
105
109
|
files_with_type('application/vnd.google-apps.folder', params, &block)
|
106
110
|
end
|
111
|
+
|
112
|
+
alias subfolders subcollections
|
107
113
|
|
108
|
-
# Returns a file (can be a spreadsheet, document,
|
109
|
-
#
|
110
|
-
# Returns nil if not found. If multiple
|
114
|
+
# Returns a file (can be a spreadsheet, document, subfolder or other files) in the
|
115
|
+
# folder which exactly matches +title+ as GoogleDrive::File.
|
116
|
+
# Returns nil if not found. If multiple folders with the +title+ are found, returns
|
111
117
|
# one of them.
|
112
118
|
#
|
113
|
-
# If given an Array, does a recursive
|
119
|
+
# If given an Array, does a recursive subfolder traversal.
|
114
120
|
def file_by_title(title)
|
115
121
|
file_by_title_with_type(title, nil)
|
116
122
|
end
|
123
|
+
|
124
|
+
alias file_by_name file_by_title
|
117
125
|
|
118
|
-
# Returns its
|
119
|
-
# Returns nil if not found. If multiple
|
126
|
+
# Returns its subfolder whose title exactly matches +title+ as GoogleDrive::Collection.
|
127
|
+
# Returns nil if not found. If multiple folders with the +title+ are found, returns
|
120
128
|
# one of them.
|
121
129
|
#
|
122
|
-
# If given an Array, does a recursive
|
130
|
+
# If given an Array, does a recursive subfolder traversal.
|
123
131
|
def subcollection_by_title(title)
|
124
132
|
file_by_title_with_type(title, 'application/vnd.google-apps.folder')
|
125
133
|
end
|
126
134
|
|
135
|
+
alias subfolder_by_name subcollection_by_title
|
136
|
+
|
127
137
|
# Returns URL of the deprecated contents feed.
|
128
138
|
def contents_url
|
129
139
|
document_feed_url + '/contents'
|
@@ -144,6 +154,8 @@ module GoogleDrive
|
|
144
154
|
files_with_type(type, q: ['name = ?', title], page_size: 1)[0]
|
145
155
|
end
|
146
156
|
end
|
157
|
+
|
158
|
+
alias file_by_name_with_type file_by_title_with_type
|
147
159
|
|
148
160
|
private
|
149
161
|
|
@@ -159,4 +171,6 @@ module GoogleDrive
|
|
159
171
|
@session.files(params, &block)
|
160
172
|
end
|
161
173
|
end
|
174
|
+
|
175
|
+
Folder = Collection
|
162
176
|
end
|
data/lib/google_drive/config.rb
CHANGED
data/lib/google_drive/file.rb
CHANGED
data/lib/google_drive/session.rb
CHANGED
@@ -93,7 +93,12 @@ module GoogleDrive
|
|
93
93
|
# save
|
94
94
|
def self.from_config(config, options = {})
|
95
95
|
if config.is_a?(String)
|
96
|
-
|
96
|
+
config_path = config
|
97
|
+
config = Config.new(config_path)
|
98
|
+
if config.type == 'service_account'
|
99
|
+
return from_service_account_key(
|
100
|
+
config_path, options[:scope] || DEFAULT_SCOPE)
|
101
|
+
end
|
97
102
|
end
|
98
103
|
|
99
104
|
config.scope ||= DEFAULT_SCOPE
|
@@ -198,7 +203,7 @@ module GoogleDrive
|
|
198
203
|
# GoogleDrive::Collection). Returns nil if not found. If multiple files with the +title+ are
|
199
204
|
# found, returns one of them.
|
200
205
|
#
|
201
|
-
# If given an Array, traverses
|
206
|
+
# If given an Array, traverses folders by title. e.g.
|
202
207
|
# session.file_by_title(["myfolder", "mysubfolder/even/w/slash", "myfile"])
|
203
208
|
def file_by_title(title)
|
204
209
|
if title.is_a?(Array)
|
@@ -207,6 +212,8 @@ module GoogleDrive
|
|
207
212
|
files(q: ['name = ?', title], page_size: 1)[0]
|
208
213
|
end
|
209
214
|
end
|
215
|
+
|
216
|
+
alias file_by_name file_by_title
|
210
217
|
|
211
218
|
# Returns a file (including a spreadsheet and a folder) with a given +id+.
|
212
219
|
#
|
@@ -285,6 +292,8 @@ module GoogleDrive
|
|
285
292
|
def spreadsheet_by_title(title)
|
286
293
|
spreadsheets(q: ['name = ?', title], page_size: 1)[0]
|
287
294
|
end
|
295
|
+
|
296
|
+
alias spreadsheet_by_name spreadsheet_by_title
|
288
297
|
|
289
298
|
# Returns GoogleDrive::Worksheet with given +url+.
|
290
299
|
# You must specify URL of either worksheet feed or cell-based feed of the worksheet.
|
@@ -313,47 +322,50 @@ module GoogleDrive
|
|
313
322
|
Worksheet.new(self, nil, worksheet_feed_entry)
|
314
323
|
end
|
315
324
|
|
316
|
-
# Returns the root
|
325
|
+
# Returns the root folder.
|
317
326
|
def root_collection
|
318
327
|
@root_collection ||= file_by_id('root')
|
319
328
|
end
|
329
|
+
|
330
|
+
alias root_folder root_collection
|
320
331
|
|
321
|
-
# Returns the top-level
|
332
|
+
# Returns the top-level folders (direct children of the root folder).
|
322
333
|
#
|
323
|
-
# By default, it returns the first 100
|
324
|
-
# all
|
334
|
+
# By default, it returns the first 100 folders. See document of files method for how to get
|
335
|
+
# all folders.
|
325
336
|
def collections(params = {}, &block)
|
326
337
|
root_collection.subcollections(params, &block)
|
327
338
|
end
|
339
|
+
|
340
|
+
alias folders collections
|
328
341
|
|
329
|
-
# Returns a top-level
|
342
|
+
# Returns a top-level folder whose title exactly matches +title+ as
|
330
343
|
# GoogleDrive::Collection.
|
331
|
-
# Returns nil if not found. If multiple
|
344
|
+
# Returns nil if not found. If multiple folders with the +title+ are found, returns
|
332
345
|
# one of them.
|
333
346
|
def collection_by_title(title)
|
334
347
|
root_collection.subcollection_by_title(title)
|
335
348
|
end
|
349
|
+
|
350
|
+
alias folders_by_name collection_by_title
|
336
351
|
|
337
352
|
# Returns GoogleDrive::Collection with given +url+.
|
338
|
-
#
|
339
|
-
#
|
340
|
-
#
|
341
|
-
# - URL of collection (folder) feed
|
353
|
+
#
|
354
|
+
# You must specify the URL of the page you get when you go to https://drive.google.com/
|
355
|
+
# with your browser and open a folder.
|
342
356
|
#
|
343
357
|
# e.g.
|
344
358
|
# session.collection_by_url(
|
345
|
-
# "https://drive.google.com
|
346
|
-
# "0B9GfDpQ2pBVUODNmOGE0NjIzMWU3ZC00NmUyLTk5NzEtYaFkZjY1MjAyxjMc")
|
347
|
-
# session.collection_by_url(
|
348
|
-
# "http://docs.google.com/feeds/default/private/full/folder%3A" +
|
349
|
-
# "0B9GfDpQ2pBVUODNmOGE0NjIzMWU3ZC00NmUyLTk5NzEtYaFkZjY1MjAyxjMc")
|
359
|
+
# "https://drive.google.com/drive/folders/1u99gpfHIk08RVK5q_vXxUqkxR1r6FUJH")
|
350
360
|
def collection_by_url(url)
|
351
361
|
file = file_by_url(url)
|
352
362
|
unless file.is_a?(Collection)
|
353
|
-
fail(GoogleDrive::Error, 'The file with the URL is not a
|
363
|
+
fail(GoogleDrive::Error, 'The file with the URL is not a folder: %s' % url)
|
354
364
|
end
|
355
365
|
file
|
356
366
|
end
|
367
|
+
|
368
|
+
alias folder_by_url collection_by_url
|
357
369
|
|
358
370
|
# Creates new spreadsheet and returns the new GoogleDrive::Spreadsheet.
|
359
371
|
#
|
@@ -547,7 +559,7 @@ module GoogleDrive
|
|
547
559
|
# Human-readable new spreadsheet/document.
|
548
560
|
when /\/d\/([^\/]+)/
|
549
561
|
return Regexp.last_match(1)
|
550
|
-
# Human-readable new
|
562
|
+
# Human-readable new folder page.
|
551
563
|
when /^\/drive\/[^\/]+\/([^\/]+)/
|
552
564
|
return Regexp.last_match(1)
|
553
565
|
# Human-readable old folder view.
|
@@ -558,7 +570,7 @@ module GoogleDrive
|
|
558
570
|
return Regexp.last_match(1) if (uri.query || '').split(/&/).find { |s| s =~ /^key=(.*)$/ }
|
559
571
|
end
|
560
572
|
case uri.fragment
|
561
|
-
# Human-readable old
|
573
|
+
# Human-readable old folder page.
|
562
574
|
when /^folders\/(.+)$/
|
563
575
|
return Regexp.last_match(1)
|
564
576
|
end
|
@@ -12,7 +12,8 @@ require 'google_drive/file'
|
|
12
12
|
module GoogleDrive
|
13
13
|
# A spreadsheet.
|
14
14
|
#
|
15
|
-
# Use methods
|
15
|
+
# e.g., Use methods spreadsheet_by_title, spreadsheet_by_url, create_spreadsheet in GoogleDrive::Session
|
16
|
+
# to get GoogleDrive::Spreadsheet object.
|
16
17
|
class Spreadsheet < GoogleDrive::File
|
17
18
|
include(Util)
|
18
19
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_drive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroshi Ichikawa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
171
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.6.14
|
173
173
|
signing_key:
|
174
174
|
specification_version: 4
|
175
175
|
summary: A library to read/write files/spreadsheets in Google Drive/Docs.
|