gcloud 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +8 -0
  3. data/lib/gcloud.rb +48 -30
  4. data/lib/gcloud/bigquery.rb +4 -6
  5. data/lib/gcloud/bigquery/connection.rb +2 -14
  6. data/lib/gcloud/bigquery/dataset.rb +41 -42
  7. data/lib/gcloud/bigquery/project.rb +50 -46
  8. data/lib/gcloud/bigquery/query_job.rb +7 -8
  9. data/lib/gcloud/bigquery/table.rb +54 -55
  10. data/lib/gcloud/bigquery/table/schema.rb +30 -40
  11. data/lib/gcloud/bigquery/view.rb +10 -11
  12. data/lib/gcloud/credentials.rb +19 -25
  13. data/lib/gcloud/datastore.rb +4 -6
  14. data/lib/gcloud/datastore/dataset.rb +3 -5
  15. data/lib/gcloud/dns.rb +4 -6
  16. data/lib/gcloud/dns/connection.rb +17 -16
  17. data/lib/gcloud/dns/importer.rb +5 -11
  18. data/lib/gcloud/dns/project.rb +11 -12
  19. data/lib/gcloud/dns/zone.rb +52 -92
  20. data/lib/gcloud/dns/zone/transaction.rb +2 -2
  21. data/lib/gcloud/pubsub.rb +4 -6
  22. data/lib/gcloud/pubsub/connection.rb +1 -12
  23. data/lib/gcloud/pubsub/project.rb +30 -36
  24. data/lib/gcloud/pubsub/subscription.rb +18 -26
  25. data/lib/gcloud/pubsub/topic.rb +16 -26
  26. data/lib/gcloud/resource_manager.rb +5 -6
  27. data/lib/gcloud/resource_manager/connection.rb +4 -4
  28. data/lib/gcloud/resource_manager/manager.rb +10 -14
  29. data/lib/gcloud/resource_manager/project.rb +3 -5
  30. data/lib/gcloud/search.rb +295 -0
  31. data/lib/gcloud/search/api_client.rb +144 -0
  32. data/lib/gcloud/search/connection.rb +146 -0
  33. data/lib/gcloud/search/credentials.rb +30 -0
  34. data/lib/gcloud/search/document.rb +301 -0
  35. data/lib/gcloud/search/document/list.rb +85 -0
  36. data/lib/gcloud/search/errors.rb +67 -0
  37. data/lib/gcloud/search/field_value.rb +164 -0
  38. data/lib/gcloud/search/field_values.rb +263 -0
  39. data/lib/gcloud/search/fields.rb +267 -0
  40. data/lib/gcloud/search/index.rb +613 -0
  41. data/lib/gcloud/search/index/list.rb +90 -0
  42. data/lib/gcloud/search/project.rb +197 -0
  43. data/lib/gcloud/search/result.rb +169 -0
  44. data/lib/gcloud/search/result/list.rb +95 -0
  45. data/lib/gcloud/storage.rb +4 -6
  46. data/lib/gcloud/storage/bucket.rb +55 -43
  47. data/lib/gcloud/storage/bucket/cors.rb +5 -7
  48. data/lib/gcloud/storage/file.rb +35 -30
  49. data/lib/gcloud/storage/file/acl.rb +12 -16
  50. data/lib/gcloud/storage/project.rb +56 -22
  51. data/lib/gcloud/version.rb +1 -1
  52. metadata +20 -3
@@ -79,15 +79,13 @@ module Gcloud
79
79
  # The field name. The name must contain only letters (a-z, A-Z),
80
80
  # numbers (0-9), or underscores (_), and must start with a letter or
81
81
  # underscore. The maximum length is 128 characters. (+String+)
82
- # +options+::
83
- # An optional Hash for controlling additional behavior. (+Hash+)
84
- # <code>options[:description]</code>::
82
+ # +description+::
85
83
  # A description of the field. (+String+)
86
- # <code>options[:mode]</code>::
84
+ # +mode+::
87
85
  # The field's mode. The possible values are +:nullable+, +:required+,
88
86
  # and +:repeated+. The default value is +:nullable+. (+Symbol+)
89
- def string name, options = {}
90
- add_field name, :string, nil, options
87
+ def string name, description: nil, mode: nil
88
+ add_field name, :string, nil, description: description, mode: mode
91
89
  end
92
90
 
93
91
  ##
@@ -99,15 +97,13 @@ module Gcloud
99
97
  # The field name. The name must contain only letters (a-z, A-Z),
100
98
  # numbers (0-9), or underscores (_), and must start with a letter or
101
99
  # underscore. The maximum length is 128 characters. (+String+)
102
- # +options+::
103
- # An optional Hash for controlling additional behavior. (+Hash+)
104
- # <code>options[:description]</code>::
100
+ # +description+::
105
101
  # A description of the field. (+String+)
106
- # <code>options[:mode]</code>::
102
+ # +mode+::
107
103
  # The field's mode. The possible values are +:nullable+, +:required+,
108
104
  # and +:repeated+. The default value is +:nullable+. (+Symbol+)
109
- def integer name, options = {}
110
- add_field name, :integer, nil, options
105
+ def integer name, description: nil, mode: nil
106
+ add_field name, :integer, nil, description: description, mode: mode
111
107
  end
112
108
 
113
109
  ##
@@ -119,15 +115,13 @@ module Gcloud
119
115
  # The field name. The name must contain only letters (a-z, A-Z),
120
116
  # numbers (0-9), or underscores (_), and must start with a letter or
121
117
  # underscore. The maximum length is 128 characters. (+String+)
122
- # +options+::
123
- # An optional Hash for controlling additional behavior. (+Hash+)
124
- # <code>options[:description]</code>::
118
+ # +description+::
125
119
  # A description of the field. (+String+)
126
- # <code>options[:mode]</code>::
120
+ # +mode+::
127
121
  # The field's mode. The possible values are +:nullable+, +:required+,
128
122
  # and +:repeated+. The default value is +:nullable+. (+Symbol+)
129
- def float name, options = {}
130
- add_field name, :float, nil, options
123
+ def float name, description: nil, mode: nil
124
+ add_field name, :float, nil, description: description, mode: mode
131
125
  end
132
126
 
133
127
  ##
@@ -139,15 +133,13 @@ module Gcloud
139
133
  # The field name. The name must contain only letters (a-z, A-Z),
140
134
  # numbers (0-9), or underscores (_), and must start with a letter or
141
135
  # underscore. The maximum length is 128 characters. (+String+)
142
- # +options+::
143
- # An optional Hash for controlling additional behavior. (+Hash+)
144
- # <code>options[:description]</code>::
136
+ # +description+::
145
137
  # A description of the field. (+String+)
146
- # <code>options[:mode]</code>::
138
+ # +mode+::
147
139
  # The field's mode. The possible values are +:nullable+, +:required+,
148
140
  # and +:repeated+. The default value is +:nullable+. (+Symbol+)
149
- def boolean name, options = {}
150
- add_field name, :boolean, nil, options
141
+ def boolean name, description: nil, mode: nil
142
+ add_field name, :boolean, nil, description: description, mode: mode
151
143
  end
152
144
 
153
145
  ##
@@ -159,15 +151,13 @@ module Gcloud
159
151
  # The field name. The name must contain only letters (a-z, A-Z),
160
152
  # numbers (0-9), or underscores (_), and must start with a letter or
161
153
  # underscore. The maximum length is 128 characters. (+String+)
162
- # +options+::
163
- # An optional Hash for controlling additional behavior. (+Hash+)
164
- # <code>options[:description]</code>::
154
+ # +description+::
165
155
  # A description of the field. (+String+)
166
- # <code>options[:mode]</code>::
156
+ # +mode+::
167
157
  # The field's mode. The possible values are +:nullable+, +:required+,
168
158
  # and +:repeated+. The default value is +:nullable+. (+Symbol+)
169
- def timestamp name, options = {}
170
- add_field name, :timestamp, nil, options
159
+ def timestamp name, description: nil, mode: nil
160
+ add_field name, :timestamp, nil, description: description, mode: mode
171
161
  end
172
162
 
173
163
  ##
@@ -182,11 +172,9 @@ module Gcloud
182
172
  # The field name. The name must contain only letters (a-z, A-Z),
183
173
  # numbers (0-9), or underscores (_), and must start with a letter or
184
174
  # underscore. The maximum length is 128 characters. (+String+)
185
- # +options+::
186
- # An optional Hash for controlling additional behavior. (+Hash+)
187
- # <code>options[:description]</code>::
175
+ # +description+::
188
176
  # A description of the field. (+String+)
189
- # <code>options[:mode]</code>::
177
+ # +mode+::
190
178
  # The field's mode. The possible values are +:nullable+, +:required+,
191
179
  # and +:repeated+. The default value is +:nullable+. (+Symbol+)
192
180
  #
@@ -207,12 +195,13 @@ module Gcloud
207
195
  # end
208
196
  # end
209
197
  #
210
- def record name, options = {}
198
+ def record name, description: nil, mode: nil
211
199
  fail ArgumentError, "nested RECORD type is not permitted" if @nested
212
200
  fail ArgumentError, "a block is required" unless block_given?
213
201
  nested_schema = self.class.new nil, true
214
202
  yield nested_schema
215
- add_field name, :record, nested_schema.fields, options
203
+ add_field name, :record, nested_schema.fields,
204
+ description: description, mode: mode
216
205
  end
217
206
 
218
207
  protected
@@ -234,16 +223,17 @@ module Gcloud
234
223
  upcase_mode
235
224
  end
236
225
 
237
- def add_field name, type, nested_fields, options
226
+ def add_field name, type, nested_fields, description: nil,
227
+ mode: :nullable
238
228
  # Remove any existing field of this name
239
229
  @fields.reject! { |h| h["name"] == name }
240
230
  field = {
241
231
  "name" => name,
242
232
  "type" => upcase_type(type)
243
233
  }
244
- field["mode"] = upcase_mode(options[:mode]) if options[:mode]
245
- field["description"] =options[:description] if options[:description]
246
- field["fields"] = nested_fields if nested_fields
234
+ field["fields"] = nested_fields if nested_fields
235
+ field["description"] = description if description
236
+ field["mode"] = upcase_mode(mode) if mode
247
237
  @fields << field
248
238
  end
249
239
  end
@@ -286,33 +286,31 @@ module Gcloud
286
286
  #
287
287
  # === Parameters
288
288
  #
289
- # +options+::
290
- # An optional Hash for controlling additional behavior. (+Hash+)
291
- # <code>options[:max]</code>::
289
+ # +max+::
292
290
  # The maximum number of rows of data to return per page of results.
293
291
  # Setting this flag to a small value such as 1000 and then paging
294
292
  # through results might improve reliability when the query result set is
295
293
  # large. In addition to this limit, responses are also limited to 10 MB.
296
294
  # By default, there is no maximum row count, and only the byte limit
297
295
  # applies. (+Integer+)
298
- # <code>options[:timeout]</code>::
296
+ # +timeout+::
299
297
  # How long to wait for the query to complete, in milliseconds, before
300
298
  # the request times out and returns. Note that this is only a timeout
301
299
  # for the request, not the query. If the query takes longer to run than
302
300
  # the timeout value, the call returns without any results and with
303
301
  # QueryData#complete? set to false. The default value is 10000
304
302
  # milliseconds (10 seconds). (+Integer+)
305
- # <code>options[:dryrun]</code>::
306
- # If set to +true+, BigQuery doesn't run the job. Instead, if the query
307
- # is valid, BigQuery returns statistics about the job such as how many
308
- # bytes would be processed. If the query is invalid, an error returns.
309
- # The default value is +false+. (+Boolean+)
310
- # <code>options[:cache]</code>::
303
+ # +cache+::
311
304
  # Whether to look for the result in the query cache. The query cache is
312
305
  # a best-effort cache that will be flushed whenever tables in the query
313
306
  # are modified. The default value is true. For more information, see
314
307
  # {query caching}[https://developers.google.com/bigquery/querying-data].
315
308
  # (+Boolean+)
309
+ # +dryrun+::
310
+ # If set to +true+, BigQuery doesn't run the job. Instead, if the query
311
+ # is valid, BigQuery returns statistics about the job such as how many
312
+ # bytes would be processed. If the query is invalid, an error returns.
313
+ # The default value is +false+. (+Boolean+)
316
314
  #
317
315
  # === Returns
318
316
  #
@@ -335,9 +333,10 @@ module Gcloud
335
333
  #
336
334
  # :category: Data
337
335
  #
338
- def data options = {}
336
+ def data max: nil, timeout: nil, cache: nil, dryrun: nil
339
337
  sql = "SELECT * FROM #{@gapi['id']}"
340
338
  ensure_connection!
339
+ options = { max: max, timeout: timeout, cache: cache, dryrun: dryrun }
341
340
  resp = connection.query sql, options
342
341
  if resp.success?
343
342
  QueryData.from_gapi resp.data, connection
@@ -42,15 +42,19 @@ module Gcloud
42
42
  :token_credential_uri, :audience,
43
43
  :scope, :issuer, :signing_key
44
44
 
45
- def initialize keyfile, options = {}
45
+ def initialize keyfile, scope: nil
46
46
  verify_keyfile_provided! keyfile
47
47
  if keyfile.is_a? Signet::OAuth2::Client
48
48
  @client = keyfile
49
49
  elsif keyfile.is_a? Hash
50
- @client = init_client keyfile, options
50
+ hash = stringify_hash_keys keyfile
51
+ hash["scope"] ||= scope
52
+ @client = init_client hash
51
53
  else
52
54
  verify_keyfile_exists! keyfile
53
- @client = init_client JSON.parse(::File.read(keyfile)), options
55
+ json = JSON.parse ::File.read(keyfile)
56
+ json["scope"] ||= scope
57
+ @client = init_client json
54
58
  end
55
59
  @client.fetch_access_token!
56
60
  end
@@ -61,25 +65,25 @@ module Gcloud
61
65
  ##
62
66
  # Returns the default credentials.
63
67
  #
64
- def self.default options = {}
68
+ def self.default scope: nil
65
69
  env = ->(v) { ENV[v] }
66
70
  json = ->(v) { JSON.parse ENV[v] rescue nil unless ENV[v].nil? }
67
71
  path = ->(p) { ::File.file? p }
68
72
 
69
73
  # First try to find keyfile file from environment variables.
70
74
  self::PATH_ENV_VARS.map(&env).reject(&:nil?).select(&path).each do |file|
71
- return new file, options
75
+ return new file, scope: scope
72
76
  end
73
77
  # Second try to find keyfile json from environment variables.
74
78
  self::JSON_ENV_VARS.map(&json).reject(&:nil?).each do |hash|
75
- return new hash, options
79
+ return new hash, scope: scope
76
80
  end
77
81
  # Third try to find keyfile file from known file paths.
78
82
  self::DEFAULT_PATHS.select(&path).each do |file|
79
- return new file, options
83
+ return new file, scope: scope
80
84
  end
81
85
  # Finally get instantiated client from Google::Auth.
82
- scope = options[:scope] || options["scope"] || self::SCOPE
86
+ scope ||= self::SCOPE
83
87
  client = Google::Auth.get_application_default scope
84
88
  new client
85
89
  end
@@ -103,8 +107,8 @@ module Gcloud
103
107
 
104
108
  ##
105
109
  # Initializes the Signet client.
106
- def init_client keyfile, options
107
- client_opts = client_options keyfile, options
110
+ def init_client keyfile
111
+ client_opts = client_options keyfile
108
112
  Signet::OAuth2::Client.new client_opts
109
113
  end
110
114
 
@@ -114,21 +118,11 @@ module Gcloud
114
118
  Hash[hash.map { |(k, v)| [k.to_s, v] }]
115
119
  end
116
120
 
117
- ##
118
- # The default options using the values in the constants.
119
- def default_options
120
- { "token_credential_uri" => self.class::TOKEN_CREDENTIAL_URI,
121
- "audience" => self.class::AUDIENCE,
122
- "scope" => self.class::SCOPE }
123
- end
124
-
125
- def client_options keyfile, options
126
- # Turn keys to strings
127
- options = stringify_hash_keys options
128
- # Constructor options override default options
129
- options = default_options.merge options
130
- # Keyfile options override everything
131
- options = options.merge keyfile
121
+ def client_options options
122
+ # Keyfile options have higher priority over constructor defaults
123
+ options["token_credential_uri"] ||= self.class::TOKEN_CREDENTIAL_URI
124
+ options["audience"] ||= self.class::AUDIENCE
125
+ options["scope"] ||= self.class::SCOPE
132
126
 
133
127
  # client options for initializing signet client
134
128
  { token_credential_uri: options["token_credential_uri"],
@@ -33,9 +33,7 @@ module Gcloud
33
33
  # +keyfile+::
34
34
  # Keyfile downloaded from Google Cloud. If file path the file must be
35
35
  # readable. (+String+ or +Hash+)
36
- # +options+::
37
- # An optional Hash for controlling additional behavior. (+Hash+)
38
- # <code>options[:scope]</code>::
36
+ # +scope+::
39
37
  # The OAuth 2.0 scopes controlling the set of resources and operations that
40
38
  # the connection can access. See {Using OAuth 2.0 to Access Google
41
39
  # APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
@@ -64,12 +62,12 @@ module Gcloud
64
62
  #
65
63
  # dataset.save entity
66
64
  #
67
- def self.datastore project = nil, keyfile = nil, options = {}
65
+ def self.datastore project = nil, keyfile = nil, scope: nil
68
66
  project ||= Gcloud::Datastore::Dataset.default_project
69
67
  if keyfile.nil?
70
- credentials = Gcloud::Datastore::Credentials.default options
68
+ credentials = Gcloud::Datastore::Credentials.default scope: scope
71
69
  else
72
- credentials = Gcloud::Datastore::Credentials.new keyfile, options
70
+ credentials = Gcloud::Datastore::Credentials.new keyfile, scope: scope
73
71
  end
74
72
  Gcloud::Datastore::Dataset.new project, credentials
75
73
  end
@@ -241,9 +241,7 @@ module Gcloud
241
241
  #
242
242
  # +query+::
243
243
  # The Query object with the search criteria. (+Query+)
244
- # +options+::
245
- # An optional Hash for controlling additional behavior. (+Hash+)
246
- # <code>options[:namespace]</code>::
244
+ # +namespace+::
247
245
  # The namespace the query is to run within. (+String+)
248
246
  #
249
247
  # === Returns
@@ -263,8 +261,8 @@ module Gcloud
263
261
  # where("completed", "=", true)
264
262
  # tasks = dataset.run query, namespace: "ns~todo-project"
265
263
  #
266
- def run query, options = {}
267
- partition = optional_partition_id options[:namespace]
264
+ def run query, namespace: nil
265
+ partition = optional_partition_id namespace
268
266
  response = connection.run_query query.to_proto, partition
269
267
  entities = to_gcloud_entities response.batch.entity_result
270
268
  cursor = Proto.encode_cursor response.batch.end_cursor
data/lib/gcloud/dns.rb CHANGED
@@ -30,9 +30,7 @@ module Gcloud
30
30
  # +keyfile+::
31
31
  # Keyfile downloaded from Google Cloud. If file path the file must be
32
32
  # readable. (+String+ or +Hash+)
33
- # +options+::
34
- # An optional Hash for controlling additional behavior. (+Hash+)
35
- # <code>options[:scope]</code>::
33
+ # +scope+::
36
34
  # The OAuth 2.0 scopes controlling the set of resources and operations that
37
35
  # the connection can access. See {Using OAuth 2.0 to Access Google
38
36
  # APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
@@ -55,12 +53,12 @@ module Gcloud
55
53
  #
56
54
  # zone = dns.zone "example-com"
57
55
  #
58
- def self.dns project = nil, keyfile = nil, options = {}
56
+ def self.dns project = nil, keyfile = nil, scope: nil
59
57
  project ||= Gcloud::Dns::Project.default_project
60
58
  if keyfile.nil?
61
- credentials = Gcloud::Dns::Credentials.default options
59
+ credentials = Gcloud::Dns::Credentials.default scope: scope
62
60
  else
63
- credentials = Gcloud::Dns::Credentials.new keyfile, options
61
+ credentials = Gcloud::Dns::Credentials.new keyfile, scope: scope
64
62
  end
65
63
  Gcloud::Dns::Project.new project, credentials
66
64
  end
@@ -52,10 +52,10 @@ module Gcloud
52
52
  )
53
53
  end
54
54
 
55
- def list_zones options = {}
55
+ def list_zones token: nil, max: nil
56
56
  params = { project: @project,
57
- pageToken: options.delete(:token),
58
- maxResults: options.delete(:max)
57
+ pageToken: token,
58
+ maxResults: max
59
59
  }.delete_if { |_, v| v.nil? }
60
60
 
61
61
  @client.execute(
@@ -64,11 +64,12 @@ module Gcloud
64
64
  )
65
65
  end
66
66
 
67
- def create_zone zone_name, zone_dns, options = {}
67
+ def create_zone zone_name, zone_dns, description: nil,
68
+ name_server_set: nil
68
69
  body = { kind: "dns#managedZone",
69
70
  name: zone_name, dnsName: zone_dns,
70
- description: (options[:description] || ""),
71
- nameServerSet: options[:name_server_set]
71
+ description: (description || ""),
72
+ nameServerSet: name_server_set
72
73
  }.delete_if { |_, v| v.nil? }
73
74
 
74
75
  @client.execute(
@@ -93,12 +94,12 @@ module Gcloud
93
94
  )
94
95
  end
95
96
 
96
- def list_changes zone_id, options = {}
97
+ def list_changes zone_id, token: nil, max: nil, order: nil, sort: nil
97
98
  params = { project: @project, managedZone: zone_id,
98
- pageToken: options.delete(:token),
99
- maxResults: options.delete(:max),
100
- sortBy: options.delete(:sort),
101
- sortOrder: options.delete(:order)
99
+ pageToken: token,
100
+ maxResults: max,
101
+ sortBy: sort,
102
+ sortOrder: order
102
103
  }.delete_if { |_, v| v.nil? }
103
104
 
104
105
  @client.execute(
@@ -119,12 +120,12 @@ module Gcloud
119
120
  )
120
121
  end
121
122
 
122
- def list_records zone_id, options = {}
123
+ def list_records zone_id, name = nil, type = nil, token: nil, max: nil
123
124
  params = { project: @project, managedZone: zone_id,
124
- pageToken: options.delete(:token),
125
- maxResults: options.delete(:max),
126
- name: options.delete(:name),
127
- type: options.delete(:type)
125
+ pageToken: token,
126
+ maxResults: max,
127
+ name: name,
128
+ type: type
128
129
  }.delete_if { |_, v| v.nil? }
129
130
 
130
131
  @client.execute(
@@ -61,30 +61,24 @@ module Gcloud
61
61
  #
62
62
  # === Parameters
63
63
  #
64
- # +options+::
65
- # An optional Hash for controlling additional behavior. (+Hash+)
66
- # <code>options[:only]</code>::
64
+ # +only+::
67
65
  # Include only records of this type or types. (+String+ or +Array+)
68
- # <code>options[:except]</code>::
66
+ # +except+::
69
67
  # Exclude records of this type or types. (+String+ or +Array+)
70
68
  #
71
69
  # === Returns
72
70
  #
73
71
  # An array of unsaved Record instances.
74
72
  #
75
- def records options = {}
76
- filtered_records options[:only], options[:except]
77
- end
78
-
79
- protected
80
-
81
- def filtered_records only, except
73
+ def records only: nil, except: nil
82
74
  ret = @records
83
75
  ret = ret.select { |r| Array(only).include? r.type } if only
84
76
  ret = ret.reject { |r| Array(except).include? r.type } if except
85
77
  ret
86
78
  end
87
79
 
80
+ protected
81
+
88
82
  ##
89
83
  # The zonefile library returns a two-element array in which the first
90
84
  # element is a symbol type (:a, :mx, and so on), and the second element