gcloud 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/AUTHENTICATION.md +3 -3
- data/CHANGELOG.md +92 -0
- data/OVERVIEW.md +3 -3
- data/lib/gcloud.rb +75 -25
- data/lib/gcloud/backoff.rb +5 -1
- data/lib/gcloud/bigquery.rb +25 -43
- data/lib/gcloud/bigquery/copy_job.rb +13 -13
- data/lib/gcloud/bigquery/data.rb +20 -16
- data/lib/gcloud/bigquery/dataset.rb +202 -177
- data/lib/gcloud/bigquery/dataset/access.rb +118 -104
- data/lib/gcloud/bigquery/dataset/list.rb +14 -18
- data/lib/gcloud/bigquery/extract_job.rb +12 -12
- data/lib/gcloud/bigquery/insert_response.rb +12 -14
- data/lib/gcloud/bigquery/job.rb +45 -57
- data/lib/gcloud/bigquery/job/list.rb +18 -24
- data/lib/gcloud/bigquery/load_job.rb +35 -27
- data/lib/gcloud/bigquery/project.rb +53 -73
- data/lib/gcloud/bigquery/query_data.rb +28 -35
- data/lib/gcloud/bigquery/query_job.rb +18 -18
- data/lib/gcloud/bigquery/schema.rb +359 -0
- data/lib/gcloud/bigquery/service.rb +506 -0
- data/lib/gcloud/bigquery/table.rb +185 -266
- data/lib/gcloud/bigquery/table/list.rb +15 -19
- data/lib/gcloud/bigquery/view.rb +126 -81
- data/lib/gcloud/datastore.rb +39 -27
- data/lib/gcloud/datastore/commit.rb +2 -2
- data/lib/gcloud/datastore/dataset.rb +8 -19
- data/lib/gcloud/datastore/dataset/lookup_results.rb +2 -4
- data/lib/gcloud/datastore/dataset/query_results.rb +0 -2
- data/lib/gcloud/datastore/entity.rb +7 -1
- data/lib/gcloud/datastore/errors.rb +5 -27
- data/lib/gcloud/datastore/grpc_utils.rb +4 -3
- data/lib/gcloud/datastore/key.rb +6 -0
- data/lib/gcloud/datastore/service.rb +18 -12
- data/lib/gcloud/datastore/transaction.rb +0 -10
- data/lib/gcloud/dns.rb +29 -19
- data/lib/gcloud/dns/change.rb +10 -15
- data/lib/gcloud/dns/change/list.rb +4 -4
- data/lib/gcloud/dns/importer.rb +1 -1
- data/lib/gcloud/dns/project.rb +32 -49
- data/lib/gcloud/dns/record.rb +8 -2
- data/lib/gcloud/dns/record/list.rb +4 -4
- data/lib/gcloud/dns/service.rb +167 -0
- data/lib/gcloud/dns/zone.rb +33 -52
- data/lib/gcloud/dns/zone/list.rb +12 -16
- data/lib/gcloud/errors.rb +31 -19
- data/lib/gcloud/logging.rb +50 -39
- data/lib/gcloud/logging/entry.rb +197 -24
- data/lib/gcloud/logging/entry/list.rb +0 -2
- data/lib/gcloud/logging/logger.rb +1 -1
- data/lib/gcloud/logging/metric.rb +3 -9
- data/lib/gcloud/logging/metric/list.rb +0 -2
- data/lib/gcloud/logging/project.rb +58 -54
- data/lib/gcloud/logging/resource_descriptor.rb +2 -2
- data/lib/gcloud/logging/resource_descriptor/list.rb +0 -2
- data/lib/gcloud/logging/service.rb +32 -23
- data/lib/gcloud/logging/sink.rb +8 -14
- data/lib/gcloud/logging/sink/list.rb +0 -2
- data/lib/gcloud/pubsub.rb +21 -16
- data/lib/gcloud/pubsub/policy.rb +204 -0
- data/lib/gcloud/pubsub/project.rb +26 -38
- data/lib/gcloud/pubsub/service.rb +39 -31
- data/lib/gcloud/pubsub/subscription.rb +56 -59
- data/lib/gcloud/pubsub/subscription/list.rb +4 -4
- data/lib/gcloud/pubsub/topic.rb +69 -66
- data/lib/gcloud/pubsub/topic/list.rb +0 -2
- data/lib/gcloud/pubsub/topic/{batch.rb → publisher.rb} +15 -2
- data/lib/gcloud/resource_manager.rb +27 -26
- data/lib/gcloud/resource_manager/manager.rb +19 -39
- data/lib/gcloud/resource_manager/policy.rb +211 -0
- data/lib/gcloud/resource_manager/project.rb +97 -121
- data/lib/gcloud/resource_manager/project/list.rb +7 -7
- data/lib/gcloud/resource_manager/project/updater.rb +4 -9
- data/lib/gcloud/resource_manager/service.rb +127 -0
- data/lib/gcloud/storage.rb +24 -42
- data/lib/gcloud/storage/bucket.rb +104 -192
- data/lib/gcloud/storage/bucket/acl.rb +47 -143
- data/lib/gcloud/storage/bucket/cors.rb +55 -11
- data/lib/gcloud/storage/bucket/list.rb +14 -14
- data/lib/gcloud/storage/errors.rb +3 -43
- data/lib/gcloud/storage/file.rb +114 -111
- data/lib/gcloud/storage/file/acl.rb +27 -113
- data/lib/gcloud/storage/file/list.rb +21 -21
- data/lib/gcloud/storage/project.rb +49 -59
- data/lib/gcloud/storage/service.rb +347 -0
- data/lib/gcloud/translate.rb +24 -14
- data/lib/gcloud/translate/api.rb +12 -21
- data/lib/gcloud/translate/detection.rb +5 -5
- data/lib/gcloud/translate/language.rb +1 -1
- data/lib/gcloud/translate/service.rb +80 -0
- data/lib/gcloud/translate/translation.rb +6 -6
- data/lib/gcloud/version.rb +1 -1
- data/lib/gcloud/vision.rb +24 -15
- data/lib/gcloud/vision/annotate.rb +24 -21
- data/lib/gcloud/vision/annotation.rb +9 -9
- data/lib/gcloud/vision/annotation/entity.rb +11 -11
- data/lib/gcloud/vision/annotation/face.rb +25 -25
- data/lib/gcloud/vision/annotation/properties.rb +8 -8
- data/lib/gcloud/vision/annotation/safe_search.rb +4 -4
- data/lib/gcloud/vision/annotation/text.rb +7 -7
- data/lib/gcloud/vision/annotation/vertex.rb +1 -1
- data/lib/gcloud/vision/image.rb +11 -11
- data/lib/gcloud/vision/location.rb +5 -2
- data/lib/gcloud/vision/project.rb +14 -16
- data/lib/gcloud/vision/service.rb +66 -0
- data/lib/google/api_client.rb +0 -0
- metadata +27 -24
- data/lib/gcloud/bigquery/connection.rb +0 -624
- data/lib/gcloud/bigquery/errors.rb +0 -68
- data/lib/gcloud/bigquery/table/schema.rb +0 -234
- data/lib/gcloud/dns/connection.rb +0 -173
- data/lib/gcloud/dns/errors.rb +0 -68
- data/lib/gcloud/resource_manager/connection.rb +0 -134
- data/lib/gcloud/resource_manager/errors.rb +0 -68
- data/lib/gcloud/storage/connection.rb +0 -444
- data/lib/gcloud/translate/connection.rb +0 -85
- data/lib/gcloud/translate/errors.rb +0 -68
- data/lib/gcloud/upload.rb +0 -95
- data/lib/gcloud/vision/connection.rb +0 -63
- data/lib/gcloud/vision/errors.rb +0 -69
@@ -0,0 +1,167 @@
|
|
1
|
+
# Copyright 2016 Google Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
|
16
|
+
require "gcloud/version"
|
17
|
+
require "gcloud/errors"
|
18
|
+
require "google/apis/dns_v1"
|
19
|
+
|
20
|
+
module Gcloud
|
21
|
+
module Dns
|
22
|
+
##
|
23
|
+
# @private
|
24
|
+
# Represents the service to DNS, exposing the API calls.
|
25
|
+
class Service
|
26
|
+
##
|
27
|
+
# Alias to the Google Client API module
|
28
|
+
API = Google::Apis::DnsV1
|
29
|
+
|
30
|
+
attr_accessor :project
|
31
|
+
attr_accessor :credentials
|
32
|
+
|
33
|
+
##
|
34
|
+
# Creates a new Service instance.
|
35
|
+
def initialize project, credentials, retries: nil, timeout: nil
|
36
|
+
@project = project
|
37
|
+
@credentials = credentials
|
38
|
+
@service = API::DnsService.new
|
39
|
+
@service.client_options.application_name = "gcloud-ruby"
|
40
|
+
@service.client_options.application_version = Gcloud::VERSION
|
41
|
+
@service.request_options.retries = retries || 3
|
42
|
+
@service.request_options.timeout_sec = timeout if timeout
|
43
|
+
@service.authorization = @credentials.client
|
44
|
+
end
|
45
|
+
|
46
|
+
def service
|
47
|
+
return mocked_service if mocked_service
|
48
|
+
@service
|
49
|
+
end
|
50
|
+
attr_accessor :mocked_service
|
51
|
+
|
52
|
+
##
|
53
|
+
# Returns Google::Apis::DnsV1::Project
|
54
|
+
def get_project project_id = @project
|
55
|
+
service.get_project project_id
|
56
|
+
rescue Google::Apis::Error => e
|
57
|
+
raise Gcloud::Error.from_error(e)
|
58
|
+
end
|
59
|
+
|
60
|
+
##
|
61
|
+
# Returns Google::Apis::DnsV1::ManagedZone
|
62
|
+
def get_zone zone_id
|
63
|
+
service.get_managed_zone @project, zone_id
|
64
|
+
rescue Google::Apis::Error => e
|
65
|
+
raise Gcloud::Error.from_error(e)
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Returns Google::Apis::DnsV1::ListManagedZonesResponse
|
70
|
+
def list_zones token: nil, max: nil
|
71
|
+
service.list_managed_zones @project, max_results: max, page_token: token
|
72
|
+
rescue Google::Apis::Error => e
|
73
|
+
raise Gcloud::Error.from_error(e)
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# Returns Google::Apis::DnsV1::ManagedZone
|
78
|
+
def create_zone zone_name, zone_dns, description: nil,
|
79
|
+
name_server_set: nil
|
80
|
+
managed_zone = Google::Apis::DnsV1::ManagedZone.new(
|
81
|
+
kind: "dns#managedZone",
|
82
|
+
name: zone_name,
|
83
|
+
dns_name: zone_dns,
|
84
|
+
description: (description || ""),
|
85
|
+
name_server_set: name_server_set
|
86
|
+
)
|
87
|
+
service.create_managed_zone @project, managed_zone
|
88
|
+
rescue Google::Apis::Error => e
|
89
|
+
raise Gcloud::Error.from_error(e)
|
90
|
+
end
|
91
|
+
|
92
|
+
def delete_zone zone_id
|
93
|
+
service.delete_managed_zone @project, zone_id
|
94
|
+
rescue Google::Apis::Error => e
|
95
|
+
raise Gcloud::Error.from_error(e)
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Returns Google::Apis::DnsV1::Change
|
100
|
+
def get_change zone_id, change_id
|
101
|
+
service.get_change @project, zone_id, change_id
|
102
|
+
rescue Google::Apis::Error => e
|
103
|
+
raise Gcloud::Error.from_error(e)
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Returns Google::Apis::DnsV1::ListChangesResponse
|
108
|
+
def list_changes zone_id, token: nil, max: nil, order: nil, sort: nil
|
109
|
+
service.list_changes @project, zone_id, max_results: max,
|
110
|
+
page_token: token,
|
111
|
+
sort_by: sort,
|
112
|
+
sort_order: order
|
113
|
+
rescue Google::Apis::Error => e
|
114
|
+
raise Gcloud::Error.from_error(e)
|
115
|
+
end
|
116
|
+
|
117
|
+
##
|
118
|
+
# Returns Google::Apis::DnsV1::Change
|
119
|
+
def create_change zone_id, additions, deletions
|
120
|
+
change = Google::Apis::DnsV1::Change.new(
|
121
|
+
kind: "dns#change",
|
122
|
+
additions: Array(additions),
|
123
|
+
deletions: Array(deletions)
|
124
|
+
)
|
125
|
+
service.create_change @project, zone_id, change
|
126
|
+
rescue Google::Apis::Error => e
|
127
|
+
raise Gcloud::Error.from_error(e)
|
128
|
+
end
|
129
|
+
|
130
|
+
##
|
131
|
+
# Returns Google::Apis::DnsV1::ListResourceRecordSetsResponse
|
132
|
+
def list_records zone_id, name = nil, type = nil, token: nil, max: nil
|
133
|
+
service.list_resource_record_sets @project, zone_id, max_results: max,
|
134
|
+
name: name,
|
135
|
+
page_token: token,
|
136
|
+
type: type
|
137
|
+
rescue Google::Apis::Error => e
|
138
|
+
raise Gcloud::Error.from_error(e)
|
139
|
+
end
|
140
|
+
|
141
|
+
##
|
142
|
+
# Fully Qualified Domain Name
|
143
|
+
def self.fqdn name, origin_dns
|
144
|
+
name = name.to_s.strip
|
145
|
+
return name if self.ip_addr? name
|
146
|
+
name = origin_dns if name.empty?
|
147
|
+
name = origin_dns if name == "@"
|
148
|
+
name = "#{name}.#{origin_dns}" unless name.include? "."
|
149
|
+
name = "#{name}." unless name.end_with? "."
|
150
|
+
name
|
151
|
+
end
|
152
|
+
|
153
|
+
require "ipaddr"
|
154
|
+
|
155
|
+
def self.ip_addr? name
|
156
|
+
IPAddr.new name
|
157
|
+
true
|
158
|
+
rescue IPAddr::Error
|
159
|
+
false
|
160
|
+
end
|
161
|
+
|
162
|
+
def inspect
|
163
|
+
"#{self.class}(#{@project})"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
data/lib/gcloud/dns/zone.rb
CHANGED
@@ -44,8 +44,8 @@ module Gcloud
|
|
44
44
|
#
|
45
45
|
class Zone
|
46
46
|
##
|
47
|
-
# @private The
|
48
|
-
attr_accessor :
|
47
|
+
# @private The Service object.
|
48
|
+
attr_accessor :service
|
49
49
|
|
50
50
|
##
|
51
51
|
# @private The Google API Client object.
|
@@ -54,7 +54,7 @@ module Gcloud
|
|
54
54
|
##
|
55
55
|
# @private Create an empty Zone object.
|
56
56
|
def initialize
|
57
|
-
@
|
57
|
+
@service = nil
|
58
58
|
@gapi = {}
|
59
59
|
end
|
60
60
|
|
@@ -62,7 +62,7 @@ module Gcloud
|
|
62
62
|
# Unique identifier for the resource; defined by the server.
|
63
63
|
#
|
64
64
|
def id
|
65
|
-
@gapi
|
65
|
+
@gapi.id
|
66
66
|
end
|
67
67
|
|
68
68
|
##
|
@@ -72,14 +72,14 @@ module Gcloud
|
|
72
72
|
# dashes.
|
73
73
|
#
|
74
74
|
def name
|
75
|
-
@gapi
|
75
|
+
@gapi.name
|
76
76
|
end
|
77
77
|
|
78
78
|
##
|
79
79
|
# The DNS name of this managed zone, for instance "example.com.".
|
80
80
|
#
|
81
81
|
def dns
|
82
|
-
@gapi
|
82
|
+
@gapi.dns_name
|
83
83
|
end
|
84
84
|
|
85
85
|
##
|
@@ -87,7 +87,7 @@ module Gcloud
|
|
87
87
|
# the user's convenience. Has no effect on the managed zone's function.
|
88
88
|
#
|
89
89
|
def description
|
90
|
-
@gapi
|
90
|
+
@gapi.description
|
91
91
|
end
|
92
92
|
|
93
93
|
##
|
@@ -95,7 +95,7 @@ module Gcloud
|
|
95
95
|
# server.
|
96
96
|
#
|
97
97
|
def name_servers
|
98
|
-
Array(@gapi
|
98
|
+
Array(@gapi.name_servers)
|
99
99
|
end
|
100
100
|
|
101
101
|
##
|
@@ -104,14 +104,14 @@ module Gcloud
|
|
104
104
|
# ManagedZones. Most users will leave this field unset.
|
105
105
|
#
|
106
106
|
def name_server_set
|
107
|
-
@gapi
|
107
|
+
@gapi.name_server_set
|
108
108
|
end
|
109
109
|
|
110
110
|
##
|
111
111
|
# The time that this resource was created on the server.
|
112
112
|
#
|
113
113
|
def created_at
|
114
|
-
Time.parse @gapi
|
114
|
+
Time.parse @gapi.creation_time
|
115
115
|
rescue
|
116
116
|
nil
|
117
117
|
end
|
@@ -144,13 +144,9 @@ module Gcloud
|
|
144
144
|
def delete force: false
|
145
145
|
clear! if force
|
146
146
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
true
|
151
|
-
else
|
152
|
-
fail ApiError.from_response(resp)
|
153
|
-
end
|
147
|
+
ensure_service!
|
148
|
+
service.delete_zone id
|
149
|
+
true
|
154
150
|
end
|
155
151
|
|
156
152
|
##
|
@@ -191,13 +187,11 @@ module Gcloud
|
|
191
187
|
# end
|
192
188
|
#
|
193
189
|
def change change_id
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
nil
|
200
|
-
end
|
190
|
+
ensure_service!
|
191
|
+
gapi = service.get_change id, change_id
|
192
|
+
Change.from_gapi gapi, self
|
193
|
+
rescue Gcloud::NotFoundError
|
194
|
+
nil
|
201
195
|
end
|
202
196
|
alias_method :find_change, :change
|
203
197
|
alias_method :get_change, :change
|
@@ -248,18 +242,14 @@ module Gcloud
|
|
248
242
|
# end
|
249
243
|
#
|
250
244
|
def changes token: nil, max: nil, order: nil
|
251
|
-
|
245
|
+
ensure_service!
|
252
246
|
# Fix the sort options
|
253
247
|
order = adjust_change_sort_order order
|
254
248
|
sort = "changeSequence" if order
|
255
249
|
# Continue with the API call
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
Change::List.from_response resp, self, max, order
|
260
|
-
else
|
261
|
-
fail ApiError.from_response(resp)
|
262
|
-
end
|
250
|
+
gapi = service.list_changes id, token: token, max: max,
|
251
|
+
order: order, sort: sort
|
252
|
+
Change::List.from_gapi gapi, self, max, order
|
263
253
|
end
|
264
254
|
alias_method :find_changes, :changes
|
265
255
|
|
@@ -313,16 +303,12 @@ module Gcloud
|
|
313
303
|
# end
|
314
304
|
#
|
315
305
|
def records name = nil, type = nil, token: nil, max: nil
|
316
|
-
|
306
|
+
ensure_service!
|
317
307
|
|
318
308
|
name = fqdn(name) if name
|
319
309
|
|
320
|
-
|
321
|
-
|
322
|
-
Record::List.from_response resp, self, name, type, max
|
323
|
-
else
|
324
|
-
fail ApiError.from_response(resp)
|
325
|
-
end
|
310
|
+
gapi = service.list_records id, name, type, token: token, max: max
|
311
|
+
Record::List.from_gapi gapi, self, name, type, max
|
326
312
|
end
|
327
313
|
alias_method :find_records, :records
|
328
314
|
|
@@ -707,7 +693,7 @@ module Gcloud
|
|
707
693
|
# zone.fqdn "mail.example.com." #=> "mail.example.com."
|
708
694
|
#
|
709
695
|
def fqdn domain_name
|
710
|
-
|
696
|
+
Service.fqdn domain_name, dns
|
711
697
|
end
|
712
698
|
|
713
699
|
##
|
@@ -715,7 +701,7 @@ module Gcloud
|
|
715
701
|
def self.from_gapi gapi, conn
|
716
702
|
new.tap do |f|
|
717
703
|
f.gapi = gapi
|
718
|
-
f.
|
704
|
+
f.service = conn
|
719
705
|
end
|
720
706
|
end
|
721
707
|
|
@@ -723,20 +709,15 @@ module Gcloud
|
|
723
709
|
|
724
710
|
##
|
725
711
|
# Raise an error unless an active connection is available.
|
726
|
-
def
|
727
|
-
fail "Must have active connection" unless
|
712
|
+
def ensure_service!
|
713
|
+
fail "Must have active connection" unless service
|
728
714
|
end
|
729
715
|
|
730
716
|
def create_change additions, deletions
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
if resp.success?
|
736
|
-
Change.from_gapi resp.data, self
|
737
|
-
else
|
738
|
-
fail ApiError.from_response(resp)
|
739
|
-
end
|
717
|
+
ensure_service!
|
718
|
+
gapi = service.create_change id, additions.map(&:to_gapi),
|
719
|
+
deletions.map(&:to_gapi)
|
720
|
+
Change.from_gapi gapi, self
|
740
721
|
end
|
741
722
|
|
742
723
|
def increment_soa to_add, to_remove, soa_serial
|
data/lib/gcloud/dns/zone/list.rb
CHANGED
@@ -70,13 +70,9 @@ module Gcloud
|
|
70
70
|
#
|
71
71
|
def next
|
72
72
|
return nil unless next?
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
Zone::List.from_response resp, @connection, @max
|
77
|
-
else
|
78
|
-
fail ApiError.from_response(resp)
|
79
|
-
end
|
73
|
+
ensure_service!
|
74
|
+
gapi = @service.list_zones token: token, max: @max
|
75
|
+
Zone::List.from_gapi gapi, @service, @max
|
80
76
|
end
|
81
77
|
|
82
78
|
##
|
@@ -148,14 +144,14 @@ module Gcloud
|
|
148
144
|
end
|
149
145
|
|
150
146
|
##
|
151
|
-
# @private New Zones::List from a
|
152
|
-
def self.
|
153
|
-
zones = new(Array(
|
154
|
-
Zone.from_gapi
|
147
|
+
# @private New Zones::List from a ListManagedZonesResponse object.
|
148
|
+
def self.from_gapi gapi, conn, max = nil
|
149
|
+
zones = new(Array(gapi.managed_zones).map do |g|
|
150
|
+
Zone.from_gapi g, conn
|
155
151
|
end)
|
156
|
-
zones.instance_variable_set "@token",
|
157
|
-
zones.instance_variable_set "@
|
158
|
-
zones.instance_variable_set "@max",
|
152
|
+
zones.instance_variable_set "@token", gapi.next_page_token
|
153
|
+
zones.instance_variable_set "@service", conn
|
154
|
+
zones.instance_variable_set "@max", max
|
159
155
|
zones
|
160
156
|
end
|
161
157
|
|
@@ -163,8 +159,8 @@ module Gcloud
|
|
163
159
|
|
164
160
|
##
|
165
161
|
# Raise an error unless an active connection is available.
|
166
|
-
def
|
167
|
-
fail "Must have active connection" unless @
|
162
|
+
def ensure_service!
|
163
|
+
fail "Must have active connection" unless @service
|
168
164
|
end
|
169
165
|
end
|
170
166
|
end
|
data/lib/gcloud/errors.rb
CHANGED
@@ -15,35 +15,47 @@
|
|
15
15
|
|
16
16
|
module Gcloud
|
17
17
|
##
|
18
|
-
# Base
|
18
|
+
# Base gcloud-ruby exception class.
|
19
19
|
class Error < StandardError
|
20
|
-
|
21
|
-
# The inner error object.
|
22
|
-
attr_reader :inner
|
23
|
-
|
24
|
-
##
|
25
|
-
# Create a new error object.
|
26
|
-
def initialize message = nil, error = nil
|
27
|
-
super message
|
28
|
-
@inner = error
|
29
|
-
end
|
30
|
-
|
31
|
-
# @private Create a new error object.
|
20
|
+
# @private Create a new error object from a client error
|
32
21
|
def self.from_error error
|
33
|
-
|
22
|
+
klass = if error.respond_to? :code
|
23
|
+
grpc_error_class_for error.code
|
24
|
+
elsif error.respond_to? :status_code
|
25
|
+
gapi_error_class_for error.status_code
|
26
|
+
else
|
27
|
+
self
|
28
|
+
end
|
29
|
+
klass.new error.message
|
34
30
|
end
|
35
31
|
|
36
|
-
# @private Identify the subclass for
|
37
|
-
def self.
|
38
|
-
return self.class unless error.is_a? GRPC::BadStatus
|
32
|
+
# @private Identify the subclass for a gRPC error
|
33
|
+
def self.grpc_error_class_for grpc_error_code
|
39
34
|
# The gRPC status code 0 is for a successful response.
|
40
35
|
# So there is no error subclass for a 0 status code, use current class.
|
41
|
-
[self
|
36
|
+
[self, CanceledError, UnknownError, InvalidArgumentError,
|
42
37
|
DeadlineExceededError, NotFoundError, AlreadyExistsError,
|
43
38
|
PermissionDeniedError, ResourceExhaustedError, FailedPreconditionError,
|
44
39
|
AbortedError, OutOfRangeError, UnimplementedError, InternalError,
|
45
40
|
UnavailableError, DataLossError, UnauthenticatedError
|
46
|
-
][
|
41
|
+
][grpc_error_code] || self
|
42
|
+
end
|
43
|
+
|
44
|
+
# @private Identify the subclass for a Google API Client error
|
45
|
+
def self.gapi_error_class_for http_status_code
|
46
|
+
# The http status codes mapped to their error classes.
|
47
|
+
{ 400 => InvalidArgumentError, # FailedPreconditionError/OutOfRangeError
|
48
|
+
401 => UnauthenticatedError,
|
49
|
+
403 => PermissionDeniedError,
|
50
|
+
404 => NotFoundError,
|
51
|
+
409 => AlreadyExistsError, # AbortedError
|
52
|
+
429 => ResourceExhaustedError,
|
53
|
+
499 => CanceledError,
|
54
|
+
500 => InternalError, # UnknownError/DataLossError
|
55
|
+
501 => UnimplementedError,
|
56
|
+
503 => UnavailableError,
|
57
|
+
504 => DeadlineExceededError
|
58
|
+
}[http_status_code] || self
|
47
59
|
end
|
48
60
|
end
|
49
61
|
|