gcloud 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +8 -8
  2. data/AUTHENTICATION.md +3 -3
  3. data/CHANGELOG.md +12 -0
  4. data/OVERVIEW.md +30 -0
  5. data/lib/gcloud.rb +126 -9
  6. data/lib/gcloud/bigquery.rb +399 -0
  7. data/lib/gcloud/bigquery/connection.rb +592 -0
  8. data/lib/gcloud/bigquery/copy_job.rb +98 -0
  9. data/lib/gcloud/bigquery/credentials.rb +29 -0
  10. data/lib/gcloud/bigquery/data.rb +134 -0
  11. data/lib/gcloud/bigquery/dataset.rb +662 -0
  12. data/lib/gcloud/bigquery/dataset/list.rb +51 -0
  13. data/lib/gcloud/bigquery/errors.rb +62 -0
  14. data/lib/gcloud/bigquery/extract_job.rb +117 -0
  15. data/lib/gcloud/bigquery/insert_response.rb +80 -0
  16. data/lib/gcloud/bigquery/job.rb +283 -0
  17. data/lib/gcloud/bigquery/job/list.rb +55 -0
  18. data/lib/gcloud/bigquery/load_job.rb +199 -0
  19. data/lib/gcloud/bigquery/project.rb +512 -0
  20. data/lib/gcloud/bigquery/query_data.rb +135 -0
  21. data/lib/gcloud/bigquery/query_job.rb +151 -0
  22. data/lib/gcloud/bigquery/table.rb +827 -0
  23. data/lib/gcloud/bigquery/table/list.rb +55 -0
  24. data/lib/gcloud/bigquery/view.rb +419 -0
  25. data/lib/gcloud/credentials.rb +3 -3
  26. data/lib/gcloud/datastore.rb +15 -3
  27. data/lib/gcloud/datastore/credentials.rb +3 -2
  28. data/lib/gcloud/datastore/dataset.rb +5 -1
  29. data/lib/gcloud/datastore/transaction.rb +1 -1
  30. data/lib/gcloud/pubsub.rb +14 -3
  31. data/lib/gcloud/pubsub/credentials.rb +4 -4
  32. data/lib/gcloud/pubsub/project.rb +5 -1
  33. data/lib/gcloud/pubsub/topic.rb +5 -0
  34. data/lib/gcloud/storage.rb +14 -24
  35. data/lib/gcloud/storage/bucket.rb +10 -4
  36. data/lib/gcloud/storage/credentials.rb +3 -2
  37. data/lib/gcloud/storage/file.rb +8 -1
  38. data/lib/gcloud/storage/project.rb +5 -1
  39. data/lib/gcloud/upload.rb +54 -0
  40. data/lib/gcloud/version.rb +1 -1
  41. metadata +78 -2
@@ -29,8 +29,8 @@ module Gcloud
29
29
  TOKEN_CREDENTIAL_URI = "https://accounts.google.com/o/oauth2/token"
30
30
  AUDIENCE = "https://accounts.google.com/o/oauth2/token"
31
31
  SCOPE = []
32
- PATH_ENV_VARS = ["GOOGLE_CLOUD_KEYFILE"]
33
- JSON_ENV_VARS = ["GOOGLE_CLOUD_KEYFILE_JSON"]
32
+ PATH_ENV_VARS = %w(GCLOUD_KEYFILE GOOGLE_CLOUD_KEYFILE)
33
+ JSON_ENV_VARS = %w(GCLOUD_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON)
34
34
  DEFAULT_PATHS = ["~/.config/gcloud/application_default_credentials.json"]
35
35
 
36
36
  attr_accessor :client
@@ -133,7 +133,7 @@ module Gcloud
133
133
  # client options for initializing signet client
134
134
  { token_credential_uri: options["token_credential_uri"],
135
135
  audience: options["audience"],
136
- scope: options["scope"],
136
+ scope: Array(options["scope"]),
137
137
  issuer: options["client_email"],
138
138
  signing_key: OpenSSL::PKey::RSA.new(options["private_key"]) }
139
139
  end
@@ -33,6 +33,18 @@ 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>::
39
+ # The OAuth 2.0 scopes controlling the set of resources and operations that
40
+ # the connection can access. See {Using OAuth 2.0 to Access Google
41
+ # APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
42
+ # or +Array+)
43
+ #
44
+ # The default scopes are:
45
+ #
46
+ # * +https://www.googleapis.com/auth/datastore+
47
+ # * +https://www.googleapis.com/auth/userinfo.email+
36
48
  #
37
49
  # === Returns
38
50
  #
@@ -52,12 +64,12 @@ module Gcloud
52
64
  #
53
65
  # dataset.save entity
54
66
  #
55
- def self.datastore project = nil, keyfile = nil
67
+ def self.datastore project = nil, keyfile = nil, options = {}
56
68
  project ||= Gcloud::Datastore::Dataset.default_project
57
69
  if keyfile.nil?
58
- credentials = Gcloud::Datastore::Credentials.default
70
+ credentials = Gcloud::Datastore::Credentials.default options
59
71
  else
60
- credentials = Gcloud::Datastore::Credentials.new keyfile
72
+ credentials = Gcloud::Datastore::Credentials.new keyfile, options
61
73
  end
62
74
  Gcloud::Datastore::Dataset.new project, credentials
63
75
  end
@@ -26,8 +26,9 @@ module Gcloud
26
26
  class Credentials < Gcloud::Credentials #:nodoc:
27
27
  SCOPE = ["https://www.googleapis.com/auth/datastore",
28
28
  "https://www.googleapis.com/auth/userinfo.email"]
29
- PATH_ENV_VARS = %w(DATASTORE_KEYFILE GOOGLE_CLOUD_KEYFILE)
30
- JSON_ENV_VARS = %w(DATASTORE_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON)
29
+ PATH_ENV_VARS = %w(DATASTORE_KEYFILE GCLOUD_KEYFILE GOOGLE_CLOUD_KEYFILE)
30
+ JSON_ENV_VARS = %w(DATASTORE_KEYFILE_JSON GCLOUD_KEYFILE_JSON
31
+ GOOGLE_CLOUD_KEYFILE_JSON)
31
32
 
32
33
  ##
33
34
  # Sign OAuth 2.0 API calls.
@@ -52,6 +52,8 @@ module Gcloud
52
52
  #
53
53
  # See Gcloud#datastore
54
54
  def initialize project, credentials #:nodoc:
55
+ project = project.to_s # Always cast to a string
56
+ fail ArgumentError, "project is missing" if project.empty?
55
57
  @connection = Connection.new project, credentials
56
58
  end
57
59
 
@@ -75,7 +77,9 @@ module Gcloud
75
77
  ##
76
78
  # Default project.
77
79
  def self.default_project #:nodoc:
78
- ENV["DATASTORE_PROJECT"] || ENV["GOOGLE_CLOUD_PROJECT"]
80
+ ENV["DATASTORE_PROJECT"] ||
81
+ ENV["GCLOUD_PROJECT"] ||
82
+ ENV["GOOGLE_CLOUD_PROJECT"]
79
83
  end
80
84
 
81
85
  ##
@@ -102,7 +102,7 @@ module Gcloud
102
102
  # Transaction#start must be called afterwards.
103
103
  def reset!
104
104
  @shared_mutation = nil
105
- @id = nil
105
+ @id = nil
106
106
  @_auto_id_entities = []
107
107
  end
108
108
 
@@ -31,6 +31,17 @@ module Gcloud
31
31
  # +keyfile+::
32
32
  # Keyfile downloaded from Google Cloud. If file path the file must be
33
33
  # readable. (+String+ or +Hash+)
34
+ # +options+::
35
+ # An optional Hash for controlling additional behavior. (+Hash+)
36
+ # <code>options[:scope]</code>::
37
+ # The OAuth 2.0 scopes controlling the set of resources and operations that
38
+ # the connection can access. See {Using OAuth 2.0 to Access Google
39
+ # APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
40
+ # or +Array+)
41
+ #
42
+ # The default scope is:
43
+ #
44
+ # * +https://www.googleapis.com/auth/pubsub+
34
45
  #
35
46
  # === Returns
36
47
  #
@@ -45,12 +56,12 @@ module Gcloud
45
56
  # topic = pubsub.topic "my-topic"
46
57
  # topic.publish "task completed"
47
58
  #
48
- def self.pubsub project = nil, keyfile = nil
59
+ def self.pubsub project = nil, keyfile = nil, options = {}
49
60
  project ||= Gcloud::Pubsub::Project.default_project
50
61
  if keyfile.nil?
51
- credentials = Gcloud::Pubsub::Credentials.default
62
+ credentials = Gcloud::Pubsub::Credentials.default options
52
63
  else
53
- credentials = Gcloud::Pubsub::Credentials.new keyfile
64
+ credentials = Gcloud::Pubsub::Credentials.new keyfile, options
54
65
  end
55
66
  Gcloud::Pubsub::Project.new project, credentials
56
67
  end
@@ -20,10 +20,10 @@ module Gcloud
20
20
  ##
21
21
  # Represents the OAuth 2.0 signing logic for Pub/Sub.
22
22
  class Credentials < Gcloud::Credentials #:nodoc:
23
- SCOPE = ["https://www.googleapis.com/auth/pubsub",
24
- "https://www.googleapis.com/auth/cloud-platform"]
25
- PATH_ENV_VARS = %w(PUBSUB_KEYFILE GOOGLE_CLOUD_KEYFILE)
26
- JSON_ENV_VARS = %w(PUBSUB_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON)
23
+ SCOPE = ["https://www.googleapis.com/auth/pubsub"]
24
+ PATH_ENV_VARS = %w(PUBSUB_KEYFILE GCLOUD_KEYFILE GOOGLE_CLOUD_KEYFILE)
25
+ JSON_ENV_VARS = %w(PUBSUB_KEYFILE_JSON GCLOUD_KEYFILE_JSON
26
+ GOOGLE_CLOUD_KEYFILE_JSON)
27
27
  end
28
28
  end
29
29
  end
@@ -47,6 +47,8 @@ module Gcloud
47
47
  ##
48
48
  # Creates a new Connection instance.
49
49
  def initialize project, credentials #:nodoc:
50
+ project = project.to_s # Always cast to a string
51
+ fail ArgumentError, "project is missing" if project.empty?
50
52
  @connection = Connection.new project, credentials
51
53
  end
52
54
 
@@ -69,7 +71,9 @@ module Gcloud
69
71
  ##
70
72
  # Default project.
71
73
  def self.default_project #:nodoc:
72
- ENV["PUBSUB_PROJECT"] || ENV["GOOGLE_CLOUD_PROJECT"]
74
+ ENV["PUBSUB_PROJECT"] ||
75
+ ENV["GCLOUD_PROJECT"] ||
76
+ ENV["GOOGLE_CLOUD_PROJECT"]
73
77
  end
74
78
 
75
79
  ##
@@ -512,6 +512,9 @@ module Gcloud
512
512
  @gapi.nil?
513
513
  end
514
514
 
515
+ # rubocop:disable Style/TrivialAccessors
516
+ # Disabled rubocop because you can't use "?" in an attr.
517
+
515
518
  ##
516
519
  # Determines whether the lazy topic object should create a topic on the
517
520
  # Pub/Sub service.
@@ -530,6 +533,8 @@ module Gcloud
530
533
  @autocreate
531
534
  end
532
535
 
536
+ # rubocop:enable Style/TrivialAccessors
537
+
533
538
  ##
534
539
  # New Topic from a Google API Client object.
535
540
  def self.from_gapi gapi, conn #:nodoc:
@@ -31,6 +31,17 @@ module Gcloud
31
31
  # +keyfile+::
32
32
  # Keyfile downloaded from Google Cloud. If file path the file must be
33
33
  # readable. (+String+ or +Hash+)
34
+ # +options+::
35
+ # An optional Hash for controlling additional behavior. (+Hash+)
36
+ # <code>options[:scope]</code>::
37
+ # The OAuth 2.0 scopes controlling the set of resources and operations that
38
+ # the connection can access. See {Using OAuth 2.0 to Access Google
39
+ # APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
40
+ # or +Array+)
41
+ #
42
+ # The default scope is:
43
+ #
44
+ # * +https://www.googleapis.com/auth/devstorage.full_control+
34
45
  #
35
46
  # === Returns
36
47
  #
@@ -46,12 +57,12 @@ module Gcloud
46
57
  # bucket = storage.bucket "my-bucket"
47
58
  # file = bucket.file "path/to/my-file.ext"
48
59
  #
49
- def self.storage project = nil, keyfile = nil
60
+ def self.storage project = nil, keyfile = nil, options = {}
50
61
  project ||= Gcloud::Storage::Project.default_project
51
62
  if keyfile.nil?
52
- credentials = Gcloud::Storage::Credentials.default
63
+ credentials = Gcloud::Storage::Credentials.default options
53
64
  else
54
- credentials = Gcloud::Storage::Credentials.new keyfile
65
+ credentials = Gcloud::Storage::Credentials.new keyfile, options
55
66
  end
56
67
  Gcloud::Storage::Project.new project, credentials
57
68
  end
@@ -338,26 +349,5 @@ module Gcloud
338
349
  # file.acl.public!
339
350
  #
340
351
  module Storage
341
- ##
342
- # Retrieve resumable threshold.
343
- # If uploads are larger in size than this value then
344
- # resumable uploads are used.
345
- #
346
- # The default value is 5 MiB (5,000,000 bytes).
347
- def self.resumable_threshold
348
- @@resumable_threshold
349
- end
350
-
351
- ##
352
- # Sets a new resumable threshold value.
353
- def self.resumable_threshold= new_resumable_threshold
354
- # rubocop:disable Style/ClassVars
355
- # Disabled rubocop because this is the best option.
356
- @@resumable_threshold = new_resumable_threshold.to_i
357
- # rubocop:enable Style/ClassVars
358
- end
359
-
360
- # Set the default threshold to 5 MiB.
361
- self.resumable_threshold = 5_000_000
362
352
  end
363
353
  end
@@ -16,6 +16,7 @@
16
16
  require "gcloud/storage/bucket/acl"
17
17
  require "gcloud/storage/bucket/list"
18
18
  require "gcloud/storage/file"
19
+ require "gcloud/upload"
19
20
 
20
21
  module Gcloud
21
22
  module Storage
@@ -325,9 +326,7 @@ module Gcloud
325
326
  #
326
327
  def create_file file, path = nil, options = {}
327
328
  ensure_connection!
328
- # TODO: Raise if file doesn't exist
329
- # ensure_file_exists!
330
- fail unless ::File.file? file
329
+ ensure_file_exists! file
331
330
 
332
331
  options[:acl] = File::Acl.predefined_rule_for options[:acl]
333
332
 
@@ -465,10 +464,17 @@ module Gcloud
465
464
  fail "Must have active connection" unless connection
466
465
  end
467
466
 
467
+ ##
468
+ # Raise an error if the file is not found.
469
+ def ensure_file_exists! file
470
+ return if ::File.file? file
471
+ fail ArgumentError, "cannot find file #{file}"
472
+ end
473
+
468
474
  ##
469
475
  # Determines if a resumable upload should be used.
470
476
  def resumable_upload? file #:nodoc:
471
- ::File.size?(file).to_i > Storage.resumable_threshold
477
+ ::File.size?(file).to_i > Upload.resumable_threshold
472
478
  end
473
479
 
474
480
  def upload_multipart file, path, options = {}
@@ -21,8 +21,9 @@ module Gcloud
21
21
  # Represents the OAuth 2.0 signing logic for Storage.
22
22
  class Credentials < Gcloud::Credentials #:nodoc:
23
23
  SCOPE = ["https://www.googleapis.com/auth/devstorage.full_control"]
24
- PATH_ENV_VARS = %w(STORAGE_KEYFILE GOOGLE_CLOUD_KEYFILE)
25
- JSON_ENV_VARS = %w(STORAGE_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON)
24
+ PATH_ENV_VARS = %w(STORAGE_KEYFILE GCLOUD_KEYFILE GOOGLE_CLOUD_KEYFILE)
25
+ JSON_ENV_VARS = %w(STORAGE_KEYFILE_JSON GCLOUD_KEYFILE_JSON
26
+ GOOGLE_CLOUD_KEYFILE_JSON)
26
27
  end
27
28
  end
28
29
  end
@@ -463,6 +463,13 @@ module Gcloud
463
463
  @acl ||= File::Acl.new self
464
464
  end
465
465
 
466
+ ##
467
+ # URI of the location and file name in the format of
468
+ # <code>gs://my-bucket/file-name.json</code>.
469
+ def to_gs_url #:nodoc:
470
+ "gs://#{bucket}/#{name}"
471
+ end
472
+
466
473
  ##
467
474
  # New File from a Google API Client object.
468
475
  def self.from_gapi gapi, conn #:nodoc:
@@ -561,7 +568,7 @@ module Gcloud
561
568
  end
562
569
 
563
570
  def generate_signed_url issuer, signed_string, expires
564
- signature = Base64.encode64(signed_string).gsub("\n", "")
571
+ signature = Base64.encode64(signed_string).delete("\n")
565
572
  "#{ext_url}?GoogleAccessId=#{CGI.escape issuer}" \
566
573
  "&Expires=#{expires}" \
567
574
  "&Signature=#{CGI.escape signature}"
@@ -52,6 +52,8 @@ module Gcloud
52
52
  #
53
53
  # See Gcloud#storage
54
54
  def initialize project, credentials #:nodoc:
55
+ project = project.to_s # Always cast to a string
56
+ fail ArgumentError, "project is missing" if project.empty?
55
57
  @connection = Connection.new project, credentials
56
58
  end
57
59
 
@@ -75,7 +77,9 @@ module Gcloud
75
77
  ##
76
78
  # Default project.
77
79
  def self.default_project #:nodoc:
78
- ENV["STORAGE_PROJECT"] || ENV["GOOGLE_CLOUD_PROJECT"]
80
+ ENV["STORAGE_PROJECT"] ||
81
+ ENV["GCLOUD_PROJECT"] ||
82
+ ENV["GOOGLE_CLOUD_PROJECT"]
79
83
  end
80
84
 
81
85
  ##
@@ -0,0 +1,54 @@
1
+ #--
2
+ # Copyright 2014 Google Inc. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require "gcloud"
17
+
18
+ #--
19
+ # Google Cloud Upload
20
+ module Gcloud
21
+ ##
22
+ # = Upload Settings
23
+ #
24
+ # Upload allows users to configure how files are uploaded to the Google Cloud
25
+ # Service APIs.
26
+ #
27
+ # require "gcloud/upload"
28
+ #
29
+ # # Set the default threshold to 10 MiB.
30
+ # Gcloud::Upload.resumable_threshold = 10_000_000
31
+ module Upload
32
+ ##
33
+ # Retrieve resumable threshold.
34
+ # If uploads are larger in size than this value then
35
+ # resumable uploads are used.
36
+ #
37
+ # The default value is 5 MiB (5,000,000 bytes).
38
+ def self.resumable_threshold
39
+ @@resumable_threshold
40
+ end
41
+
42
+ ##
43
+ # Sets a new resumable threshold value.
44
+ def self.resumable_threshold= new_resumable_threshold
45
+ # rubocop:disable Style/ClassVars
46
+ # Disabled rubocop because this is the best option.
47
+ @@resumable_threshold = new_resumable_threshold.to_i
48
+ # rubocop:enable Style/ClassVars
49
+ end
50
+
51
+ # Set the default threshold to 5 MiB.
52
+ self.resumable_threshold = 5_000_000
53
+ end
54
+ end
@@ -16,5 +16,5 @@
16
16
  #--
17
17
  # Google Cloud Version
18
18
  module Gcloud
19
- VERSION = "0.2.0"
19
+ VERSION = "0.3.0"
20
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gcloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Silvano Luciani
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-22 00:00:00.000000000 Z
12
+ date: 2015-08-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: beefcake
@@ -81,6 +81,62 @@ dependencies:
81
81
  - - ~>
82
82
  - !ruby/object:Gem::Version
83
83
  version: '5.7'
84
+ - !ruby/object:Gem::Dependency
85
+ name: minitest-autotest
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '1.0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: '1.0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: minitest-focus
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: '1.1'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '1.1'
112
+ - !ruby/object:Gem::Dependency
113
+ name: minitest-rg
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: '5.2'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '5.2'
126
+ - !ruby/object:Gem::Dependency
127
+ name: autotest-suffix
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ~>
131
+ - !ruby/object:Gem::Version
132
+ version: '1.1'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: '1.1'
84
140
  - !ruby/object:Gem::Dependency
85
141
  name: rdoc
86
142
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +223,25 @@ files:
167
223
  - OVERVIEW.md
168
224
  - lib/gcloud.rb
169
225
  - lib/gcloud/backoff.rb
226
+ - lib/gcloud/bigquery.rb
227
+ - lib/gcloud/bigquery/connection.rb
228
+ - lib/gcloud/bigquery/copy_job.rb
229
+ - lib/gcloud/bigquery/credentials.rb
230
+ - lib/gcloud/bigquery/data.rb
231
+ - lib/gcloud/bigquery/dataset.rb
232
+ - lib/gcloud/bigquery/dataset/list.rb
233
+ - lib/gcloud/bigquery/errors.rb
234
+ - lib/gcloud/bigquery/extract_job.rb
235
+ - lib/gcloud/bigquery/insert_response.rb
236
+ - lib/gcloud/bigquery/job.rb
237
+ - lib/gcloud/bigquery/job/list.rb
238
+ - lib/gcloud/bigquery/load_job.rb
239
+ - lib/gcloud/bigquery/project.rb
240
+ - lib/gcloud/bigquery/query_data.rb
241
+ - lib/gcloud/bigquery/query_job.rb
242
+ - lib/gcloud/bigquery/table.rb
243
+ - lib/gcloud/bigquery/table/list.rb
244
+ - lib/gcloud/bigquery/view.rb
170
245
  - lib/gcloud/credentials.rb
171
246
  - lib/gcloud/datastore.rb
172
247
  - lib/gcloud/datastore/connection.rb
@@ -205,6 +280,7 @@ files:
205
280
  - lib/gcloud/storage/file/list.rb
206
281
  - lib/gcloud/storage/file/verifier.rb
207
282
  - lib/gcloud/storage/project.rb
283
+ - lib/gcloud/upload.rb
208
284
  - lib/gcloud/version.rb
209
285
  homepage: http://googlecloudplatform.github.io/gcloud-ruby/
210
286
  licenses: