gcloud 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/AUTHENTICATION.md +71 -0
- data/CHANGELOG.md +5 -0
- data/README.md +10 -15
- data/lib/gcloud.rb +30 -0
- data/lib/gcloud/backoff.rb +3 -0
- data/lib/gcloud/credentials.rb +47 -30
- data/lib/gcloud/datastore.rb +246 -15
- data/lib/gcloud/datastore/connection.rb +4 -2
- data/lib/gcloud/datastore/credentials.rb +3 -1
- data/lib/gcloud/datastore/dataset.rb +130 -25
- data/lib/gcloud/datastore/dataset/lookup_results.rb +1 -0
- data/lib/gcloud/datastore/dataset/query_results.rb +7 -5
- data/lib/gcloud/datastore/entity.rb +99 -17
- data/lib/gcloud/datastore/errors.rb +13 -2
- data/lib/gcloud/datastore/key.rb +133 -2
- data/lib/gcloud/datastore/properties.rb +6 -1
- data/lib/gcloud/datastore/proto.rb +2 -1
- data/lib/gcloud/datastore/query.rb +4 -4
- data/lib/gcloud/datastore/transaction.rb +3 -0
- data/lib/gcloud/storage.rb +280 -13
- data/lib/gcloud/storage/bucket.rb +248 -11
- data/lib/gcloud/storage/bucket/acl.rb +631 -4
- data/lib/gcloud/storage/bucket/list.rb +1 -0
- data/lib/gcloud/storage/connection.rb +1 -0
- data/lib/gcloud/storage/credentials.rb +3 -1
- data/lib/gcloud/storage/errors.rb +9 -1
- data/lib/gcloud/storage/file.rb +231 -6
- data/lib/gcloud/storage/file/acl.rb +365 -2
- data/lib/gcloud/storage/file/list.rb +1 -0
- data/lib/gcloud/storage/file/verifier.rb +1 -0
- data/lib/gcloud/storage/project.rb +119 -10
- data/lib/gcloud/version.rb +18 -3
- metadata +33 -80
- data/.gemtest +0 -0
- data/.rubocop.yml +0 -17
- data/Manifest.txt +0 -66
- data/Rakefile +0 -35
- data/gcloud.gemspec +0 -63
- data/rakelib/console.rake +0 -28
- data/rakelib/manifest.rake +0 -24
- data/rakelib/proto.rake +0 -17
- data/rakelib/rubocop.rake +0 -17
- data/rakelib/test.rake +0 -144
- data/test/gcloud/datastore/proto/test_cursor.rb +0 -36
- data/test/gcloud/datastore/proto/test_direction.rb +0 -60
- data/test/gcloud/datastore/proto/test_operator.rb +0 -76
- data/test/gcloud/datastore/proto/test_value.rb +0 -231
- data/test/gcloud/datastore/test_connection.rb +0 -93
- data/test/gcloud/datastore/test_credentials.rb +0 -38
- data/test/gcloud/datastore/test_dataset.rb +0 -413
- data/test/gcloud/datastore/test_entity.rb +0 -161
- data/test/gcloud/datastore/test_entity_exclude.rb +0 -225
- data/test/gcloud/datastore/test_key.rb +0 -189
- data/test/gcloud/datastore/test_query.rb +0 -271
- data/test/gcloud/datastore/test_transaction.rb +0 -121
- data/test/gcloud/storage/test_backoff.rb +0 -127
- data/test/gcloud/storage/test_bucket.rb +0 -270
- data/test/gcloud/storage/test_bucket_acl.rb +0 -253
- data/test/gcloud/storage/test_default_acl.rb +0 -256
- data/test/gcloud/storage/test_file.rb +0 -221
- data/test/gcloud/storage/test_file_acl.rb +0 -367
- data/test/gcloud/storage/test_project.rb +0 -180
- data/test/gcloud/storage/test_storage.rb +0 -29
- data/test/gcloud/storage/test_verifier.rb +0 -62
- data/test/gcloud/test_version.rb +0 -8
- data/test/helper.rb +0 -91
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -20,7 +21,8 @@ module Gcloud
|
|
20
21
|
# Represents the Oauth2 signing logic for Storage.
|
21
22
|
class Credentials < Gcloud::Credentials #:nodoc:
|
22
23
|
SCOPE = ["https://www.googleapis.com/auth/devstorage.full_control"]
|
23
|
-
|
24
|
+
PATH_ENV_VARS = %w(STORAGE_KEYFILE GOOGLE_CLOUD_KEYFILE)
|
25
|
+
JSON_ENV_VARS = %w(STORAGE_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON)
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -15,11 +16,15 @@
|
|
15
16
|
module Gcloud
|
16
17
|
module Storage
|
17
18
|
##
|
19
|
+
# = Storage Error
|
20
|
+
#
|
18
21
|
# Base Storage exception class.
|
19
22
|
class Error < Gcloud::Error
|
20
23
|
end
|
21
24
|
|
22
25
|
##
|
26
|
+
# = ApiError
|
27
|
+
#
|
23
28
|
# Raised when an API call is not successful.
|
24
29
|
class ApiError < Error
|
25
30
|
##
|
@@ -32,7 +37,8 @@ module Gcloud
|
|
32
37
|
|
33
38
|
def initialize message, code, errors
|
34
39
|
super message
|
35
|
-
@code
|
40
|
+
@code = code
|
41
|
+
@errors = errors
|
36
42
|
end
|
37
43
|
|
38
44
|
def self.from_response resp #:nodoc:
|
@@ -43,6 +49,8 @@ module Gcloud
|
|
43
49
|
end
|
44
50
|
|
45
51
|
##
|
52
|
+
# = FileVerificationError
|
53
|
+
#
|
46
54
|
# Raised when a File download fails the verification.
|
47
55
|
class FileVerificationError < Error
|
48
56
|
##
|
data/lib/gcloud/storage/file.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -19,7 +20,19 @@ require "gcloud/storage/file/verifier"
|
|
19
20
|
module Gcloud
|
20
21
|
module Storage
|
21
22
|
##
|
23
|
+
# = File
|
24
|
+
#
|
22
25
|
# Represents the File/Object that belong to a Bucket.
|
26
|
+
#
|
27
|
+
# require "glcoud/storage"
|
28
|
+
#
|
29
|
+
# storage = Gcloud.storage
|
30
|
+
#
|
31
|
+
# bucket = storage.find_bucket "my-bucket"
|
32
|
+
#
|
33
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
34
|
+
# file.download "/downloads/#{bucket.name}/#{file.name}"
|
35
|
+
#
|
23
36
|
class File
|
24
37
|
##
|
25
38
|
# The Connection object.
|
@@ -31,7 +44,7 @@ module Gcloud
|
|
31
44
|
|
32
45
|
##
|
33
46
|
# Create an empty File object.
|
34
|
-
def initialize
|
47
|
+
def initialize #:nodoc:
|
35
48
|
@connection = nil
|
36
49
|
@gapi = {}
|
37
50
|
end
|
@@ -118,29 +131,78 @@ module Gcloud
|
|
118
131
|
|
119
132
|
##
|
120
133
|
# Download the file's contents to a local file.
|
121
|
-
# The path provided must be writable.
|
122
134
|
#
|
135
|
+
# === Parameters
|
136
|
+
#
|
137
|
+
# +path+::
|
138
|
+
# The path on the local file system to write the data to.
|
139
|
+
# The path provided must be writable. (+String+)
|
140
|
+
# +options+::
|
141
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
142
|
+
# +options [:verify]+::
|
143
|
+
# The verification algoruthm used to ensure the downloaded file contents
|
144
|
+
# are correct. Default is +:md5+. (+Symbol+)
|
145
|
+
#
|
146
|
+
# Acceptable values are:
|
147
|
+
# * +md5+:: Verify file content match using the MD5 hash.
|
148
|
+
# * +crc32c+:: Verify file content match using the CRC32c hash.
|
149
|
+
# * +all+:: Perform all available file content verification.
|
150
|
+
# * +none+:: Don't perform file content verification.
|
151
|
+
#
|
152
|
+
# === Returns
|
153
|
+
#
|
154
|
+
# +::File+ object on the local file system
|
155
|
+
#
|
156
|
+
# === Examples
|
157
|
+
#
|
158
|
+
# require "glcoud/storage"
|
159
|
+
#
|
160
|
+
# storage = Gcloud.storage
|
161
|
+
#
|
162
|
+
# bucket = storage.find_bucket "my-bucket"
|
163
|
+
#
|
164
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
123
165
|
# file.download "path/to/downloaded/file.ext"
|
124
166
|
#
|
125
167
|
# The download is verified by calculating the MD5 digest.
|
126
168
|
# The CRC32c digest can be used by passing :crc32c.
|
127
169
|
#
|
170
|
+
# require "glcoud/storage"
|
171
|
+
#
|
172
|
+
# storage = Gcloud.storage
|
173
|
+
#
|
174
|
+
# bucket = storage.find_bucket "my-bucket"
|
175
|
+
#
|
176
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
128
177
|
# file.download "path/to/downloaded/file.ext", verify: :crc32c
|
129
178
|
#
|
130
179
|
# Both the MD5 and CRC32c digest can be used by passing :all.
|
131
180
|
#
|
181
|
+
# require "glcoud/storage"
|
182
|
+
#
|
183
|
+
# storage = Gcloud.storage
|
184
|
+
#
|
185
|
+
# bucket = storage.find_bucket "my-bucket"
|
186
|
+
#
|
187
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
132
188
|
# file.download "path/to/downloaded/file.ext", verify: :all
|
133
189
|
#
|
134
190
|
# The download verification can be disabled by passing :none
|
135
191
|
#
|
192
|
+
# require "glcoud/storage"
|
193
|
+
#
|
194
|
+
# storage = Gcloud.storage
|
195
|
+
#
|
196
|
+
# bucket = storage.find_bucket "my-bucket"
|
197
|
+
#
|
198
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
136
199
|
# file.download "path/to/downloaded/file.ext", verify: :none
|
137
200
|
#
|
138
|
-
# If the verification fails FileVerificationError is raised.
|
139
201
|
def download path, options = {}
|
140
202
|
ensure_connection!
|
141
203
|
resp = connection.download_file bucket, name
|
142
204
|
if resp.success?
|
143
|
-
::File.open path, "
|
205
|
+
::File.open path, "wb+" do |f|
|
144
206
|
f.write resp.body
|
145
207
|
end
|
146
208
|
verify_file! ::File.new(path), options
|
@@ -152,12 +214,63 @@ module Gcloud
|
|
152
214
|
##
|
153
215
|
# Copy the file to a new location.
|
154
216
|
#
|
217
|
+
# === Parameters
|
218
|
+
#
|
219
|
+
# +dest_bucket_or_path+::
|
220
|
+
# Either the bucket to copy the file to, or the path to copy the file to
|
221
|
+
# in the current bucket. (+String+)
|
222
|
+
# +dest_path+::
|
223
|
+
# If a bucket was provided in the first parameter, this contains the
|
224
|
+
# path to copy the file to in the given bucket. (+String+)
|
225
|
+
# +options+::
|
226
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
227
|
+
# +options [:acl]+::
|
228
|
+
# A predefined set of access controls to apply to new file.
|
229
|
+
# (+String+)
|
230
|
+
#
|
231
|
+
# Acceptable values are:
|
232
|
+
# * +auth+, +auth_read+, +authenticated+, +authenticated_read+,
|
233
|
+
# +authenticatedRead+:: File owner gets OWNER access, and
|
234
|
+
# allAuthenticatedUsers get READER access.
|
235
|
+
# * +owner_full+, +bucketOwnerFullControl+:: File owner gets OWNER
|
236
|
+
# access, and project team owners get OWNER access.
|
237
|
+
# * +owner_read+, +bucketOwnerRead+:: File owner gets OWNER access, and
|
238
|
+
# project team owners get READER access.
|
239
|
+
# * +private+:: File owner gets OWNER access.
|
240
|
+
# * +project_private+, +projectPrivate+:: File owner gets OWNER access,
|
241
|
+
# and project team members get access according to their roles.
|
242
|
+
# * +public+, +public_read+, +publicRead+:: File owner gets OWNER
|
243
|
+
# access, and allUsers get READER access.
|
244
|
+
#
|
245
|
+
# === Returns
|
246
|
+
#
|
247
|
+
# +File+ object
|
248
|
+
#
|
249
|
+
# === Examples
|
250
|
+
#
|
251
|
+
# The file can also be copied to a new path in the current bucket:
|
252
|
+
#
|
253
|
+
# require "glcoud/storage"
|
254
|
+
#
|
255
|
+
# storage = Gcloud.storage
|
256
|
+
#
|
257
|
+
# bucket = storage.find_bucket "my-bucket"
|
258
|
+
#
|
259
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
155
260
|
# file.copy "path/to/destination/file.ext"
|
156
261
|
#
|
157
262
|
# The file can also be copied to a different bucket:
|
158
263
|
#
|
264
|
+
# require "glcoud/storage"
|
265
|
+
#
|
266
|
+
# storage = Gcloud.storage
|
267
|
+
#
|
268
|
+
# bucket = storage.find_bucket "my-bucket"
|
269
|
+
#
|
270
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
159
271
|
# file.copy "new-destination-bucket",
|
160
272
|
# "path/to/destination/file.ext"
|
273
|
+
#
|
161
274
|
def copy dest_bucket_or_path, dest_path = nil, options = {}
|
162
275
|
ensure_connection!
|
163
276
|
dest_bucket, dest_path, options = fix_copy_args dest_bucket_or_path,
|
@@ -174,6 +287,22 @@ module Gcloud
|
|
174
287
|
|
175
288
|
##
|
176
289
|
# Permenently deletes the file.
|
290
|
+
#
|
291
|
+
# === Returns
|
292
|
+
#
|
293
|
+
# +true+ if the file was deleted.
|
294
|
+
#
|
295
|
+
# === Example
|
296
|
+
#
|
297
|
+
# require "glcoud/storage"
|
298
|
+
#
|
299
|
+
# storage = Gcloud.storage
|
300
|
+
#
|
301
|
+
# bucket = storage.find_bucket "my-bucket"
|
302
|
+
#
|
303
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
304
|
+
# file.delete
|
305
|
+
#
|
177
306
|
def delete
|
178
307
|
ensure_connection!
|
179
308
|
resp = connection.delete_file bucket, name
|
@@ -184,6 +313,54 @@ module Gcloud
|
|
184
313
|
end
|
185
314
|
end
|
186
315
|
|
316
|
+
##
|
317
|
+
# Access without authentication can be granted to a File for a specified
|
318
|
+
# period of time. This URL uses a cryptographic signature
|
319
|
+
# of your credentials to access the file. See the
|
320
|
+
# {Access Control Signed URLs guide
|
321
|
+
# }[https://cloud.google.com/storage/docs/access-control#Signed-URLs]
|
322
|
+
# for more.
|
323
|
+
#
|
324
|
+
# === Parameters
|
325
|
+
#
|
326
|
+
# +options+::
|
327
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
328
|
+
# +options [:method]+::
|
329
|
+
# The HTTP verb to be used with the signed URL. Signed URLs can be used
|
330
|
+
# with +GET+, +HEAD+, +PUT+, and +DELETE+ requests. Default is +GET+.
|
331
|
+
# (+String+)
|
332
|
+
# +options [:expires]+::
|
333
|
+
# The number of seconds until the URL expires. Default is 300/5 minutes.
|
334
|
+
# (+Integer+)
|
335
|
+
# +options [:content_type]+::
|
336
|
+
# When provided, the client (browser) must send this value in the
|
337
|
+
# HTTP header. e.g. +text/plain+ (+String+)
|
338
|
+
# +options [:content_md5]+::
|
339
|
+
# The MD5 digest value in base64. If you provide this in the string, the
|
340
|
+
# client (usually a browser) must provide this HTTP header with this
|
341
|
+
# same value in its request. (+String+)
|
342
|
+
#
|
343
|
+
# === Examples
|
344
|
+
#
|
345
|
+
# require "gcloud/storage"
|
346
|
+
#
|
347
|
+
# storage = Gcloud.storage
|
348
|
+
#
|
349
|
+
# bucket = storage.find_bucket "my-todo-app"
|
350
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
351
|
+
# shared_url = file.signed_url
|
352
|
+
#
|
353
|
+
# Any of the option parameters may be specified:
|
354
|
+
#
|
355
|
+
# require "gcloud/storage"
|
356
|
+
#
|
357
|
+
# storage = Gcloud.storage
|
358
|
+
#
|
359
|
+
# bucket = storage.find_bucket "my-todo-app"
|
360
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
361
|
+
# shared_url = file.signed_url method: "GET",
|
362
|
+
# expires: 300 # 5 minutes from now
|
363
|
+
#
|
187
364
|
def signed_url options = {}
|
188
365
|
ensure_connection!
|
189
366
|
signer = File::Signer.new self
|
@@ -191,7 +368,55 @@ module Gcloud
|
|
191
368
|
end
|
192
369
|
|
193
370
|
##
|
194
|
-
#
|
371
|
+
# The File::Acl instance used to control access to the file.
|
372
|
+
#
|
373
|
+
# A file has owners, writers, and readers. Permissions can be granted to
|
374
|
+
# an individual user's email address, a group's email address, as well as
|
375
|
+
# many predefined lists. See the
|
376
|
+
# {Access Control guide
|
377
|
+
# }[https://cloud.google.com/storage/docs/access-control]
|
378
|
+
# for more.
|
379
|
+
#
|
380
|
+
# === Examples
|
381
|
+
#
|
382
|
+
# Access to a file can be granted to a user by appending +"user-"+ to the
|
383
|
+
# email address:
|
384
|
+
#
|
385
|
+
# require "gcloud/storage"
|
386
|
+
#
|
387
|
+
# storage = Gcloud.storage
|
388
|
+
#
|
389
|
+
# bucket = storage.find_bucket "my-todo-app"
|
390
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
391
|
+
#
|
392
|
+
# email = "heidi@example.net"
|
393
|
+
# file.acl.add_reader "user-#{email}"
|
394
|
+
#
|
395
|
+
# Access to a file can be granted to a group by appending +"group-"+ to
|
396
|
+
# the email address:
|
397
|
+
#
|
398
|
+
# require "gcloud/storage"
|
399
|
+
#
|
400
|
+
# storage = Gcloud.storage
|
401
|
+
#
|
402
|
+
# bucket = storage.find_bucket "my-todo-app"
|
403
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
404
|
+
#
|
405
|
+
# email = "authors@example.net"
|
406
|
+
# file.acl.add_reader "group-#{email}"
|
407
|
+
#
|
408
|
+
# Access to a file can also be granted to a predefined list of
|
409
|
+
# permissions:
|
410
|
+
#
|
411
|
+
# require "gcloud/storage"
|
412
|
+
#
|
413
|
+
# storage = Gcloud.storage
|
414
|
+
#
|
415
|
+
# bucket = storage.find_bucket "my-todo-app"
|
416
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
417
|
+
#
|
418
|
+
# file.acl.public!
|
419
|
+
#
|
195
420
|
def acl
|
196
421
|
@acl ||= File::Acl.new self
|
197
422
|
end
|
@@ -234,7 +459,7 @@ module Gcloud
|
|
234
459
|
|
235
460
|
##
|
236
461
|
# Create a signed_url for a file.
|
237
|
-
class Signer #:nodoc
|
462
|
+
class Signer #:nodoc:
|
238
463
|
def initialize file
|
239
464
|
@file = file
|
240
465
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2015 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,7 +17,19 @@ module Gcloud
|
|
16
17
|
module Storage
|
17
18
|
class File
|
18
19
|
##
|
20
|
+
# = File Access Control List
|
21
|
+
#
|
19
22
|
# Represents a File's Access Control List.
|
23
|
+
#
|
24
|
+
# require "glcoud/storage"
|
25
|
+
#
|
26
|
+
# storage = Gcloud.storage
|
27
|
+
#
|
28
|
+
# bucket = storage.find_bucket "my-bucket"
|
29
|
+
#
|
30
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
31
|
+
# file.acl.readers.each { |reader| puts reader }
|
32
|
+
#
|
20
33
|
class Acl
|
21
34
|
RULES = { "authenticatedRead" => "authenticatedRead",
|
22
35
|
"auth" => "authenticatedRead",
|
@@ -32,7 +45,7 @@ module Gcloud
|
|
32
45
|
"project_private" => "projectPrivate",
|
33
46
|
"publicRead" => "publicRead",
|
34
47
|
"public" => "publicRead",
|
35
|
-
"public_read" => "publicRead" }
|
48
|
+
"public_read" => "publicRead" } #:nodoc:
|
36
49
|
|
37
50
|
##
|
38
51
|
# Initialized a new Acl object.
|
@@ -46,6 +59,20 @@ module Gcloud
|
|
46
59
|
@readers = nil
|
47
60
|
end
|
48
61
|
|
62
|
+
##
|
63
|
+
# Reloads all Access Control List data for the file.
|
64
|
+
#
|
65
|
+
# === Example
|
66
|
+
#
|
67
|
+
# require "glcoud/storage"
|
68
|
+
#
|
69
|
+
# storage = Gcloud.storage
|
70
|
+
#
|
71
|
+
# bucket = storage.find_bucket "my-bucket"
|
72
|
+
#
|
73
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
74
|
+
# file.acl.refresh!
|
75
|
+
#
|
49
76
|
def refresh!
|
50
77
|
resp = @connection.list_file_acls @bucket, @file
|
51
78
|
acls = resp.data["items"]
|
@@ -54,21 +81,127 @@ module Gcloud
|
|
54
81
|
@readers = entities_from_acls acls, "READER"
|
55
82
|
end
|
56
83
|
|
84
|
+
##
|
85
|
+
# Lists the owners of the file.
|
86
|
+
#
|
87
|
+
# === Returns
|
88
|
+
#
|
89
|
+
# Array of Strings
|
90
|
+
#
|
91
|
+
# === Example
|
92
|
+
#
|
93
|
+
# require "glcoud/storage"
|
94
|
+
#
|
95
|
+
# storage = Gcloud.storage
|
96
|
+
#
|
97
|
+
# bucket = storage.find_bucket "my-bucket"
|
98
|
+
#
|
99
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
100
|
+
# file.acl.owners.each { |owner| puts owner }
|
101
|
+
#
|
57
102
|
def owners
|
58
103
|
refresh! if @owners.nil?
|
59
104
|
@owners
|
60
105
|
end
|
61
106
|
|
107
|
+
##
|
108
|
+
# Lists the owners of the file.
|
109
|
+
#
|
110
|
+
# === Returns
|
111
|
+
#
|
112
|
+
# Array of Strings
|
113
|
+
#
|
114
|
+
# === Example
|
115
|
+
#
|
116
|
+
# require "glcoud/storage"
|
117
|
+
#
|
118
|
+
# storage = Gcloud.storage
|
119
|
+
#
|
120
|
+
# bucket = storage.find_bucket "my-bucket"
|
121
|
+
#
|
122
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
123
|
+
# file.acl.writers.each { |writer| puts writer }
|
124
|
+
#
|
62
125
|
def writers
|
63
126
|
refresh! if @writers.nil?
|
64
127
|
@writers
|
65
128
|
end
|
66
129
|
|
130
|
+
##
|
131
|
+
# Lists the readers of the file.
|
132
|
+
#
|
133
|
+
# === Returns
|
134
|
+
#
|
135
|
+
# Array of Strings
|
136
|
+
#
|
137
|
+
# === Example
|
138
|
+
#
|
139
|
+
# require "glcoud/storage"
|
140
|
+
#
|
141
|
+
# storage = Gcloud.storage
|
142
|
+
#
|
143
|
+
# bucket = storage.find_bucket "my-bucket"
|
144
|
+
#
|
145
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
146
|
+
# file.acl.readers.each { |reader| puts reader }
|
147
|
+
#
|
67
148
|
def readers
|
68
149
|
refresh! if @readers.nil?
|
69
150
|
@readers
|
70
151
|
end
|
71
152
|
|
153
|
+
##
|
154
|
+
# Grants owner permission to the file.
|
155
|
+
#
|
156
|
+
# === Parameters
|
157
|
+
#
|
158
|
+
# +entity+::
|
159
|
+
# The entity holding the permission, in one of the following forms:
|
160
|
+
# (+String+)
|
161
|
+
#
|
162
|
+
# * user-userId
|
163
|
+
# * user-email
|
164
|
+
# * group-groupId
|
165
|
+
# * group-email
|
166
|
+
# * domain-domain
|
167
|
+
# * project-team-projectId
|
168
|
+
# * allUsers
|
169
|
+
# * allAuthenticatedUsers
|
170
|
+
#
|
171
|
+
# +options+::
|
172
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
173
|
+
# +options [:generation]+::
|
174
|
+
# When present, selects a specific revision of this object.
|
175
|
+
# Default is the latest version. (+Integer+)
|
176
|
+
#
|
177
|
+
# === Examples
|
178
|
+
#
|
179
|
+
# Access to a file can be granted to a user by appending +"user-"+ to
|
180
|
+
# the email address:
|
181
|
+
#
|
182
|
+
# require "glcoud/storage"
|
183
|
+
#
|
184
|
+
# storage = Gcloud.storage
|
185
|
+
#
|
186
|
+
# bucket = storage.find_bucket "my-bucket"
|
187
|
+
#
|
188
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
189
|
+
# email = "heidi@example.net"
|
190
|
+
# file.acl.add_owner "user-#{email}"
|
191
|
+
#
|
192
|
+
# Access to a file can be granted to a group by appending +"group-"+ to
|
193
|
+
# the email address:
|
194
|
+
#
|
195
|
+
# require "glcoud/storage"
|
196
|
+
#
|
197
|
+
# storage = Gcloud.storage
|
198
|
+
#
|
199
|
+
# bucket = storage.find_bucket "my-bucket"
|
200
|
+
#
|
201
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
202
|
+
# email = "authors@example.net"
|
203
|
+
# file.acl.add_owner "group-#{email}"
|
204
|
+
#
|
72
205
|
def add_owner entity, options = {}
|
73
206
|
resp = @connection.insert_file_acl @bucket, @file, entity,
|
74
207
|
"OWNER", options
|
@@ -80,6 +213,58 @@ module Gcloud
|
|
80
213
|
nil
|
81
214
|
end
|
82
215
|
|
216
|
+
##
|
217
|
+
# Grants writer permission to the file.
|
218
|
+
#
|
219
|
+
# === Parameters
|
220
|
+
#
|
221
|
+
# +entity+::
|
222
|
+
# The entity holding the permission, in one of the following forms:
|
223
|
+
# (+String+)
|
224
|
+
#
|
225
|
+
# * user-userId
|
226
|
+
# * user-email
|
227
|
+
# * group-groupId
|
228
|
+
# * group-email
|
229
|
+
# * domain-domain
|
230
|
+
# * project-team-projectId
|
231
|
+
# * allUsers
|
232
|
+
# * allAuthenticatedUsers
|
233
|
+
#
|
234
|
+
# +options+::
|
235
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
236
|
+
# +options [:generation]+::
|
237
|
+
# When present, selects a specific revision of this object.
|
238
|
+
# Default is the latest version. (+Integer+)
|
239
|
+
#
|
240
|
+
# === Examples
|
241
|
+
#
|
242
|
+
# Access to a file can be granted to a user by appending +"user-"+ to
|
243
|
+
# the email address:
|
244
|
+
#
|
245
|
+
# require "glcoud/storage"
|
246
|
+
#
|
247
|
+
# storage = Gcloud.storage
|
248
|
+
#
|
249
|
+
# bucket = storage.find_bucket "my-bucket"
|
250
|
+
#
|
251
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
252
|
+
# email = "heidi@example.net"
|
253
|
+
# file.acl.add_writer "user-#{email}"
|
254
|
+
#
|
255
|
+
# Access to a file can be granted to a group by appending +"group-"+ to
|
256
|
+
# the email address:
|
257
|
+
#
|
258
|
+
# require "glcoud/storage"
|
259
|
+
#
|
260
|
+
# storage = Gcloud.storage
|
261
|
+
#
|
262
|
+
# bucket = storage.find_bucket "my-bucket"
|
263
|
+
#
|
264
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
265
|
+
# email = "authors@example.net"
|
266
|
+
# file.acl.add_writer "group-#{email}"
|
267
|
+
#
|
83
268
|
def add_writer entity, options = {}
|
84
269
|
resp = @connection.insert_file_acl @bucket, @file, entity,
|
85
270
|
"WRITER", options
|
@@ -91,6 +276,58 @@ module Gcloud
|
|
91
276
|
nil
|
92
277
|
end
|
93
278
|
|
279
|
+
##
|
280
|
+
# Grants reader permission to the file.
|
281
|
+
#
|
282
|
+
# === Parameters
|
283
|
+
#
|
284
|
+
# +entity+::
|
285
|
+
# The entity holding the permission, in one of the following forms:
|
286
|
+
# (+String+)
|
287
|
+
#
|
288
|
+
# * user-userId
|
289
|
+
# * user-email
|
290
|
+
# * group-groupId
|
291
|
+
# * group-email
|
292
|
+
# * domain-domain
|
293
|
+
# * project-team-projectId
|
294
|
+
# * allUsers
|
295
|
+
# * allAuthenticatedUsers
|
296
|
+
#
|
297
|
+
# +options+::
|
298
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
299
|
+
# +options [:generation]+::
|
300
|
+
# When present, selects a specific revision of this object.
|
301
|
+
# Default is the latest version. (+Integer+)
|
302
|
+
#
|
303
|
+
# === Examples
|
304
|
+
#
|
305
|
+
# Access to a file can be granted to a user by appending +"user-"+ to
|
306
|
+
# the email address:
|
307
|
+
#
|
308
|
+
# require "glcoud/storage"
|
309
|
+
#
|
310
|
+
# storage = Gcloud.storage
|
311
|
+
#
|
312
|
+
# bucket = storage.find_bucket "my-bucket"
|
313
|
+
#
|
314
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
315
|
+
# email = "heidi@example.net"
|
316
|
+
# file.acl.add_reader "user-#{email}"
|
317
|
+
#
|
318
|
+
# Access to a file can be granted to a group by appending +"group-"+ to
|
319
|
+
# the email address:
|
320
|
+
#
|
321
|
+
# require "glcoud/storage"
|
322
|
+
#
|
323
|
+
# storage = Gcloud.storage
|
324
|
+
#
|
325
|
+
# bucket = storage.find_bucket "my-bucket"
|
326
|
+
#
|
327
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
328
|
+
# email = "authors@example.net"
|
329
|
+
# file.acl.add_reader "group-#{email}"
|
330
|
+
#
|
94
331
|
def add_reader entity, options = {}
|
95
332
|
resp = @connection.insert_file_acl @bucket, @file, entity,
|
96
333
|
"READER", options
|
@@ -102,6 +339,42 @@ module Gcloud
|
|
102
339
|
nil
|
103
340
|
end
|
104
341
|
|
342
|
+
##
|
343
|
+
# Permenently deletes the entity from the file's access control list.
|
344
|
+
#
|
345
|
+
# === Parameters
|
346
|
+
#
|
347
|
+
# +entity+::
|
348
|
+
# The entity holding the permission, in one of the following forms:
|
349
|
+
# (+String+)
|
350
|
+
#
|
351
|
+
# * user-userId
|
352
|
+
# * user-email
|
353
|
+
# * group-groupId
|
354
|
+
# * group-email
|
355
|
+
# * domain-domain
|
356
|
+
# * project-team-projectId
|
357
|
+
# * allUsers
|
358
|
+
# * allAuthenticatedUsers
|
359
|
+
#
|
360
|
+
# +options+::
|
361
|
+
# An optional Hash for controlling additional behavor. (+Hash+)
|
362
|
+
# +options [:generation]+::
|
363
|
+
# When present, selects a specific revision of this object.
|
364
|
+
# Default is the latest version. (+Integer+)
|
365
|
+
#
|
366
|
+
# === Example
|
367
|
+
#
|
368
|
+
# require "glcoud/storage"
|
369
|
+
#
|
370
|
+
# storage = Gcloud.storage
|
371
|
+
#
|
372
|
+
# bucket = storage.find_bucket "my-bucket"
|
373
|
+
#
|
374
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
375
|
+
# email = "heidi@example.net"
|
376
|
+
# file.acl.delete "user-#{email}"
|
377
|
+
#
|
105
378
|
def delete entity, options = {}
|
106
379
|
resp = @connection.delete_file_acl @bucket, @file, entity, options
|
107
380
|
if resp.success?
|
@@ -113,12 +386,27 @@ module Gcloud
|
|
113
386
|
false
|
114
387
|
end
|
115
388
|
|
116
|
-
def self.predefined_rule_for rule_name
|
389
|
+
def self.predefined_rule_for rule_name #:nodoc:
|
117
390
|
RULES[rule_name.to_s]
|
118
391
|
end
|
119
392
|
|
120
393
|
# Predefined ACL helpers
|
121
394
|
|
395
|
+
##
|
396
|
+
# Convenience method to apply the +authenticatedRead+ predefined ACL
|
397
|
+
# rule to the file.
|
398
|
+
#
|
399
|
+
# === Example
|
400
|
+
#
|
401
|
+
# require "glcoud/storage"
|
402
|
+
#
|
403
|
+
# storage = Gcloud.storage
|
404
|
+
#
|
405
|
+
# bucket = storage.find_bucket "my-bucket"
|
406
|
+
#
|
407
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
408
|
+
# file.acl.auth!
|
409
|
+
#
|
122
410
|
def auth!
|
123
411
|
update_predefined_acl! "authenticatedRead"
|
124
412
|
end
|
@@ -127,25 +415,100 @@ module Gcloud
|
|
127
415
|
alias_method :authenticated!, :auth!
|
128
416
|
alias_method :authenticated_read!, :auth!
|
129
417
|
|
418
|
+
##
|
419
|
+
# Convenience method to apply the +bucketOwnerFullControl+ predefined
|
420
|
+
# ACL rule to the file.
|
421
|
+
#
|
422
|
+
# === Example
|
423
|
+
#
|
424
|
+
# require "glcoud/storage"
|
425
|
+
#
|
426
|
+
# storage = Gcloud.storage
|
427
|
+
#
|
428
|
+
# bucket = storage.find_bucket "my-bucket"
|
429
|
+
#
|
430
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
431
|
+
# file.acl.owner_full!
|
432
|
+
#
|
130
433
|
def owner_full!
|
131
434
|
update_predefined_acl! "bucketOwnerFullControl"
|
132
435
|
end
|
133
436
|
alias_method :bucketOwnerFullControl!, :owner_full!
|
134
437
|
|
438
|
+
##
|
439
|
+
# Convenience method to apply the +bucketOwnerRead+ predefined ACL
|
440
|
+
# rule to the file.
|
441
|
+
#
|
442
|
+
# === Example
|
443
|
+
#
|
444
|
+
# require "glcoud/storage"
|
445
|
+
#
|
446
|
+
# storage = Gcloud.storage
|
447
|
+
#
|
448
|
+
# bucket = storage.find_bucket "my-bucket"
|
449
|
+
#
|
450
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
451
|
+
# file.acl.owner_read!
|
452
|
+
#
|
135
453
|
def owner_read!
|
136
454
|
update_predefined_acl! "bucketOwnerRead"
|
137
455
|
end
|
138
456
|
alias_method :bucketOwnerRead!, :owner_read!
|
139
457
|
|
458
|
+
##
|
459
|
+
# Convenience method to apply the +private+ predefined ACL
|
460
|
+
# rule to the file.
|
461
|
+
#
|
462
|
+
# === Example
|
463
|
+
#
|
464
|
+
# require "glcoud/storage"
|
465
|
+
#
|
466
|
+
# storage = Gcloud.storage
|
467
|
+
#
|
468
|
+
# bucket = storage.find_bucket "my-bucket"
|
469
|
+
#
|
470
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
471
|
+
# file.acl.private!
|
472
|
+
#
|
140
473
|
def private!
|
141
474
|
update_predefined_acl! "private"
|
142
475
|
end
|
143
476
|
|
477
|
+
##
|
478
|
+
# Convenience method to apply the +projectPrivate+ predefined ACL
|
479
|
+
# rule to the file.
|
480
|
+
#
|
481
|
+
# === Example
|
482
|
+
#
|
483
|
+
# require "glcoud/storage"
|
484
|
+
#
|
485
|
+
# storage = Gcloud.storage
|
486
|
+
#
|
487
|
+
# bucket = storage.find_bucket "my-bucket"
|
488
|
+
#
|
489
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
490
|
+
# file.acl.project_private!
|
491
|
+
#
|
144
492
|
def project_private!
|
145
493
|
update_predefined_acl! "projectPrivate"
|
146
494
|
end
|
147
495
|
alias_method :projectPrivate!, :project_private!
|
148
496
|
|
497
|
+
##
|
498
|
+
# Convenience method to apply the +publicRead+ predefined ACL
|
499
|
+
# rule to the file.
|
500
|
+
#
|
501
|
+
# === Example
|
502
|
+
#
|
503
|
+
# require "glcoud/storage"
|
504
|
+
#
|
505
|
+
# storage = Gcloud.storage
|
506
|
+
#
|
507
|
+
# bucket = storage.find_bucket "my-bucket"
|
508
|
+
#
|
509
|
+
# file = bucket.find_file "path/to/my-file.ext"
|
510
|
+
# file.acl.public!
|
511
|
+
#
|
149
512
|
def public!
|
150
513
|
update_predefined_acl! "publicRead"
|
151
514
|
end
|