gcloud 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +36 -0
  3. data/lib/gcloud/backoff.rb +5 -5
  4. data/lib/gcloud/bigquery.rb +24 -0
  5. data/lib/gcloud/bigquery/connection.rb +32 -25
  6. data/lib/gcloud/bigquery/data.rb +99 -1
  7. data/lib/gcloud/bigquery/dataset.rb +5 -13
  8. data/lib/gcloud/bigquery/dataset/list.rb +124 -2
  9. data/lib/gcloud/bigquery/job/list.rb +125 -2
  10. data/lib/gcloud/bigquery/project.rb +30 -27
  11. data/lib/gcloud/bigquery/query_data.rb +102 -1
  12. data/lib/gcloud/bigquery/table.rb +17 -2
  13. data/lib/gcloud/bigquery/table/list.rb +132 -3
  14. data/lib/gcloud/datastore.rb +30 -19
  15. data/lib/gcloud/datastore/dataset.rb +2 -22
  16. data/lib/gcloud/datastore/dataset/lookup_results.rb +160 -4
  17. data/lib/gcloud/datastore/dataset/query_results.rb +229 -23
  18. data/lib/gcloud/datastore/transaction.rb +2 -5
  19. data/lib/gcloud/dns.rb +20 -0
  20. data/lib/gcloud/dns/change/list.rb +109 -6
  21. data/lib/gcloud/dns/connection.rb +18 -9
  22. data/lib/gcloud/dns/project.rb +4 -8
  23. data/lib/gcloud/dns/record/list.rb +96 -13
  24. data/lib/gcloud/dns/zone.rb +9 -24
  25. data/lib/gcloud/dns/zone/list.rb +102 -5
  26. data/lib/gcloud/dns/zone/transaction.rb +1 -1
  27. data/lib/gcloud/logging.rb +19 -0
  28. data/lib/gcloud/logging/entry/list.rb +83 -14
  29. data/lib/gcloud/logging/metric/list.rb +89 -12
  30. data/lib/gcloud/logging/project.rb +18 -30
  31. data/lib/gcloud/logging/resource_descriptor/list.rb +105 -6
  32. data/lib/gcloud/logging/sink/list.rb +89 -12
  33. data/lib/gcloud/pubsub.rb +23 -0
  34. data/lib/gcloud/pubsub/project.rb +21 -29
  35. data/lib/gcloud/pubsub/service.rb +1 -3
  36. data/lib/gcloud/pubsub/subscription/list.rb +167 -13
  37. data/lib/gcloud/pubsub/topic.rb +15 -13
  38. data/lib/gcloud/pubsub/topic/batch.rb +10 -4
  39. data/lib/gcloud/pubsub/topic/list.rb +134 -8
  40. data/lib/gcloud/resource_manager.rb +24 -0
  41. data/lib/gcloud/resource_manager/connection.rb +18 -9
  42. data/lib/gcloud/resource_manager/manager.rb +7 -4
  43. data/lib/gcloud/resource_manager/project/list.rb +93 -14
  44. data/lib/gcloud/storage.rb +63 -0
  45. data/lib/gcloud/storage/bucket.rb +100 -61
  46. data/lib/gcloud/storage/bucket/list.rb +132 -8
  47. data/lib/gcloud/storage/connection.rb +68 -44
  48. data/lib/gcloud/storage/errors.rb +9 -3
  49. data/lib/gcloud/storage/file.rb +48 -4
  50. data/lib/gcloud/storage/file/list.rb +151 -15
  51. data/lib/gcloud/storage/file/verifier.rb +3 -3
  52. data/lib/gcloud/storage/project.rb +15 -30
  53. data/lib/gcloud/translate.rb +20 -0
  54. data/lib/gcloud/translate/connection.rb +12 -3
  55. data/lib/gcloud/version.rb +1 -1
  56. data/lib/gcloud/vision.rb +20 -0
  57. data/lib/gcloud/vision/connection.rb +10 -1
  58. data/lib/gcloud/vision/image.rb +15 -18
  59. metadata +16 -2
@@ -502,23 +502,15 @@ module Gcloud
502
502
  # puts table.name
503
503
  # end
504
504
  #
505
- # @example With pagination: (See {Dataset::List#token})
505
+ # @example Retrieve all tables: (See {Table::List#all})
506
506
  # require "gcloud"
507
507
  #
508
508
  # gcloud = Gcloud.new
509
509
  # bigquery = gcloud.bigquery
510
510
  # dataset = bigquery.dataset "my_dataset"
511
- #
512
- # all_tables = []
513
- # tmp_tables = dataset.tables
514
- # while tmp_tables.any? do
515
- # tmp_tables.each do |table|
516
- # all_tables << table
517
- # end
518
- # # break loop if no more tables available
519
- # break if tmp_tables.token.nil?
520
- # # get the next group of tables
521
- # tmp_tables = dataset.tables token: tmp_tables.token
511
+ # tables = dataset.tables
512
+ # tables.all do |table|
513
+ # puts table.name
522
514
  # end
523
515
  #
524
516
  # @!group Table
@@ -528,7 +520,7 @@ module Gcloud
528
520
  options = { token: token, max: max }
529
521
  resp = connection.list_tables dataset_id, options
530
522
  if resp.success?
531
- Table::List.from_response resp, connection
523
+ Table::List.from_response resp, connection, dataset_id, max
532
524
  else
533
525
  fail ApiError.from_response(resp)
534
526
  end
@@ -30,21 +30,143 @@ module Gcloud
30
30
  attr_accessor :etag
31
31
 
32
32
  ##
33
- # Create a new Dataset::List with an array of datasets.
33
+ # @private Create a new Dataset::List with an array of datasets.
34
34
  def initialize arr = []
35
35
  super arr
36
36
  end
37
37
 
38
+ ##
39
+ # Whether there is a next page of datasets.
40
+ #
41
+ # @return [Boolean]
42
+ #
43
+ # @example
44
+ # require "gcloud"
45
+ #
46
+ # gcloud = Gcloud.new
47
+ # bigquery = gcloud.bigquery
48
+ #
49
+ # datasets = bigquery.datasets
50
+ # if datasets.next?
51
+ # next_datasets = datasets.next
52
+ # end
53
+ def next?
54
+ !token.nil?
55
+ end
56
+
57
+ ##
58
+ # Retrieve the next page of datasets.
59
+ #
60
+ # @return [Dataset::List]
61
+ #
62
+ # @example
63
+ # require "gcloud"
64
+ #
65
+ # gcloud = Gcloud.new
66
+ # bigquery = gcloud.bigquery
67
+ #
68
+ # datasets = bigquery.datasets
69
+ # if datasets.next?
70
+ # next_datasets = datasets.next
71
+ # end
72
+ def next
73
+ return nil unless next?
74
+ ensure_connection!
75
+ options = { all: @hidden, token: token, max: @max }
76
+ resp = @connection.list_datasets options
77
+ if resp.success?
78
+ self.class.from_response resp, @connection
79
+ else
80
+ fail ApiError.from_response(resp)
81
+ end
82
+ end
83
+
84
+ ##
85
+ # Retrieves all datasets by repeatedly loading {#next} until {#next?}
86
+ # returns `false`. Calls the given block once for each dataset, which is
87
+ # passed as the parameter.
88
+ #
89
+ # An Enumerator is returned if no block is given.
90
+ #
91
+ # This method may make several API calls until all datasets are
92
+ # retrieved. Be sure to use as narrow a search criteria as possible.
93
+ # Please use with caution.
94
+ #
95
+ # @param [Integer] request_limit The upper limit of API requests to make
96
+ # to load all datasets. Default is no limit.
97
+ # @yield [dataset] The block for accessing each dataset.
98
+ # @yieldparam [Dataset] dataset The dataset object.
99
+ #
100
+ # @return [Enumerator]
101
+ #
102
+ # @example Iterating each result by passing a block:
103
+ # require "gcloud"
104
+ #
105
+ # gcloud = Gcloud.new
106
+ # bigquery = gcloud.bigquery
107
+ #
108
+ # bigquery.datasets.all do |dataset|
109
+ # puts dataset.name
110
+ # end
111
+ #
112
+ # @example Using the enumerator by not passing a block:
113
+ # require "gcloud"
114
+ #
115
+ # gcloud = Gcloud.new
116
+ # bigquery = gcloud.bigquery
117
+ #
118
+ # all_names = bigquery.datasets.all.map do |dataset|
119
+ # dataset.name
120
+ # end
121
+ #
122
+ # @example Limit the number of API calls made:
123
+ # require "gcloud"
124
+ #
125
+ # gcloud = Gcloud.new
126
+ # bigquery = gcloud.bigquery
127
+ #
128
+ # bigquery.datasets.all(request_limit: 10) do |dataset|
129
+ # puts dataset.name
130
+ # end
131
+ #
132
+ def all request_limit: nil
133
+ request_limit = request_limit.to_i if request_limit
134
+ unless block_given?
135
+ return enum_for(:all, request_limit: request_limit)
136
+ end
137
+ results = self
138
+ loop do
139
+ results.each { |r| yield r }
140
+ if request_limit
141
+ request_limit -= 1
142
+ break if request_limit < 0
143
+ end
144
+ break unless results.next?
145
+ results = results.next
146
+ end
147
+ end
148
+
38
149
  ##
39
150
  # @private New Dataset::List from a response object.
40
- def self.from_response resp, conn
151
+ def self.from_response resp, conn, hidden = nil, max = nil
41
152
  datasets = List.new(Array(resp.data["datasets"]).map do |gapi_object|
42
153
  Dataset.from_gapi gapi_object, conn
43
154
  end)
44
155
  datasets.instance_variable_set "@token", resp.data["nextPageToken"]
45
156
  datasets.instance_variable_set "@etag", resp.data["etag"]
157
+ datasets.instance_variable_set "@connection", conn
158
+ datasets.instance_variable_set "@hidden", hidden
159
+ datasets.instance_variable_set "@max", max
46
160
  datasets
47
161
  end
162
+
163
+ protected
164
+
165
+ ##
166
+ # Raise an error unless an active connection is available.
167
+ def ensure_connection!
168
+ fail "Must have active connection" unless @connection
169
+ end
48
170
  end
49
171
  end
50
172
  end
@@ -33,22 +33,145 @@ module Gcloud
33
33
  attr_accessor :total
34
34
 
35
35
  ##
36
- # Create a new Job::List with an array of jobs.
36
+ # @private Create a new Job::List with an array of jobs.
37
37
  def initialize arr = []
38
38
  super arr
39
39
  end
40
40
 
41
+ ##
42
+ # Whether there is a next page of jobs.
43
+ #
44
+ # @return [Boolean]
45
+ #
46
+ # @example
47
+ # require "gcloud"
48
+ #
49
+ # gcloud = Gcloud.new
50
+ # bigquery = gcloud.bigquery
51
+ #
52
+ # jobs = bigquery.jobs
53
+ # if jobs.next?
54
+ # next_jobs = jobs.next
55
+ # end
56
+ def next?
57
+ !token.nil?
58
+ end
59
+
60
+ ##
61
+ # Retrieve the next page of jobs.
62
+ #
63
+ # @return [Job::List]
64
+ #
65
+ # @example
66
+ # require "gcloud"
67
+ #
68
+ # gcloud = Gcloud.new
69
+ # bigquery = gcloud.bigquery
70
+ #
71
+ # jobs = bigquery.jobs
72
+ # if jobs.next?
73
+ # next_jobs = jobs.next
74
+ # end
75
+ def next
76
+ return nil unless next?
77
+ ensure_connection!
78
+ options = { all: @hidden, token: token, max: @max, filter: @filter }
79
+ resp = @connection.list_jobs options
80
+ if resp.success?
81
+ self.class.from_response resp, @connection, @hidden, @max, @filter
82
+ else
83
+ fail ApiError.from_response(resp)
84
+ end
85
+ end
86
+
87
+ ##
88
+ # Retrieves all jobs by repeatedly loading {#next} until {#next?}
89
+ # returns `false`. Calls the given block once for each job, which is
90
+ # passed as the parameter.
91
+ #
92
+ # An Enumerator is returned if no block is given.
93
+ #
94
+ # This method may make several API calls until all jobs are retrieved.
95
+ # Be sure to use as narrow a search criteria as possible. Please use
96
+ # with caution.
97
+ #
98
+ # @param [Integer] request_limit The upper limit of API requests to make
99
+ # to load all jobs. Default is no limit.
100
+ # @yield [job] The block for accessing each job.
101
+ # @yieldparam [Job] job The job object.
102
+ #
103
+ # @return [Enumerator]
104
+ #
105
+ # @example Iterating each job by passing a block:
106
+ # require "gcloud"
107
+ #
108
+ # gcloud = Gcloud.new
109
+ # bigquery = gcloud.bigquery
110
+ #
111
+ # bigquery.jobs.all do |job|
112
+ # puts job.state
113
+ # end
114
+ #
115
+ # @example Using the enumerator by not passing a block:
116
+ # require "gcloud"
117
+ #
118
+ # gcloud = Gcloud.new
119
+ # bigquery = gcloud.bigquery
120
+ #
121
+ # all_states = bigquery.jobs.all.map do |job|
122
+ # job.state
123
+ # end
124
+ #
125
+ # @example Limit the number of API calls made:
126
+ # require "gcloud"
127
+ #
128
+ # gcloud = Gcloud.new
129
+ # bigquery = gcloud.bigquery
130
+ #
131
+ # bigquery.jobs.all(request_limit: 10) do |job|
132
+ # puts job.state
133
+ # end
134
+ #
135
+ def all request_limit: nil
136
+ request_limit = request_limit.to_i if request_limit
137
+ unless block_given?
138
+ return enum_for(:all, request_limit: request_limit)
139
+ end
140
+ results = self
141
+ loop do
142
+ results.each { |r| yield r }
143
+ if request_limit
144
+ request_limit -= 1
145
+ break if request_limit < 0
146
+ end
147
+ break unless results.next?
148
+ results = results.next
149
+ end
150
+ end
151
+
41
152
  ##
42
153
  # @private New Job::List from a response object.
43
- def self.from_response resp, conn
154
+ def self.from_response resp, conn, hidden = nil, max = nil, filter = nil
44
155
  jobs = List.new(Array(resp.data["jobs"]).map do |gapi_object|
45
156
  Job.from_gapi gapi_object, conn
46
157
  end)
47
158
  jobs.instance_variable_set "@token", resp.data["nextPageToken"]
48
159
  jobs.instance_variable_set "@etag", resp.data["etag"]
49
160
  jobs.instance_variable_set "@total", resp.data["totalItems"]
161
+ jobs.instance_variable_set "@connection", conn
162
+ jobs.instance_variable_set "@hidden", hidden
163
+ jobs.instance_variable_set "@max", max
164
+ jobs.instance_variable_set "@filter", filter
50
165
  jobs
51
166
  end
167
+
168
+ protected
169
+
170
+ ##
171
+ # Raise an error unless an active connection is available.
172
+ def ensure_connection!
173
+ fail "Must have active connection" unless @connection
174
+ end
52
175
  end
53
176
  end
54
177
  end
@@ -210,6 +210,17 @@ module Gcloud
210
210
  # puts row["name"]
211
211
  # end
212
212
  #
213
+ # @example Retrieve all rows: (See {QueryData#all})
214
+ # require "gcloud"
215
+ #
216
+ # gcloud = Gcloud.new
217
+ # bigquery = gcloud.bigquery
218
+ #
219
+ # data = bigquery.query "SELECT name FROM [my_proj:my_data.my_table]"
220
+ # data.all do |row|
221
+ # puts row["name"]
222
+ # end
223
+ #
213
224
  def query query, max: nil, timeout: 10000, dryrun: nil, cache: true,
214
225
  dataset: nil, project: nil
215
226
  ensure_connection!
@@ -352,30 +363,23 @@ module Gcloud
352
363
  # puts dataset.name
353
364
  # end
354
365
  #
355
- # @example Retrieve all datasets, including hidden ones, with `:all`:
366
+ # @example Retrieve hidden datasets with the `all` optional arg:
356
367
  # require "gcloud"
357
368
  #
358
369
  # gcloud = Gcloud.new
359
370
  # bigquery = gcloud.bigquery
360
371
  #
361
- # all_datasets = bigquery.datasets, all: true
372
+ # all_datasets = bigquery.datasets all: true
362
373
  #
363
- # @example With pagination: (See {Dataset::List#token})
374
+ # @example Retrieve all datasets: (See {Dataset::List#all})
364
375
  # require "gcloud"
365
376
  #
366
377
  # gcloud = Gcloud.new
367
378
  # bigquery = gcloud.bigquery
368
379
  #
369
- # all_datasets = []
370
- # tmp_datasets = bigquery.datasets
371
- # while tmp_datasets.any? do
372
- # tmp_datasets.each do |dataset|
373
- # all_datasets << dataset
374
- # end
375
- # # break loop if no more datasets available
376
- # break if tmp_datasets.token.nil?
377
- # # get the next group of datasets
378
- # tmp_datasets = bigquery.datasets token: tmp_datasets.token
380
+ # datasets = bigquery.datasets
381
+ # datasets.all do |dataset|
382
+ # puts dataset.name
379
383
  # end
380
384
  #
381
385
  def datasets all: nil, token: nil, max: nil
@@ -383,7 +387,7 @@ module Gcloud
383
387
  options = { all: all, token: token, max: max }
384
388
  resp = connection.list_datasets options
385
389
  if resp.success?
386
- Dataset::List.from_response resp, connection
390
+ Dataset::List.from_response resp, connection, all, max
387
391
  else
388
392
  fail ApiError.from_response(resp)
389
393
  end
@@ -442,31 +446,30 @@ module Gcloud
442
446
  # bigquery = gcloud.bigquery
443
447
  #
444
448
  # jobs = bigquery.jobs
449
+ # jobs.each do |job|
450
+ # # process job
451
+ # end
445
452
  #
446
- # @example Retrieve only running jobs using the `:filter` option:
453
+ # @example Retrieve only running jobs using the `filter` optional arg:
447
454
  # require "gcloud"
448
455
  #
449
456
  # gcloud = Gcloud.new
450
457
  # bigquery = gcloud.bigquery
451
458
  #
452
459
  # running_jobs = bigquery.jobs filter: "running"
460
+ # running_jobs.each do |job|
461
+ # # process job
462
+ # end
453
463
  #
454
- # @example With pagination: (See {Job::List#token})
464
+ # @example Retrieve all jobs: (See {Job::List#all})
455
465
  # require "gcloud"
456
466
  #
457
467
  # gcloud = Gcloud.new
458
468
  # bigquery = gcloud.bigquery
459
469
  #
460
- # all_jobs = []
461
- # tmp_jobs = bigquery.jobs
462
- # while tmp_jobs.any? do
463
- # tmp_jobs.each do |job|
464
- # all_jobs << job
465
- # end
466
- # # break loop if no more jobs available
467
- # break if tmp_jobs.token.nil?
468
- # # get the next group of jobs
469
- # tmp_jobs = bigquery.jobs token: tmp_jobs.token
470
+ # jobs = bigquery.jobs
471
+ # jobs.all do |job|
472
+ # # process job
470
473
  # end
471
474
  #
472
475
  def jobs all: nil, token: nil, max: nil, filter: nil
@@ -474,7 +477,7 @@ module Gcloud
474
477
  options = { all: all, token: token, max: max, filter: filter }
475
478
  resp = connection.list_jobs options
476
479
  if resp.success?
477
- Job::List.from_response resp, connection
480
+ Job::List.from_response resp, connection, all, max, filter
478
481
  else
479
482
  fail ApiError.from_response(resp)
480
483
  end
@@ -73,11 +73,43 @@ module Gcloud
73
73
  end
74
74
 
75
75
  ##
76
- # Is there a next page of data?
76
+ # Whether there is a next page of query data.
77
+ #
78
+ # @return [Boolean]
79
+ #
80
+ # @example
81
+ # require "gcloud"
82
+ #
83
+ # gcloud = Gcloud.new
84
+ # bigquery = gcloud.bigquery
85
+ # job = bigquery.job "my_job"
86
+ #
87
+ # data = job.query_results
88
+ # if data.next?
89
+ # next_data = data.next
90
+ # end
91
+ #
77
92
  def next?
78
93
  !token.nil?
79
94
  end
80
95
 
96
+ ##
97
+ # Retrieve the next page of query data.
98
+ #
99
+ # @return [QueryData]
100
+ #
101
+ # @example
102
+ # require "gcloud"
103
+ #
104
+ # gcloud = Gcloud.new
105
+ # bigquery = gcloud.bigquery
106
+ # job = bigquery.job "my_job"
107
+ #
108
+ # data = job.query_results
109
+ # if data.next?
110
+ # next_data = data.next
111
+ # end
112
+ #
81
113
  def next
82
114
  return nil unless next?
83
115
  ensure_connection!
@@ -89,6 +121,75 @@ module Gcloud
89
121
  end
90
122
  end
91
123
 
124
+ ##
125
+ # Retrieves all rows by repeatedly loading {#next} until {#next?} returns
126
+ # `false`. Calls the given block once for each row, which is passed as the
127
+ # parameter.
128
+ #
129
+ # An Enumerator is returned if no block is given.
130
+ #
131
+ # This method may make several API calls until all rows are retrieved. Be
132
+ # sure to use as narrow a search criteria as possible. Please use with
133
+ # caution.
134
+ #
135
+ # @param [Integer] request_limit The upper limit of API requests to make
136
+ # to load all data. Default is no limit.
137
+ # @yield [row] The block for accessing each row of data.
138
+ # @yieldparam [Hash] row The row object.
139
+ #
140
+ # @return [Enumerator]
141
+ #
142
+ # @example Iterating each row by passing a block:
143
+ # require "gcloud"
144
+ #
145
+ # gcloud = Gcloud.new
146
+ # bigquery = gcloud.bigquery
147
+ # job = bigquery.job "my_job"
148
+ #
149
+ # data = job.query_results
150
+ # data.all do |row|
151
+ # puts row["word"]
152
+ # end
153
+ #
154
+ # @example Using the enumerator by not passing a block:
155
+ # require "gcloud"
156
+ #
157
+ # gcloud = Gcloud.new
158
+ # bigquery = gcloud.bigquery
159
+ # job = bigquery.job "my_job"
160
+ #
161
+ # data = job.query_results
162
+ # words = data.all.map do |row|
163
+ # row["word"]
164
+ # end
165
+ #
166
+ # @example Limit the number of API calls made:
167
+ # require "gcloud"
168
+ #
169
+ # gcloud = Gcloud.new
170
+ # bigquery = gcloud.bigquery
171
+ # job = bigquery.job "my_job"
172
+ #
173
+ # data = job.query_results
174
+ # data.all(request_limit: 10) do |row|
175
+ # puts row["word"]
176
+ # end
177
+ #
178
+ def all request_limit: nil
179
+ request_limit = request_limit.to_i if request_limit
180
+ return enum_for(:all, request_limit: request_limit) unless block_given?
181
+ results = self
182
+ loop do
183
+ results.each { |r| yield r }
184
+ if request_limit
185
+ request_limit -= 1
186
+ break if request_limit < 0
187
+ end
188
+ break unless results.next?
189
+ results = results.next
190
+ end
191
+ end
192
+
92
193
  ##
93
194
  # The BigQuery {Job} that was created to run the query.
94
195
  def job