gcloud 0.1.0 → 0.1.1

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.
Files changed (67) hide show
  1. checksums.yaml +13 -5
  2. data/AUTHENTICATION.md +71 -0
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +10 -15
  5. data/lib/gcloud.rb +30 -0
  6. data/lib/gcloud/backoff.rb +3 -0
  7. data/lib/gcloud/credentials.rb +47 -30
  8. data/lib/gcloud/datastore.rb +246 -15
  9. data/lib/gcloud/datastore/connection.rb +4 -2
  10. data/lib/gcloud/datastore/credentials.rb +3 -1
  11. data/lib/gcloud/datastore/dataset.rb +130 -25
  12. data/lib/gcloud/datastore/dataset/lookup_results.rb +1 -0
  13. data/lib/gcloud/datastore/dataset/query_results.rb +7 -5
  14. data/lib/gcloud/datastore/entity.rb +99 -17
  15. data/lib/gcloud/datastore/errors.rb +13 -2
  16. data/lib/gcloud/datastore/key.rb +133 -2
  17. data/lib/gcloud/datastore/properties.rb +6 -1
  18. data/lib/gcloud/datastore/proto.rb +2 -1
  19. data/lib/gcloud/datastore/query.rb +4 -4
  20. data/lib/gcloud/datastore/transaction.rb +3 -0
  21. data/lib/gcloud/storage.rb +280 -13
  22. data/lib/gcloud/storage/bucket.rb +248 -11
  23. data/lib/gcloud/storage/bucket/acl.rb +631 -4
  24. data/lib/gcloud/storage/bucket/list.rb +1 -0
  25. data/lib/gcloud/storage/connection.rb +1 -0
  26. data/lib/gcloud/storage/credentials.rb +3 -1
  27. data/lib/gcloud/storage/errors.rb +9 -1
  28. data/lib/gcloud/storage/file.rb +231 -6
  29. data/lib/gcloud/storage/file/acl.rb +365 -2
  30. data/lib/gcloud/storage/file/list.rb +1 -0
  31. data/lib/gcloud/storage/file/verifier.rb +1 -0
  32. data/lib/gcloud/storage/project.rb +119 -10
  33. data/lib/gcloud/version.rb +18 -3
  34. metadata +33 -80
  35. data/.gemtest +0 -0
  36. data/.rubocop.yml +0 -17
  37. data/Manifest.txt +0 -66
  38. data/Rakefile +0 -35
  39. data/gcloud.gemspec +0 -63
  40. data/rakelib/console.rake +0 -28
  41. data/rakelib/manifest.rake +0 -24
  42. data/rakelib/proto.rake +0 -17
  43. data/rakelib/rubocop.rake +0 -17
  44. data/rakelib/test.rake +0 -144
  45. data/test/gcloud/datastore/proto/test_cursor.rb +0 -36
  46. data/test/gcloud/datastore/proto/test_direction.rb +0 -60
  47. data/test/gcloud/datastore/proto/test_operator.rb +0 -76
  48. data/test/gcloud/datastore/proto/test_value.rb +0 -231
  49. data/test/gcloud/datastore/test_connection.rb +0 -93
  50. data/test/gcloud/datastore/test_credentials.rb +0 -38
  51. data/test/gcloud/datastore/test_dataset.rb +0 -413
  52. data/test/gcloud/datastore/test_entity.rb +0 -161
  53. data/test/gcloud/datastore/test_entity_exclude.rb +0 -225
  54. data/test/gcloud/datastore/test_key.rb +0 -189
  55. data/test/gcloud/datastore/test_query.rb +0 -271
  56. data/test/gcloud/datastore/test_transaction.rb +0 -121
  57. data/test/gcloud/storage/test_backoff.rb +0 -127
  58. data/test/gcloud/storage/test_bucket.rb +0 -270
  59. data/test/gcloud/storage/test_bucket_acl.rb +0 -253
  60. data/test/gcloud/storage/test_default_acl.rb +0 -256
  61. data/test/gcloud/storage/test_file.rb +0 -221
  62. data/test/gcloud/storage/test_file_acl.rb +0 -367
  63. data/test/gcloud/storage/test_project.rb +0 -180
  64. data/test/gcloud/storage/test_storage.rb +0 -29
  65. data/test/gcloud/storage/test_verifier.rb +0 -62
  66. data/test/gcloud/test_version.rb +0 -8
  67. 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");
@@ -19,7 +20,17 @@ require "gcloud/storage/file"
19
20
  module Gcloud
20
21
  module Storage
21
22
  ##
22
- # Represents a Bucket. Belongs to a Project and has many Files.
23
+ # = Bucket
24
+ #
25
+ # Represents a Storage bucket. Belongs to a Project and has many Files.
26
+ #
27
+ # require "glcoud/storage"
28
+ #
29
+ # storage = Gcloud.storage
30
+ #
31
+ # bucket = storage.find_bucket "my-bucket"
32
+ # file = bucket.find_file "path/to/my-file.ext"
33
+ #
23
34
  class Bucket
24
35
  ##
25
36
  # The Connection object.
@@ -31,14 +42,14 @@ module Gcloud
31
42
 
32
43
  ##
33
44
  # Create an empty Bucket object.
34
- def initialize
45
+ def initialize #:nodoc:
35
46
  @connection = nil
36
47
  @gapi = {}
37
48
  end
38
49
 
39
50
  ##
40
51
  # The kind of item this is.
41
- # For buckets, this is always storage#bucket.
52
+ # For buckets, this is always +storage#bucket+.
42
53
  def kind
43
54
  @gapi["kind"]
44
55
  end
@@ -80,15 +91,40 @@ module Gcloud
80
91
 
81
92
  ##
82
93
  # Permenently deletes the bucket.
83
- # The bucket must be empty.
94
+ # The bucket must be empty before it can be deleted.
84
95
  #
96
+ # === Parameters
97
+ #
98
+ # +options+::
99
+ # An optional Hash for controlling additional behavor. (+Hash+)
100
+ # +options [:retries]+::
101
+ # The number of times the API call should be retried.
102
+ # Default is Gcloud::Backoff.retries. (+Integer+)
103
+ #
104
+ # === Returns
105
+ #
106
+ # +true+ if the bucket was deleted.
107
+ #
108
+ # === Examples
109
+ #
110
+ # require "gcloud/storage"
111
+ #
112
+ # storage = Gcloud.storage
113
+ #
114
+ # bucket = storage.find_bucket "my-bucket"
85
115
  # bucket.delete
86
116
  #
87
117
  # The API call to delete the bucket may be retried under certain
88
118
  # conditions. See Gcloud::Backoff to control this behavior, or
89
119
  # specify the wanted behavior in the call:
90
120
  #
121
+ # require "gcloud/storage"
122
+ #
123
+ # storage = Gcloud.storage
124
+ #
125
+ # bucket = storage.find_bucket "my-bucket"
91
126
  # bucket.delete retries: 5
127
+ #
92
128
  def delete options = {}
93
129
  ensure_connection!
94
130
  resp = connection.delete_bucket name, options
@@ -102,14 +138,66 @@ module Gcloud
102
138
  ##
103
139
  # Retrieves a list of files matching the criteria.
104
140
  #
141
+ # === Parameters
142
+ #
143
+ # +options+::
144
+ # An optional Hash for controlling additional behavor. (+Hash+)
145
+ # +options [:prefix]+::
146
+ # Filter results to files whose names begin with this prefix.
147
+ # (+String+)
148
+ # +options [:token]+::
149
+ # A previously-returned page token representing part of the larger set
150
+ # of results to view. (+String+)
151
+ # +options [:max]+::
152
+ # Maximum number of items plus prefixes to return. As duplicate prefixes
153
+ # are omitted, fewer total results may be returned than requested.
154
+ # The default value of this parameter is 1,000 items. (+Integer+)
155
+ # +options [:versions]+::
156
+ # If +true+, lists all versions of an object as distinct results.
157
+ # The default is +false+. For more information, see
158
+ # {Object Versioning
159
+ # }[https://cloud.google.com/storage/docs/object-versioning].
160
+ # (+Boolean+)
161
+ # +options [:max]+::
162
+ # Maximum number of buckets to return. (+Integer+)
163
+ #
164
+ # === Returns
165
+ #
166
+ # Array of Gcloud::Datastore::File (Gcloud::Datastore::File::List)
167
+ #
168
+ # === Examples
169
+ #
170
+ # require "gcloud/storage"
171
+ #
105
172
  # storage = Gcloud.storage
173
+ #
106
174
  # bucket = storage.find_bucket "my-bucket"
107
175
  # files = bucket.files
108
176
  # files.each do |file|
109
177
  # puts file.name
110
178
  # end
111
179
  #
112
- # See Gcloud::Storage::File
180
+ # If you have a significant number of files, you may need to paginate
181
+ # through them: (See File::List#token)
182
+ #
183
+ # require "gcloud/storage"
184
+ #
185
+ # storage = Gcloud.storage
186
+ #
187
+ # bucket = storage.find_bucket "my-bucket"
188
+ #
189
+ # all_files = []
190
+ # tmp_files = bucket.files
191
+ # while tmp_files.any? do
192
+ # tmp_files.each do |file|
193
+ # all_files << file
194
+ # end
195
+ # # break loop if no more buckets available
196
+ # break if tmp_files.token.nil?
197
+ # # get the next group of files
198
+ # tmp_files = bucket.files token: tmp_files.token
199
+ # end
200
+ #
113
201
  def files options = {}
114
202
  ensure_connection!
115
203
  resp = connection.list_files name, options
@@ -123,12 +211,26 @@ module Gcloud
123
211
  ##
124
212
  # Retrieves a file matching the path.
125
213
  #
214
+ # === Parameters
215
+ #
216
+ # +path+::
217
+ # Name (path) of the file. (+String+)
218
+ #
219
+ # === Returns
220
+ #
221
+ # Gcloud::Datastore::File or nil if file does not exist
222
+ #
223
+ # === Example
224
+ #
225
+ # require "gcloud/storage"
226
+ #
126
227
  # storage = Gcloud.storage
228
+ #
127
229
  # bucket = storage.find_bucket "my-bucket"
230
+ #
128
231
  # file = bucket.find_file "path/to/my-file.ext"
129
232
  # puts file.name
130
233
  #
131
- # See Gcloud::Storage::File
132
234
  def find_file path, options = {}
133
235
  ensure_connection!
134
236
  resp = connection.get_file name, path, options
@@ -140,17 +242,57 @@ module Gcloud
140
242
  end
141
243
 
142
244
  ##
143
- # Create a new Gcloud::Storeage::File object by providing a
144
- # File object to upload and the path to store it with.
245
+ # Create a new File object by providing a path to a local file to upload
246
+ # and the path to store it with in the bucket.
247
+ #
248
+ # === Parameters
249
+ #
250
+ # +file+::
251
+ # Path of the file on the filesystem to upload. (+String+)
252
+ # +path+::
253
+ # Path to store the file in Google Cloud Storage. (+String+)
254
+ # +options+::
255
+ # An optional Hash for controlling additional behavor. (+Hash+)
256
+ # +options [:acl]+::
257
+ # A predefined set of access controls to apply to this file.
258
+ # (+String+)
259
+ #
260
+ # Acceptable values are:
261
+ # * +auth+, +auth_read+, +authenticated+, +authenticated_read+,
262
+ # +authenticatedRead+:: File owner gets OWNER access, and
263
+ # allAuthenticatedUsers get READER access.
264
+ # * +owner_full+, +bucketOwnerFullControl+:: File owner gets OWNER
265
+ # access, and project team owners get OWNER access.
266
+ # * +owner_read+, +bucketOwnerRead+:: File owner gets OWNER access, and
267
+ # project team owners get READER access.
268
+ # * +private+:: File owner gets OWNER access.
269
+ # * +project_private+, +projectPrivate+:: File owner gets OWNER access,
270
+ # and project team members get access according to their roles.
271
+ # * +public+, +public_read+, +publicRead+:: File owner gets OWNER
272
+ # access, and allUsers get READER access.
273
+ #
274
+ # === Returns
275
+ #
276
+ # Gcloud::Datastore::File
277
+ #
278
+ # === Examples
279
+ #
280
+ # require "gcloud/storage"
145
281
  #
146
282
  # storage = Gcloud.storage
283
+ #
147
284
  # bucket = storage.find_bucket "my-bucket"
285
+ #
148
286
  # bucket.create_file "path/to/local.file.ext"
149
287
  #
150
288
  # Additionally, a destination path can be specified.
151
289
  #
290
+ # require "gcloud/storage"
291
+ #
152
292
  # storage = Gcloud.storage
293
+ #
153
294
  # bucket = storage.find_bucket "my-bucket"
295
+ #
154
296
  # bucket.create_file "path/to/local.file.ext",
155
297
  # "destination/path/file.ext"
156
298
  #
@@ -160,11 +302,16 @@ module Gcloud
160
302
  # by 265KB then it will be lowered to the nearest acceptible
161
303
  # value.
162
304
  #
305
+ # require "gcloud/storage"
306
+ #
307
+ # storage = Gcloud.storage
308
+ #
309
+ # bucket = storage.find_bucket "my-bucket"
310
+ #
163
311
  # bucket.create_file "path/to/local.file.ext",
164
312
  # "destination/path/file.ext",
165
313
  # chunk_size: 1024*1024 # 1 MB chunk
166
314
  #
167
- # See Gcloud::Storage::File
168
315
  def create_file file, path = nil, options = {}
169
316
  ensure_connection!
170
317
  # TODO: Raise if file doesn't exist
@@ -181,13 +328,103 @@ module Gcloud
181
328
  end
182
329
 
183
330
  ##
184
- # Access Control List
331
+ # The Bucket::Acl instance used to control access to the bucket.
332
+ #
333
+ # A bucket has owners, writers, and readers. Permissions can be granted to
334
+ # an individual user's email address, a group's email address, as well as
335
+ # many predefined lists. See the
336
+ # {Access Control guide
337
+ # }[https://cloud.google.com/storage/docs/access-control]
338
+ # for more.
339
+ #
340
+ # === Examples
341
+ #
342
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
343
+ # the email address:
344
+ #
345
+ # require "gcloud/storage"
346
+ #
347
+ # storage = Gcloud.storage
348
+ #
349
+ # bucket = storage.find_bucket "my-todo-app"
350
+ #
351
+ # email = "heidi@example.net"
352
+ # bucket.acl.add_reader "user-#{email}"
353
+ #
354
+ # Access to a bucket can be granted to a group by appending +"group-"+ to
355
+ # the email address:
356
+ #
357
+ # require "gcloud/storage"
358
+ #
359
+ # storage = Gcloud.storage
360
+ #
361
+ # bucket = storage.find_bucket "my-todo-app"
362
+ #
363
+ # email = "authors@example.net"
364
+ # bucket.acl.add_reader "group-#{email}"
365
+ #
366
+ # Access to a bucket can also be granted to a predefined list of
367
+ # permissions:
368
+ #
369
+ # require "gcloud/storage"
370
+ #
371
+ # storage = Gcloud.storage
372
+ #
373
+ # bucket = storage.find_bucket "my-todo-app"
374
+ #
375
+ # bucket.acl.public!
376
+ #
185
377
  def acl
186
378
  @acl ||= Bucket::Acl.new self
187
379
  end
188
380
 
189
381
  ##
190
- # Default Access Control List
382
+ # The Bucket::DefaultAcl instance used to control access to the bucket's
383
+ # files.
384
+ #
385
+ # A bucket's files have owners, writers, and readers. Permissions can be
386
+ # granted to an individual user's email address, a group's email address,
387
+ # as well as many predefined lists. See the
388
+ # {Access Control guide
389
+ # }[https://cloud.google.com/storage/docs/access-control]
390
+ # for more.
391
+ #
392
+ # === Examples
393
+ #
394
+ # Access to a bucket's files can be granted to a user by appending
395
+ # +"user-"+ to the email address:
396
+ #
397
+ # require "gcloud/storage"
398
+ #
399
+ # storage = Gcloud.storage
400
+ #
401
+ # bucket = storage.find_bucket "my-todo-app"
402
+ #
403
+ # email = "heidi@example.net"
404
+ # bucket.default_acl.add_reader "user-#{email}"
405
+ #
406
+ # Access to a bucket's files can be granted to a group by appending
407
+ # +"group-"+ to the email address:
408
+ #
409
+ # require "gcloud/storage"
410
+ #
411
+ # storage = Gcloud.storage
412
+ #
413
+ # bucket = storage.find_bucket "my-todo-app"
414
+ #
415
+ # email = "authors@example.net"
416
+ # bucket.default_acl.add_reader "group-#{email}"
417
+ #
418
+ # Access to a bucket's files can also be granted to a predefined list of
419
+ # permissions:
420
+ #
421
+ # require "gcloud/storage"
422
+ #
423
+ # storage = Gcloud.storage
424
+ #
425
+ # bucket = storage.find_bucket "my-todo-app"
426
+ #
427
+ # bucket.default_acl.public!
191
428
  def default_acl
192
429
  @default_acl ||= Bucket::DefaultAcl.new self
193
430
  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,18 @@ module Gcloud
16
17
  module Storage
17
18
  class Bucket
18
19
  ##
20
+ # = Bucket Access Control List
21
+ #
19
22
  # Represents a Bucket's Access Control List.
23
+ #
24
+ # require "glcoud/storage"
25
+ #
26
+ # storage = Gcloud.storage
27
+ #
28
+ # bucket = storage.find_bucket "my-bucket"
29
+ #
30
+ # bucket.acl.readers.each { |reader| puts reader }
31
+ #
20
32
  class Acl
21
33
  RULES = { "authenticatedRead" => "authenticatedRead",
22
34
  "auth" => "authenticatedRead",
@@ -31,7 +43,7 @@ module Gcloud
31
43
  "public" => "publicRead",
32
44
  "public_read" => "publicRead",
33
45
  "publicReadWrite" => "publicReadWrite",
34
- "public_write" => "publicReadWrite" }
46
+ "public_write" => "publicReadWrite" } #:nodoc:
35
47
 
36
48
  ##
37
49
  # Initialized a new Acl object.
@@ -44,6 +56,19 @@ module Gcloud
44
56
  @readers = nil
45
57
  end
46
58
 
59
+ ##
60
+ # Reloads all Access Control List data for the bucket.
61
+ #
62
+ # === Example
63
+ #
64
+ # require "glcoud/storage"
65
+ #
66
+ # storage = Gcloud.storage
67
+ #
68
+ # bucket = storage.find_bucket "my-bucket"
69
+ #
70
+ # bucket.acl.refresh!
71
+ #
47
72
  def refresh!
48
73
  resp = @connection.list_bucket_acls @bucket
49
74
  acls = resp.data["items"]
@@ -52,21 +77,116 @@ module Gcloud
52
77
  @readers = entities_from_acls acls, "READER"
53
78
  end
54
79
 
80
+ ##
81
+ # Lists the owners of the bucket.
82
+ #
83
+ # === Returns
84
+ #
85
+ # Array of Strings
86
+ #
87
+ # === Example
88
+ #
89
+ # require "glcoud/storage"
90
+ #
91
+ # storage = Gcloud.storage
92
+ #
93
+ # bucket = storage.find_bucket "my-bucket"
94
+ #
95
+ # bucket.acl.owners.each { |owner| puts owner }
96
+ #
55
97
  def owners
56
98
  refresh! if @owners.nil?
57
99
  @owners
58
100
  end
59
101
 
102
+ ##
103
+ # Lists the owners of the bucket.
104
+ #
105
+ # === Returns
106
+ #
107
+ # Array of Strings
108
+ #
109
+ # === Example
110
+ #
111
+ # require "glcoud/storage"
112
+ #
113
+ # storage = Gcloud.storage
114
+ #
115
+ # bucket = storage.find_bucket "my-bucket"
116
+ #
117
+ # bucket.acl.writers.each { |writer| puts writer }
118
+ #
60
119
  def writers
61
120
  refresh! if @writers.nil?
62
121
  @writers
63
122
  end
64
123
 
124
+ ##
125
+ # Lists the readers of the bucket.
126
+ #
127
+ # === Returns
128
+ #
129
+ # Array of Strings
130
+ #
131
+ # === Example
132
+ #
133
+ # require "glcoud/storage"
134
+ #
135
+ # storage = Gcloud.storage
136
+ #
137
+ # bucket = storage.find_bucket "my-bucket"
138
+ #
139
+ # bucket.acl.readers.each { |reader| puts reader }
140
+ #
65
141
  def readers
66
142
  refresh! if @readers.nil?
67
143
  @readers
68
144
  end
69
145
 
146
+ ##
147
+ # Grants owner permission to the bucket.
148
+ #
149
+ # === Parameters
150
+ #
151
+ # +entity+::
152
+ # The entity holding the permission, in one of the following forms:
153
+ # (+String+)
154
+ #
155
+ # * user-userId
156
+ # * user-email
157
+ # * group-groupId
158
+ # * group-email
159
+ # * domain-domain
160
+ # * project-team-projectId
161
+ # * allUsers
162
+ # * allAuthenticatedUsers
163
+ #
164
+ # === Examples
165
+ #
166
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
167
+ # the email address:
168
+ #
169
+ # require "glcoud/storage"
170
+ #
171
+ # storage = Gcloud.storage
172
+ #
173
+ # bucket = storage.find_bucket "my-bucket"
174
+ #
175
+ # email = "heidi@example.net"
176
+ # bucket.acl.add_owner "user-#{email}"
177
+ #
178
+ # Access to a bucket can be granted to a group by appending +"group-"+
179
+ # to the email address:
180
+ #
181
+ # require "glcoud/storage"
182
+ #
183
+ # storage = Gcloud.storage
184
+ #
185
+ # bucket = storage.find_bucket "my-bucket"
186
+ #
187
+ # email = "authors@example.net"
188
+ # bucket.acl.add_owner "group-#{email}"
189
+ #
70
190
  def add_owner entity
71
191
  resp = @connection.insert_bucket_acl @bucket, entity, "OWNER"
72
192
  if resp.success?
@@ -77,6 +197,50 @@ module Gcloud
77
197
  nil
78
198
  end
79
199
 
200
+ ##
201
+ # Grants writer permission to the bucket.
202
+ #
203
+ # === Parameters
204
+ #
205
+ # +entity+::
206
+ # The entity holding the permission, in one of the following forms:
207
+ # (+String+)
208
+ #
209
+ # * user-userId
210
+ # * user-email
211
+ # * group-groupId
212
+ # * group-email
213
+ # * domain-domain
214
+ # * project-team-projectId
215
+ # * allUsers
216
+ # * allAuthenticatedUsers
217
+ #
218
+ # === Examples
219
+ #
220
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
221
+ # the email address:
222
+ #
223
+ # require "glcoud/storage"
224
+ #
225
+ # storage = Gcloud.storage
226
+ #
227
+ # bucket = storage.find_bucket "my-bucket"
228
+ #
229
+ # email = "heidi@example.net"
230
+ # bucket.acl.add_writer "user-#{email}"
231
+ #
232
+ # Access to a bucket can be granted to a group by appending +"group-"+
233
+ # to the email address:
234
+ #
235
+ # require "glcoud/storage"
236
+ #
237
+ # storage = Gcloud.storage
238
+ #
239
+ # bucket = storage.find_bucket "my-bucket"
240
+ #
241
+ # email = "authors@example.net"
242
+ # bucket.acl.add_writer "group-#{email}"
243
+ #
80
244
  def add_writer entity
81
245
  resp = @connection.insert_bucket_acl @bucket, entity, "WRITER"
82
246
  if resp.success?
@@ -87,6 +251,50 @@ module Gcloud
87
251
  nil
88
252
  end
89
253
 
254
+ ##
255
+ # Grants reader permission to the bucket.
256
+ #
257
+ # === Parameters
258
+ #
259
+ # +entity+::
260
+ # The entity holding the permission, in one of the following forms:
261
+ # (+String+)
262
+ #
263
+ # * user-userId
264
+ # * user-email
265
+ # * group-groupId
266
+ # * group-email
267
+ # * domain-domain
268
+ # * project-team-projectId
269
+ # * allUsers
270
+ # * allAuthenticatedUsers
271
+ #
272
+ # === Examples
273
+ #
274
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
275
+ # the email address:
276
+ #
277
+ # require "glcoud/storage"
278
+ #
279
+ # storage = Gcloud.storage
280
+ #
281
+ # bucket = storage.find_bucket "my-bucket"
282
+ #
283
+ # email = "heidi@example.net"
284
+ # bucket.acl.add_reader "user-#{email}"
285
+ #
286
+ # Access to a bucket can be granted to a group by appending +"group-"+
287
+ # to the email address:
288
+ #
289
+ # require "glcoud/storage"
290
+ #
291
+ # storage = Gcloud.storage
292
+ #
293
+ # bucket = storage.find_bucket "my-bucket"
294
+ #
295
+ # email = "authors@example.net"
296
+ # bucket.acl.add_reader "group-#{email}"
297
+ #
90
298
  def add_reader entity
91
299
  resp = @connection.insert_bucket_acl @bucket, entity, "READER"
92
300
  if resp.success?
@@ -97,6 +305,35 @@ module Gcloud
97
305
  nil
98
306
  end
99
307
 
308
+ ##
309
+ # Permenently deletes the entity from the bucket's access control list.
310
+ #
311
+ # === Parameters
312
+ #
313
+ # +entity+::
314
+ # The entity holding the permission, in one of the following forms:
315
+ # (+String+)
316
+ #
317
+ # * user-userId
318
+ # * user-email
319
+ # * group-groupId
320
+ # * group-email
321
+ # * domain-domain
322
+ # * project-team-projectId
323
+ # * allUsers
324
+ # * allAuthenticatedUsers
325
+ #
326
+ # === Example
327
+ #
328
+ # require "glcoud/storage"
329
+ #
330
+ # storage = Gcloud.storage
331
+ #
332
+ # bucket = storage.find_bucket "my-bucket"
333
+ #
334
+ # email = "heidi@example.net"
335
+ # bucket.acl.delete "user-#{email}"
336
+ #
100
337
  def delete entity
101
338
  resp = @connection.delete_bucket_acl @bucket, entity
102
339
  if resp.success?
@@ -108,12 +345,26 @@ module Gcloud
108
345
  false
109
346
  end
110
347
 
111
- def self.predefined_rule_for rule_name
348
+ def self.predefined_rule_for rule_name #:nodoc:
112
349
  RULES[rule_name.to_s]
113
350
  end
114
351
 
115
352
  # Predefined ACL helpers
116
353
 
354
+ ##
355
+ # Convenience method to apply the +authenticatedRead+ predefined ACL
356
+ # rule to the bucket.
357
+ #
358
+ # === Example
359
+ #
360
+ # require "glcoud/storage"
361
+ #
362
+ # storage = Gcloud.storage
363
+ #
364
+ # bucket = storage.find_bucket "my-bucket"
365
+ #
366
+ # bucket.acl.auth!
367
+ #
117
368
  def auth!
118
369
  update_predefined_acl! "authenticatedRead"
119
370
  end
@@ -122,21 +373,76 @@ module Gcloud
122
373
  alias_method :authenticated!, :auth!
123
374
  alias_method :authenticated_read!, :auth!
124
375
 
376
+ ##
377
+ # Convenience method to apply the +private+ predefined ACL
378
+ # rule to the bucket.
379
+ #
380
+ # === Example
381
+ #
382
+ # require "glcoud/storage"
383
+ #
384
+ # storage = Gcloud.storage
385
+ #
386
+ # bucket = storage.find_bucket "my-bucket"
387
+ #
388
+ # bucket.acl.private!
389
+ #
125
390
  def private!
126
391
  update_predefined_acl! "private"
127
392
  end
128
393
 
394
+ ##
395
+ # Convenience method to apply the +projectPrivate+ predefined ACL
396
+ # rule to the bucket.
397
+ #
398
+ # === Example
399
+ #
400
+ # require "glcoud/storage"
401
+ #
402
+ # storage = Gcloud.storage
403
+ #
404
+ # bucket = storage.find_bucket "my-bucket"
405
+ #
406
+ # bucket.acl.project_private!
407
+ #
129
408
  def project_private!
130
409
  update_predefined_acl! "projectPrivate"
131
410
  end
132
411
  alias_method :projectPrivate!, :project_private!
133
412
 
413
+ ##
414
+ # Convenience method to apply the +publicRead+ predefined ACL
415
+ # rule to the bucket.
416
+ #
417
+ # === Example
418
+ #
419
+ # require "glcoud/storage"
420
+ #
421
+ # storage = Gcloud.storage
422
+ #
423
+ # bucket = storage.find_bucket "my-bucket"
424
+ #
425
+ # bucket.acl.public!
426
+ #
134
427
  def public!
135
428
  update_predefined_acl! "publicRead"
136
429
  end
137
430
  alias_method :publicRead!, :public!
138
431
  alias_method :public_read!, :public!
139
432
 
433
+ # Convenience method to apply the +publicReadWrite+ predefined ACL
434
+ # rule to the bucket.
435
+ #
436
+ # === Example
437
+ #
438
+ # require "glcoud/storage"
439
+ #
440
+ # storage = Gcloud.storage
441
+ #
442
+ # bucket = storage.find_bucket "my-bucket"
443
+ #
444
+ # bucket.acl.public_write!
445
+ #
140
446
  def public_write!
141
447
  update_predefined_acl! "publicReadWrite"
142
448
  end
@@ -159,7 +465,18 @@ module Gcloud
159
465
  end
160
466
 
161
467
  ##
468
+ # = Bucket Default Access Control List
469
+ #
162
470
  # Represents a Bucket's Default Access Control List.
471
+ #
472
+ # require "glcoud/storage"
473
+ #
474
+ # storage = Gcloud.storage
475
+ #
476
+ # bucket = storage.find_bucket "my-bucket"
477
+ #
478
+ # bucket.default_acl.readers.each { |reader| puts reader }
479
+ #
163
480
  class DefaultAcl
164
481
  RULES = { "authenticatedRead" => "authenticatedRead",
165
482
  "auth" => "authenticatedRead",
@@ -175,7 +492,7 @@ module Gcloud
175
492
  "project_private" => "projectPrivate",
176
493
  "publicRead" => "publicRead",
177
494
  "public" => "publicRead",
178
- "public_read" => "publicRead" }
495
+ "public_read" => "publicRead" } #:nodoc:
179
496
 
180
497
  ##
181
498
  # Initialized a new DefaultAcl object.
@@ -188,6 +505,19 @@ module Gcloud
188
505
  @readers = nil
189
506
  end
190
507
 
508
+ ##
509
+ # Reloads all Default Access Control List data for the bucket.
510
+ #
511
+ # === Example
512
+ #
513
+ # require "glcoud/storage"
514
+ #
515
+ # storage = Gcloud.storage
516
+ #
517
+ # bucket = storage.find_bucket "my-bucket"
518
+ #
519
+ # bucket.default_acl.refresh!
520
+ #
191
521
  def refresh!
192
522
  resp = @connection.list_default_acls @bucket
193
523
  acls = resp.data["items"]
@@ -196,21 +526,116 @@ module Gcloud
196
526
  @readers = entities_from_acls acls, "READER"
197
527
  end
198
528
 
529
+ ##
530
+ # Lists the default owners for files in the bucket.
531
+ #
532
+ # === Returns
533
+ #
534
+ # Array of Strings
535
+ #
536
+ # === Example
537
+ #
538
+ # require "glcoud/storage"
539
+ #
540
+ # storage = Gcloud.storage
541
+ #
542
+ # bucket = storage.find_bucket "my-bucket"
543
+ #
544
+ # bucket.default_acl.owners.each { |owner| puts owner }
545
+ #
199
546
  def owners
200
547
  refresh! if @owners.nil?
201
548
  @owners
202
549
  end
203
550
 
551
+ ##
552
+ # Lists the default writers for files in the bucket.
553
+ #
554
+ # === Returns
555
+ #
556
+ # Array of Strings
557
+ #
558
+ # === Example
559
+ #
560
+ # require "glcoud/storage"
561
+ #
562
+ # storage = Gcloud.storage
563
+ #
564
+ # bucket = storage.find_bucket "my-bucket"
565
+ #
566
+ # bucket.default_acl.writers.each { |writer| puts writer }
567
+ #
204
568
  def writers
205
569
  refresh! if @writers.nil?
206
570
  @writers
207
571
  end
208
572
 
573
+ ##
574
+ # Lists the default readers for files in the bucket.
575
+ #
576
+ # === Returns
577
+ #
578
+ # Array of Strings
579
+ #
580
+ # === Example
581
+ #
582
+ # require "glcoud/storage"
583
+ #
584
+ # storage = Gcloud.storage
585
+ #
586
+ # bucket = storage.find_bucket "my-bucket"
587
+ #
588
+ # bucket.default_acl.readers.each { |reader| puts reader }
589
+ #
209
590
  def readers
210
591
  refresh! if @readers.nil?
211
592
  @readers
212
593
  end
213
594
 
595
+ ##
596
+ # Grants default owner permission to files in the bucket.
597
+ #
598
+ # === Parameters
599
+ #
600
+ # +entity+::
601
+ # The entity holding the permission, in one of the following forms:
602
+ # (+String+)
603
+ #
604
+ # * user-userId
605
+ # * user-email
606
+ # * group-groupId
607
+ # * group-email
608
+ # * domain-domain
609
+ # * project-team-projectId
610
+ # * allUsers
611
+ # * allAuthenticatedUsers
612
+ #
613
+ # === Examples
614
+ #
615
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
616
+ # the email address:
617
+ #
618
+ # require "glcoud/storage"
619
+ #
620
+ # storage = Gcloud.storage
621
+ #
622
+ # bucket = storage.find_bucket "my-bucket"
623
+ #
624
+ # email = "heidi@example.net"
625
+ # bucket.default_acl.add_owner "user-#{email}"
626
+ #
627
+ # Access to a bucket can be granted to a group by appending +"group-"+
628
+ # to the email address:
629
+ #
630
+ # require "glcoud/storage"
631
+ #
632
+ # storage = Gcloud.storage
633
+ #
634
+ # bucket = storage.find_bucket "my-bucket"
635
+ #
636
+ # email = "authors@example.net"
637
+ # bucket.default_acl.add_owner "group-#{email}"
638
+ #
214
639
  def add_owner entity
215
640
  resp = @connection.insert_default_acl @bucket, entity, "OWNER"
216
641
  if resp.success?
@@ -221,6 +646,50 @@ module Gcloud
221
646
  nil
222
647
  end
223
648
 
649
+ ##
650
+ # Grants default writer permission to files in the bucket.
651
+ #
652
+ # === Parameters
653
+ #
654
+ # +entity+::
655
+ # The entity holding the permission, in one of the following forms:
656
+ # (+String+)
657
+ #
658
+ # * user-userId
659
+ # * user-email
660
+ # * group-groupId
661
+ # * group-email
662
+ # * domain-domain
663
+ # * project-team-projectId
664
+ # * allUsers
665
+ # * allAuthenticatedUsers
666
+ #
667
+ # === Examples
668
+ #
669
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
670
+ # the email address:
671
+ #
672
+ # require "glcoud/storage"
673
+ #
674
+ # storage = Gcloud.storage
675
+ #
676
+ # bucket = storage.find_bucket "my-bucket"
677
+ #
678
+ # email = "heidi@example.net"
679
+ # bucket.default_acl.add_writer "user-#{email}"
680
+ #
681
+ # Access to a bucket can be granted to a group by appending +"group-"+
682
+ # to the email address:
683
+ #
684
+ # require "glcoud/storage"
685
+ #
686
+ # storage = Gcloud.storage
687
+ #
688
+ # bucket = storage.find_bucket "my-bucket"
689
+ #
690
+ # email = "authors@example.net"
691
+ # bucket.default_acl.add_writer "group-#{email}"
692
+ #
224
693
  def add_writer entity
225
694
  resp = @connection.insert_default_acl @bucket, entity, "WRITER"
226
695
  if resp.success?
@@ -231,6 +700,50 @@ module Gcloud
231
700
  nil
232
701
  end
233
702
 
703
+ ##
704
+ # Grants default reader permission to files in the bucket.
705
+ #
706
+ # === Parameters
707
+ #
708
+ # +entity+::
709
+ # The entity holding the permission, in one of the following forms:
710
+ # (+String+)
711
+ #
712
+ # * user-userId
713
+ # * user-email
714
+ # * group-groupId
715
+ # * group-email
716
+ # * domain-domain
717
+ # * project-team-projectId
718
+ # * allUsers
719
+ # * allAuthenticatedUsers
720
+ #
721
+ # === Examples
722
+ #
723
+ # Access to a bucket can be granted to a user by appending +"user-"+ to
724
+ # the email address:
725
+ #
726
+ # require "glcoud/storage"
727
+ #
728
+ # storage = Gcloud.storage
729
+ #
730
+ # bucket = storage.find_bucket "my-bucket"
731
+ #
732
+ # email = "heidi@example.net"
733
+ # bucket.default_acl.add_reader "user-#{email}"
734
+ #
735
+ # Access to a bucket can be granted to a group by appending +"group-"+
736
+ # to the email address:
737
+ #
738
+ # require "glcoud/storage"
739
+ #
740
+ # storage = Gcloud.storage
741
+ #
742
+ # bucket = storage.find_bucket "my-bucket"
743
+ #
744
+ # email = "authors@example.net"
745
+ # bucket.default_acl.add_reader "group-#{email}"
746
+ #
234
747
  def add_reader entity
235
748
  resp = @connection.insert_default_acl @bucket, entity, "READER"
236
749
  if resp.success?
@@ -241,6 +754,36 @@ module Gcloud
241
754
  nil
242
755
  end
243
756
 
757
+ ##
758
+ # Permenently deletes the entity from the bucket's default access
759
+ # control list for files.
760
+ #
761
+ # === Parameters
762
+ #
763
+ # +entity+::
764
+ # The entity holding the permission, in one of the following forms:
765
+ # (+String+)
766
+ #
767
+ # * user-userId
768
+ # * user-email
769
+ # * group-groupId
770
+ # * group-email
771
+ # * domain-domain
772
+ # * project-team-projectId
773
+ # * allUsers
774
+ # * allAuthenticatedUsers
775
+ #
776
+ # === Example
777
+ #
778
+ # require "glcoud/storage"
779
+ #
780
+ # storage = Gcloud.storage
781
+ #
782
+ # bucket = storage.find_bucket "my-bucket"
783
+ #
784
+ # email = "heidi@example.net"
785
+ # bucket.default_acl.delete "user-#{email}"
786
+ #
244
787
  def delete entity
245
788
  resp = @connection.delete_default_acl @bucket, entity
246
789
  if resp.success?
@@ -252,12 +795,26 @@ module Gcloud
252
795
  false
253
796
  end
254
797
 
255
- def self.predefined_rule_for rule_name
798
+ def self.predefined_rule_for rule_name #:nodoc:
256
799
  RULES[rule_name.to_s]
257
800
  end
258
801
 
259
802
  # Predefined ACL helpers
260
803
 
804
+ ##
805
+ # Convenience method to apply the default +authenticatedRead+
806
+ # predefined ACL rule to files in the bucket.
807
+ #
808
+ # === Example
809
+ #
810
+ # require "glcoud/storage"
811
+ #
812
+ # storage = Gcloud.storage
813
+ #
814
+ # bucket = storage.find_bucket "my-bucket"
815
+ #
816
+ # bucket.acl.auth!
817
+ #
261
818
  def auth!
262
819
  update_predefined_default_acl! "authenticatedRead"
263
820
  end
@@ -266,25 +823,95 @@ module Gcloud
266
823
  alias_method :authenticated!, :auth!
267
824
  alias_method :authenticated_read!, :auth!
268
825
 
826
+ ##
827
+ # Convenience method to apply the default +bucketOwnerFullControl+
828
+ # predefined ACL rule to files in the bucket.
829
+ #
830
+ # === Example
831
+ #
832
+ # require "glcoud/storage"
833
+ #
834
+ # storage = Gcloud.storage
835
+ #
836
+ # bucket = storage.find_bucket "my-bucket"
837
+ #
838
+ # bucket.acl.owner_full!
839
+ #
269
840
  def owner_full!
270
841
  update_predefined_default_acl! "bucketOwnerFullControl"
271
842
  end
272
843
  alias_method :bucketOwnerFullControl!, :owner_full!
273
844
 
845
+ ##
846
+ # Convenience method to apply the default +bucketOwnerRead+
847
+ # predefined ACL rule to files in the bucket.
848
+ #
849
+ # === Example
850
+ #
851
+ # require "glcoud/storage"
852
+ #
853
+ # storage = Gcloud.storage
854
+ #
855
+ # bucket = storage.find_bucket "my-bucket"
856
+ #
857
+ # bucket.acl.owner_read!
858
+ #
274
859
  def owner_read!
275
860
  update_predefined_default_acl! "bucketOwnerRead"
276
861
  end
277
862
  alias_method :bucketOwnerRead!, :owner_read!
278
863
 
864
+ ##
865
+ # Convenience method to apply the default +private+
866
+ # predefined ACL rule to files in the bucket.
867
+ #
868
+ # === Example
869
+ #
870
+ # require "glcoud/storage"
871
+ #
872
+ # storage = Gcloud.storage
873
+ #
874
+ # bucket = storage.find_bucket "my-bucket"
875
+ #
876
+ # bucket.acl.private!
877
+ #
279
878
  def private!
280
879
  update_predefined_default_acl! "private"
281
880
  end
282
881
 
882
+ ##
883
+ # Convenience method to apply the default +projectPrivate+
884
+ # predefined ACL rule to files in the bucket.
885
+ #
886
+ # === Example
887
+ #
888
+ # require "glcoud/storage"
889
+ #
890
+ # storage = Gcloud.storage
891
+ #
892
+ # bucket = storage.find_bucket "my-bucket"
893
+ #
894
+ # bucket.acl.project_private!
895
+ #
283
896
  def project_private!
284
897
  update_predefined_default_acl! "projectPrivate"
285
898
  end
286
899
  alias_method :projectPrivate!, :project_private!
287
900
 
901
+ ##
902
+ # Convenience method to apply the default +publicRead+
903
+ # predefined ACL rule to files in the bucket.
904
+ #
905
+ # === Example
906
+ #
907
+ # require "glcoud/storage"
908
+ #
909
+ # storage = Gcloud.storage
910
+ #
911
+ # bucket = storage.find_bucket "my-bucket"
912
+ #
913
+ # bucket.acl.public!
914
+ #
288
915
  def public!
289
916
  update_predefined_default_acl! "publicRead"
290
917
  end