gcloud 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +8 -8
  2. data/AUTHENTICATION.md +3 -3
  3. data/CHANGELOG.md +92 -0
  4. data/OVERVIEW.md +3 -3
  5. data/lib/gcloud.rb +75 -25
  6. data/lib/gcloud/backoff.rb +5 -1
  7. data/lib/gcloud/bigquery.rb +25 -43
  8. data/lib/gcloud/bigquery/copy_job.rb +13 -13
  9. data/lib/gcloud/bigquery/data.rb +20 -16
  10. data/lib/gcloud/bigquery/dataset.rb +202 -177
  11. data/lib/gcloud/bigquery/dataset/access.rb +118 -104
  12. data/lib/gcloud/bigquery/dataset/list.rb +14 -18
  13. data/lib/gcloud/bigquery/extract_job.rb +12 -12
  14. data/lib/gcloud/bigquery/insert_response.rb +12 -14
  15. data/lib/gcloud/bigquery/job.rb +45 -57
  16. data/lib/gcloud/bigquery/job/list.rb +18 -24
  17. data/lib/gcloud/bigquery/load_job.rb +35 -27
  18. data/lib/gcloud/bigquery/project.rb +53 -73
  19. data/lib/gcloud/bigquery/query_data.rb +28 -35
  20. data/lib/gcloud/bigquery/query_job.rb +18 -18
  21. data/lib/gcloud/bigquery/schema.rb +359 -0
  22. data/lib/gcloud/bigquery/service.rb +506 -0
  23. data/lib/gcloud/bigquery/table.rb +185 -266
  24. data/lib/gcloud/bigquery/table/list.rb +15 -19
  25. data/lib/gcloud/bigquery/view.rb +126 -81
  26. data/lib/gcloud/datastore.rb +39 -27
  27. data/lib/gcloud/datastore/commit.rb +2 -2
  28. data/lib/gcloud/datastore/dataset.rb +8 -19
  29. data/lib/gcloud/datastore/dataset/lookup_results.rb +2 -4
  30. data/lib/gcloud/datastore/dataset/query_results.rb +0 -2
  31. data/lib/gcloud/datastore/entity.rb +7 -1
  32. data/lib/gcloud/datastore/errors.rb +5 -27
  33. data/lib/gcloud/datastore/grpc_utils.rb +4 -3
  34. data/lib/gcloud/datastore/key.rb +6 -0
  35. data/lib/gcloud/datastore/service.rb +18 -12
  36. data/lib/gcloud/datastore/transaction.rb +0 -10
  37. data/lib/gcloud/dns.rb +29 -19
  38. data/lib/gcloud/dns/change.rb +10 -15
  39. data/lib/gcloud/dns/change/list.rb +4 -4
  40. data/lib/gcloud/dns/importer.rb +1 -1
  41. data/lib/gcloud/dns/project.rb +32 -49
  42. data/lib/gcloud/dns/record.rb +8 -2
  43. data/lib/gcloud/dns/record/list.rb +4 -4
  44. data/lib/gcloud/dns/service.rb +167 -0
  45. data/lib/gcloud/dns/zone.rb +33 -52
  46. data/lib/gcloud/dns/zone/list.rb +12 -16
  47. data/lib/gcloud/errors.rb +31 -19
  48. data/lib/gcloud/logging.rb +50 -39
  49. data/lib/gcloud/logging/entry.rb +197 -24
  50. data/lib/gcloud/logging/entry/list.rb +0 -2
  51. data/lib/gcloud/logging/logger.rb +1 -1
  52. data/lib/gcloud/logging/metric.rb +3 -9
  53. data/lib/gcloud/logging/metric/list.rb +0 -2
  54. data/lib/gcloud/logging/project.rb +58 -54
  55. data/lib/gcloud/logging/resource_descriptor.rb +2 -2
  56. data/lib/gcloud/logging/resource_descriptor/list.rb +0 -2
  57. data/lib/gcloud/logging/service.rb +32 -23
  58. data/lib/gcloud/logging/sink.rb +8 -14
  59. data/lib/gcloud/logging/sink/list.rb +0 -2
  60. data/lib/gcloud/pubsub.rb +21 -16
  61. data/lib/gcloud/pubsub/policy.rb +204 -0
  62. data/lib/gcloud/pubsub/project.rb +26 -38
  63. data/lib/gcloud/pubsub/service.rb +39 -31
  64. data/lib/gcloud/pubsub/subscription.rb +56 -59
  65. data/lib/gcloud/pubsub/subscription/list.rb +4 -4
  66. data/lib/gcloud/pubsub/topic.rb +69 -66
  67. data/lib/gcloud/pubsub/topic/list.rb +0 -2
  68. data/lib/gcloud/pubsub/topic/{batch.rb → publisher.rb} +15 -2
  69. data/lib/gcloud/resource_manager.rb +27 -26
  70. data/lib/gcloud/resource_manager/manager.rb +19 -39
  71. data/lib/gcloud/resource_manager/policy.rb +211 -0
  72. data/lib/gcloud/resource_manager/project.rb +97 -121
  73. data/lib/gcloud/resource_manager/project/list.rb +7 -7
  74. data/lib/gcloud/resource_manager/project/updater.rb +4 -9
  75. data/lib/gcloud/resource_manager/service.rb +127 -0
  76. data/lib/gcloud/storage.rb +24 -42
  77. data/lib/gcloud/storage/bucket.rb +104 -192
  78. data/lib/gcloud/storage/bucket/acl.rb +47 -143
  79. data/lib/gcloud/storage/bucket/cors.rb +55 -11
  80. data/lib/gcloud/storage/bucket/list.rb +14 -14
  81. data/lib/gcloud/storage/errors.rb +3 -43
  82. data/lib/gcloud/storage/file.rb +114 -111
  83. data/lib/gcloud/storage/file/acl.rb +27 -113
  84. data/lib/gcloud/storage/file/list.rb +21 -21
  85. data/lib/gcloud/storage/project.rb +49 -59
  86. data/lib/gcloud/storage/service.rb +347 -0
  87. data/lib/gcloud/translate.rb +24 -14
  88. data/lib/gcloud/translate/api.rb +12 -21
  89. data/lib/gcloud/translate/detection.rb +5 -5
  90. data/lib/gcloud/translate/language.rb +1 -1
  91. data/lib/gcloud/translate/service.rb +80 -0
  92. data/lib/gcloud/translate/translation.rb +6 -6
  93. data/lib/gcloud/version.rb +1 -1
  94. data/lib/gcloud/vision.rb +24 -15
  95. data/lib/gcloud/vision/annotate.rb +24 -21
  96. data/lib/gcloud/vision/annotation.rb +9 -9
  97. data/lib/gcloud/vision/annotation/entity.rb +11 -11
  98. data/lib/gcloud/vision/annotation/face.rb +25 -25
  99. data/lib/gcloud/vision/annotation/properties.rb +8 -8
  100. data/lib/gcloud/vision/annotation/safe_search.rb +4 -4
  101. data/lib/gcloud/vision/annotation/text.rb +7 -7
  102. data/lib/gcloud/vision/annotation/vertex.rb +1 -1
  103. data/lib/gcloud/vision/image.rb +11 -11
  104. data/lib/gcloud/vision/location.rb +5 -2
  105. data/lib/gcloud/vision/project.rb +14 -16
  106. data/lib/gcloud/vision/service.rb +66 -0
  107. data/lib/google/api_client.rb +0 -0
  108. metadata +27 -24
  109. data/lib/gcloud/bigquery/connection.rb +0 -624
  110. data/lib/gcloud/bigquery/errors.rb +0 -68
  111. data/lib/gcloud/bigquery/table/schema.rb +0 -234
  112. data/lib/gcloud/dns/connection.rb +0 -173
  113. data/lib/gcloud/dns/errors.rb +0 -68
  114. data/lib/gcloud/resource_manager/connection.rb +0 -134
  115. data/lib/gcloud/resource_manager/errors.rb +0 -68
  116. data/lib/gcloud/storage/connection.rb +0 -444
  117. data/lib/gcloud/translate/connection.rb +0 -85
  118. data/lib/gcloud/translate/errors.rb +0 -68
  119. data/lib/gcloud/upload.rb +0 -95
  120. data/lib/gcloud/vision/connection.rb +0 -63
  121. data/lib/gcloud/vision/errors.rb +0 -69
@@ -30,6 +30,10 @@ module Gcloud
30
30
  ##
31
31
  # @private Create a new Subscription::List with an array of values.
32
32
  def initialize arr = []
33
+ @topic = nil
34
+ @prefix = nil
35
+ @token = nil
36
+ @max = nil
33
37
  super arr
34
38
  end
35
39
 
@@ -191,16 +195,12 @@ module Gcloud
191
195
  options = { prefix: @prefix, token: @token, max: @max }
192
196
  grpc = @service.list_subscriptions options
193
197
  self.class.from_grpc grpc, @service, @max
194
- rescue GRPC::BadStatus => e
195
- raise Error.from_error(e)
196
198
  end
197
199
 
198
200
  def next_topic_subscriptions
199
201
  options = { token: @token, max: @max }
200
202
  grpc = @service.list_topics_subscriptions @topic, options
201
203
  self.class.from_topic_grpc grpc, @service, @topic, @max
202
- rescue GRPC::BadStatus => e
203
- raise Error.from_error(e)
204
204
  end
205
205
  end
206
206
  end
@@ -14,9 +14,10 @@
14
14
 
15
15
 
16
16
  require "gcloud/errors"
17
- require "gcloud/pubsub/topic/batch"
17
+ require "gcloud/pubsub/topic/publisher"
18
18
  require "gcloud/pubsub/topic/list"
19
19
  require "gcloud/pubsub/subscription"
20
+ require "gcloud/pubsub/policy"
20
21
 
21
22
  module Gcloud
22
23
  module Pubsub
@@ -86,9 +87,7 @@ module Gcloud
86
87
  def delete
87
88
  ensure_service!
88
89
  service.delete_topic name
89
- return true
90
- rescue GRPC::BadStatus => e
91
- raise Error.from_error(e)
90
+ true
92
91
  end
93
92
 
94
93
  ##
@@ -143,8 +142,6 @@ module Gcloud
143
142
  options = { deadline: deadline, endpoint: endpoint }
144
143
  grpc = service.create_subscription name, subscription_name, options
145
144
  Subscription.from_grpc grpc, service
146
- rescue GRPC::BadStatus => e
147
- raise Error.from_error(e)
148
145
  end
149
146
  alias_method :create_subscription, :subscribe
150
147
  alias_method :new_subscription, :subscribe
@@ -186,9 +183,8 @@ module Gcloud
186
183
  return Subscription.new_lazy subscription_name, service if skip_lookup
187
184
  grpc = service.get_subscription subscription_name
188
185
  Subscription.from_grpc grpc, service
189
- rescue GRPC::BadStatus => e
190
- return nil if e.code == 5
191
- raise Error.from_error(e)
186
+ rescue Gcloud::NotFoundError
187
+ nil
192
188
  end
193
189
  alias_method :get_subscription, :subscription
194
190
  alias_method :find_subscription, :subscription
@@ -232,8 +228,6 @@ module Gcloud
232
228
  options = { token: token, max: max }
233
229
  grpc = service.list_topics_subscriptions name, options
234
230
  Subscription::List.from_topic_grpc grpc, service, name, max
235
- rescue GRPC::BadStatus => e
236
- raise Error.from_error(e)
237
231
  end
238
232
  alias_method :find_subscriptions, :subscriptions
239
233
  alias_method :list_subscriptions, :subscriptions
@@ -243,8 +237,9 @@ module Gcloud
243
237
  #
244
238
  # @param [String, File] data The message data.
245
239
  # @param [Hash] attributes Optional attributes for the message.
246
- # @yield [batch] a block for publishing multiple messages in one request
247
- # @yieldparam [Topic::Batch] batch the batch object
240
+ # @yield [publisher] a block for publishing multiple messages in one
241
+ # request
242
+ # @yieldparam [Topic::Publisher] publisher the topic publisher object
248
243
  #
249
244
  # @return [Message, Array<Message>] Returns the published message when
250
245
  # called without a block, or an array of messages when called with a
@@ -286,102 +281,115 @@ module Gcloud
286
281
  # pubsub = gcloud.pubsub
287
282
  #
288
283
  # topic = pubsub.topic "my-topic"
289
- # msgs = topic.publish do |batch|
290
- # batch.publish "new-message-1", foo: :bar
291
- # batch.publish "new-message-2", foo: :baz
292
- # batch.publish "new-message-3", foo: :bif
284
+ # msgs = topic.publish do |t|
285
+ # t.publish "new-message-1", foo: :bar
286
+ # t.publish "new-message-2", foo: :baz
287
+ # t.publish "new-message-3", foo: :bif
293
288
  # end
294
289
  #
295
290
  def publish data = nil, attributes = {}
296
291
  ensure_service!
297
- batch = Batch.new data, attributes
298
- yield batch if block_given?
299
- return nil if batch.messages.count.zero?
300
- publish_batch_messages batch
292
+ publisher = Publisher.new data, attributes
293
+ yield publisher if block_given?
294
+ return nil if publisher.messages.count.zero?
295
+ publish_batch_messages publisher
301
296
  end
302
297
 
303
298
  ##
304
- # Gets the access control policy.
299
+ # Gets the [Cloud IAM](https://cloud.google.com/iam/) access control
300
+ # policy for this topic.
301
+ #
302
+ # @see https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#iampolicy
303
+ # google.iam.v1.IAMPolicy
305
304
  #
306
305
  # @param [Boolean] force Force the latest policy to be retrieved from the
307
306
  # Pub/Sub service when `true`. Otherwise the policy will be memoized to
308
307
  # reduce the number of API calls made to the Pub/Sub service. The
309
308
  # default is `false`.
310
309
  #
311
- # @return [Hash] Returns a hash that conforms to the following structure:
310
+ # @yield [policy] A block for updating the policy. The latest policy will
311
+ # be read from the Pub/Sub service and passed to the block. After the
312
+ # block completes, the modified policy will be written to the service.
313
+ # @yieldparam [Policy] policy the current Cloud IAM Policy for this topic
312
314
  #
313
- # {
314
- # "etag"=>"CAE=",
315
- # "bindings" => [{
316
- # "role" => "roles/viewer",
317
- # "members" => ["serviceAccount:your-service-account"]
318
- # }]
319
- # }
315
+ # @return [Policy] the current Cloud IAM Policy for this topic
320
316
  #
321
317
  # @example Policy values are memoized to reduce the number of API calls:
322
318
  # require "gcloud"
323
319
  #
324
320
  # gcloud = Gcloud.new
325
321
  # pubsub = gcloud.pubsub
326
- #
327
322
  # topic = pubsub.topic "my-topic"
328
- # puts topic.policy["bindings"]
329
- # puts topic.policy["rules"]
323
+ #
324
+ # policy = topic.policy # API call
325
+ # policy_2 = topic.policy # No API call
330
326
  #
331
327
  # @example Use `force` to retrieve the latest policy from the service:
332
328
  # require "gcloud"
333
329
  #
334
330
  # gcloud = Gcloud.new
335
331
  # pubsub = gcloud.pubsub
332
+ # topic = pubsub.topic "my-topic"
336
333
  #
334
+ # policy = topic.policy force: true # API call
335
+ # policy_2 = topic.policy force: true # API call
336
+ #
337
+ # @example Update the policy by passing a block:
338
+ # require "gcloud"
339
+ #
340
+ # gcloud = Gcloud.new
341
+ # pubsub = gcloud.pubsub
337
342
  # topic = pubsub.topic "my-topic"
338
- # policy = topic.policy force: true
343
+ #
344
+ # policy = topic.policy do |p|
345
+ # p.add "roles/owner", "user:owner@example.com"
346
+ # end # 2 API calls
339
347
  #
340
348
  def policy force: nil
341
- @policy = nil if force
349
+ @policy = nil if force || block_given?
342
350
  @policy ||= begin
343
351
  ensure_service!
344
352
  grpc = service.get_topic_policy name
345
- JSON.parse(Google::Iam::V1::Policy.encode_json(grpc))
346
- rescue GRPC::BadStatus => e
347
- raise Error.from_error(e)
353
+ Policy.from_grpc grpc
348
354
  end
355
+ return @policy unless block_given?
356
+ p = @policy.deep_dup
357
+ yield p
358
+ self.policy = p
349
359
  end
350
360
 
351
361
  ##
352
- # Sets the access control policy.
362
+ # Updates the [Cloud IAM](https://cloud.google.com/iam/) access control
363
+ # policy for this topic. The policy should be read from {#policy}. See
364
+ # {Gcloud::Pubsub::Policy} for an explanation of the policy `etag`
365
+ # property and how to modify policies.
353
366
  #
354
- # @param [String] new_policy A hash that conforms to the following
355
- # structure:
367
+ # You can also update the policy by passing a block to {#policy}, which
368
+ # will call this method internally after the block completes.
356
369
  #
357
- # {
358
- # "bindings" => [{
359
- # "role" => "roles/viewer",
360
- # "members" => ["serviceAccount:your-service-account"]
361
- # }]
362
- # }
370
+ # @see https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#iampolicy
371
+ # google.iam.v1.IAMPolicy
372
+ #
373
+ # @param [Policy] new_policy a new or modified Cloud IAM Policy for this
374
+ # topic
363
375
  #
364
376
  # @example
365
377
  # require "gcloud"
366
378
  #
367
379
  # gcloud = Gcloud.new
368
380
  # pubsub = gcloud.pubsub
369
- #
370
- # viewer_policy = {
371
- # "bindings" => [{
372
- # "role" => "roles/viewer",
373
- # "members" => ["serviceAccount:your-service-account"]
374
- # }]
375
- # }
376
381
  # topic = pubsub.topic "my-topic"
377
- # topic.policy = viewer_policy
382
+ #
383
+ # policy = topic.policy # API call
384
+ #
385
+ # policy.add "roles/owner", "user:owner@example.com"
386
+ #
387
+ # topic.policy = policy # API call
378
388
  #
379
389
  def policy= new_policy
380
390
  ensure_service!
381
- grpc = service.set_topic_policy name, new_policy
382
- @policy = JSON.parse(Google::Iam::V1::Policy.encode_json(grpc))
383
- rescue GRPC::BadStatus => e
384
- raise Error.from_error(e)
391
+ grpc = service.set_topic_policy name, new_policy.to_grpc
392
+ @policy = Policy.from_grpc grpc
385
393
  end
386
394
 
387
395
  ##
@@ -424,8 +432,6 @@ module Gcloud
424
432
  ensure_service!
425
433
  grpc = service.test_topic_permissions name, permissions
426
434
  grpc.permissions
427
- rescue GRPC::BadStatus => e
428
- raise Error.from_error(e)
429
435
  end
430
436
 
431
437
  ##
@@ -490,9 +496,8 @@ module Gcloud
490
496
  ensure_service!
491
497
  return @grpc if @grpc
492
498
  @grpc = service.get_topic @name
493
- rescue GRPC::BadStatus => e
494
- return nil if e.code == 5
495
- raise Error.from_error(e)
499
+ rescue Gcloud::NotFoundError
500
+ nil
496
501
  end
497
502
 
498
503
  ##
@@ -500,8 +505,6 @@ module Gcloud
500
505
  def publish_batch_messages batch
501
506
  grpc = service.publish name, batch.messages
502
507
  batch.to_gcloud_messages Array(grpc.message_ids)
503
- rescue GRPC::BadStatus => e
504
- raise Error.from_error(e)
505
508
  end
506
509
  end
507
510
  end
@@ -75,8 +75,6 @@ module Gcloud
75
75
  options = { token: token, max: @max }
76
76
  grpc = @service.list_topics options
77
77
  self.class.from_grpc grpc, @service, @max
78
- rescue GRPC::BadStatus => e
79
- raise Error.from_error(e)
80
78
  end
81
79
 
82
80
  ##
@@ -17,8 +17,21 @@ module Gcloud
17
17
  module Pubsub
18
18
  class Topic
19
19
  ##
20
- # Batch object used to publish multiple messages at once.
21
- class Batch
20
+ # Topic Publisher object used to publish multiple messages at once.
21
+ #
22
+ # @example
23
+ # require "gcloud"
24
+ #
25
+ # gcloud = Gcloud.new
26
+ # pubsub = gcloud.pubsub
27
+ #
28
+ # topic = pubsub.topic "my-topic"
29
+ # msgs = topic.publish do |t|
30
+ # t.publish "new-message-1", foo: :bar
31
+ # t.publish "new-message-2", foo: :baz
32
+ # t.publish "new-message-3", foo: :bif
33
+ # end
34
+ class Publisher
22
35
  ##
23
36
  # @private The messages to publish
24
37
  attr_reader :messages
@@ -34,6 +34,9 @@ module Gcloud
34
34
  # The default scope is:
35
35
  #
36
36
  # * `https://www.googleapis.com/auth/cloud-platform`
37
+ # @param [Integer] retries Number of times to retry requests on server error.
38
+ # The default value is `3`. Optional.
39
+ # @param [Integer] timeout Default timeout to use in requests. Optional.
37
40
  #
38
41
  # @return [Gcloud::ResourceManager::Manager]
39
42
  #
@@ -45,14 +48,17 @@ module Gcloud
45
48
  # puts projects.project_id
46
49
  # end
47
50
  #
48
- def self.resource_manager keyfile = nil, scope: nil
51
+ def self.resource_manager keyfile = nil, scope: nil, retries: nil,
52
+ timeout: nil
49
53
  if keyfile.nil?
50
54
  credentials = Gcloud::ResourceManager::Credentials.default scope: scope
51
55
  else
52
56
  credentials = Gcloud::ResourceManager::Credentials.new keyfile,
53
57
  scope: scope
54
58
  end
55
- Gcloud::ResourceManager::Manager.new credentials
59
+ Gcloud::ResourceManager::Manager.new(
60
+ Gcloud::ResourceManager::Service.new(
61
+ credentials, retries: retries, timeout: timeout))
56
62
  end
57
63
 
58
64
  ##
@@ -97,8 +103,8 @@ module Gcloud
97
103
  # ```
98
104
  #
99
105
  # Also make sure all `GCLOUD` environment variables are cleared of any service
100
- # accounts. Then gcloud will be able to detect the user authentication and
101
- # connect with those credentials.
106
+ # accounts. Then gcloud-ruby will be able to detect the user authentication
107
+ # and connect with those credentials.
102
108
  #
103
109
  # ```ruby
104
110
  # require "gcloud"
@@ -201,24 +207,23 @@ module Gcloud
201
207
  # resource_manager.undelete "tokyo-rain-123"
202
208
  # ```
203
209
  #
204
- # ## Configuring Backoff
210
+ # ## Configuring retries and timeout
205
211
  #
206
- # The {Gcloud::Backoff} class allows users to globally configure how Cloud API
207
- # requests are automatically retried in the case of some errors, such as a
208
- # `500` or `503` status code, or a specific internal error code such as
209
- # `rateLimitExceeded`.
212
+ # You can configure how many times API requests may be automatically retried.
213
+ # When an API request fails, the response will be inspected to see if the
214
+ # request meets criteria indicating that it may succeed on retry, such as
215
+ # `500` and `503` status codes or a specific internal error code such as
216
+ # `rateLimitExceeded`. If it meets the criteria, the request will be retried
217
+ # after a delay. If another error occurs, the delay will be increased before a
218
+ # subsequent attempt, until the `retries` limit is reached.
210
219
  #
211
- # If an API call fails, the response will be inspected to see if the call
212
- # should be retried. If the response matches the criteria, then the request
213
- # will be retried after a delay. If another error occurs, the delay will be
214
- # increased incrementally before a subsequent attempt. The first retry will be
215
- # delayed one second, the second retry two seconds, and so on.
220
+ # You can also set the request `timeout` value in seconds.
216
221
  #
217
222
  # ```ruby
218
223
  # require "gcloud"
219
- # require "gcloud/backoff"
220
224
  #
221
- # Gcloud::Backoff.retries = 5 # Raise the maximum number of retries from 3
225
+ # gcloud = Gcloud.new
226
+ # resource_manager = gcloud.resource_manager retries: 10, timeout: 120
222
227
  # ```
223
228
  #
224
229
  # See the [Resource Manager error
@@ -234,7 +239,8 @@ module Gcloud
234
239
  # Overview](https://cloud.google.com/iam/docs/overview) for more information.
235
240
  #
236
241
  # A project's access control policy can be retrieved. (See
237
- # {Gcloud::ResourceManager::Project#policy})
242
+ # {Gcloud::ResourceManager::Project#policy} and
243
+ # {Gcloud::ResourceManager::Policy}.)
238
244
  #
239
245
  # ```ruby
240
246
  # require "gcloud"
@@ -245,8 +251,7 @@ module Gcloud
245
251
  # policy = project.policy
246
252
  # ```
247
253
  #
248
- # A project's access control policy can also be set. (See
249
- # {Gcloud::ResourceManager::Project#policy=})
254
+ # A project's access control policy can also be updated:
250
255
  #
251
256
  # ```ruby
252
257
  # require "gcloud"
@@ -255,13 +260,9 @@ module Gcloud
255
260
  # resource_manager = gcloud.resource_manager
256
261
  # project = resource_manager.project "tokyo-rain-123"
257
262
  #
258
- # viewer_policy = {
259
- # "bindings" => [{
260
- # "role" => "roles/viewer",
261
- # "members" => ["serviceAccount:your-service-account"]
262
- # }]
263
- # }
264
- # project.policy = viewer_policy
263
+ # policy = project.policy do |p|
264
+ # p.add "roles/viewer", "serviceAccount:your-service-account"
265
+ # end
265
266
  # ```
266
267
  #
267
268
  # And permissions can be tested on a project. (See
@@ -13,9 +13,9 @@
13
13
  # limitations under the License.
14
14
 
15
15
 
16
+ require "gcloud/errors"
16
17
  require "gcloud/resource_manager/credentials"
17
- require "gcloud/resource_manager/connection"
18
- require "gcloud/resource_manager/errors"
18
+ require "gcloud/resource_manager/service"
19
19
  require "gcloud/resource_manager/project"
20
20
 
21
21
  module Gcloud
@@ -37,15 +37,15 @@ module Gcloud
37
37
  # See {Gcloud#resource_manager}
38
38
  class Manager
39
39
  ##
40
- # @private The Connection object.
41
- attr_accessor :connection
40
+ # @private The Service object.
41
+ attr_accessor :service
42
42
 
43
43
  ##
44
- # @private Creates a new Connection instance.
44
+ # @private Creates a new Service instance.
45
45
  #
46
46
  # See {Gcloud.resource_manager}
47
- def initialize credentials
48
- @connection = Connection.new credentials
47
+ def initialize service
48
+ @service = service
49
49
  end
50
50
 
51
51
  ##
@@ -113,12 +113,8 @@ module Gcloud
113
113
  # end
114
114
  #
115
115
  def projects filter: nil, token: nil, max: nil
116
- resp = connection.list_project filter: filter, token: token, max: max
117
- if resp.success?
118
- Project::List.from_response resp, self, filter, max
119
- else
120
- fail ApiError.from_response(resp)
121
- end
116
+ gapi = service.list_project filter: filter, token: token, max: max
117
+ Project::List.from_gapi gapi, self, filter, max
122
118
  end
123
119
 
124
120
  ##
@@ -138,12 +134,10 @@ module Gcloud
138
134
  # project.project_id #=> "tokyo-rain-123"
139
135
  #
140
136
  def project project_id
141
- resp = connection.get_project project_id
142
- if resp.success?
143
- Project.from_gapi resp.data, connection
144
- else
145
- nil
146
- end
137
+ gapi = service.get_project project_id
138
+ Project.from_gapi gapi, service
139
+ rescue NotFoundError
140
+ nil
147
141
  end
148
142
 
149
143
  ##
@@ -194,14 +188,8 @@ module Gcloud
194
188
  # labels: {env: :development}
195
189
  #
196
190
  def create_project project_id, name: nil, labels: nil
197
- resp = connection.create_project project_id,
198
- name,
199
- labels
200
- if resp.success?
201
- Project.from_gapi resp.data, connection
202
- else
203
- fail ApiError.from_response(resp)
204
- end
191
+ gapi = service.create_project project_id, name, labels
192
+ Project.from_gapi gapi, service
205
193
  end
206
194
 
207
195
  ##
@@ -233,12 +221,8 @@ module Gcloud
233
221
  # resource_manager.delete "tokyo-rain-123"
234
222
  #
235
223
  def delete project_id
236
- resp = connection.delete_project project_id
237
- if resp.success?
238
- true
239
- else
240
- fail ApiError.from_response(resp)
241
- end
224
+ service.delete_project project_id
225
+ true
242
226
  end
243
227
 
244
228
  ##
@@ -259,12 +243,8 @@ module Gcloud
259
243
  # resource_manager.undelete "tokyo-rain-123"
260
244
  #
261
245
  def undelete project_id
262
- resp = connection.undelete_project project_id
263
- if resp.success?
264
- true
265
- else
266
- fail ApiError.from_response(resp)
267
- end
246
+ service.undelete_project project_id
247
+ true
268
248
  end
269
249
 
270
250
  protected