gcloud 0.12.2 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +5 -13
  2. data/lib/gcloud.rb +27 -456
  3. data/lib/gcloud/bigquery.rb +2 -382
  4. data/lib/gcloud/datastore.rb +2 -576
  5. data/lib/gcloud/dns.rb +2 -321
  6. data/lib/gcloud/logging.rb +1 -322
  7. data/lib/gcloud/pubsub.rb +2 -476
  8. data/lib/gcloud/resource_manager.rb +2 -273
  9. data/lib/gcloud/storage.rb +2 -440
  10. data/lib/gcloud/translate.rb +1 -250
  11. data/lib/gcloud/version.rb +2 -2
  12. data/lib/gcloud/vision.rb +1 -501
  13. metadata +36 -332
  14. data/AUTHENTICATION.md +0 -75
  15. data/CHANGELOG.md +0 -382
  16. data/OVERVIEW.md +0 -259
  17. data/lib/gcloud/backoff.rb +0 -150
  18. data/lib/gcloud/bigquery/copy_job.rb +0 -97
  19. data/lib/gcloud/bigquery/credentials.rb +0 -29
  20. data/lib/gcloud/bigquery/data.rb +0 -239
  21. data/lib/gcloud/bigquery/dataset.rb +0 -753
  22. data/lib/gcloud/bigquery/dataset/access.rb +0 -507
  23. data/lib/gcloud/bigquery/dataset/list.rb +0 -169
  24. data/lib/gcloud/bigquery/extract_job.rb +0 -117
  25. data/lib/gcloud/bigquery/insert_response.rb +0 -81
  26. data/lib/gcloud/bigquery/job.rb +0 -299
  27. data/lib/gcloud/bigquery/job/list.rb +0 -172
  28. data/lib/gcloud/bigquery/load_job.rb +0 -202
  29. data/lib/gcloud/bigquery/project.rb +0 -475
  30. data/lib/gcloud/bigquery/query_data.rb +0 -234
  31. data/lib/gcloud/bigquery/query_job.rb +0 -137
  32. data/lib/gcloud/bigquery/schema.rb +0 -359
  33. data/lib/gcloud/bigquery/service.rb +0 -506
  34. data/lib/gcloud/bigquery/table.rb +0 -1141
  35. data/lib/gcloud/bigquery/table/list.rb +0 -180
  36. data/lib/gcloud/bigquery/view.rb +0 -475
  37. data/lib/gcloud/credentials.rb +0 -129
  38. data/lib/gcloud/datastore/commit.rb +0 -148
  39. data/lib/gcloud/datastore/credentials.rb +0 -35
  40. data/lib/gcloud/datastore/cursor.rb +0 -76
  41. data/lib/gcloud/datastore/dataset.rb +0 -660
  42. data/lib/gcloud/datastore/dataset/lookup_results.rb +0 -219
  43. data/lib/gcloud/datastore/dataset/query_results.rb +0 -386
  44. data/lib/gcloud/datastore/entity.rb +0 -449
  45. data/lib/gcloud/datastore/errors.rb +0 -41
  46. data/lib/gcloud/datastore/gql_query.rb +0 -211
  47. data/lib/gcloud/datastore/grpc_utils.rb +0 -132
  48. data/lib/gcloud/datastore/key.rb +0 -281
  49. data/lib/gcloud/datastore/properties.rb +0 -128
  50. data/lib/gcloud/datastore/query.rb +0 -348
  51. data/lib/gcloud/datastore/service.rb +0 -167
  52. data/lib/gcloud/datastore/transaction.rb +0 -362
  53. data/lib/gcloud/dns/change.rb +0 -158
  54. data/lib/gcloud/dns/change/list.rb +0 -173
  55. data/lib/gcloud/dns/credentials.rb +0 -29
  56. data/lib/gcloud/dns/importer.rb +0 -183
  57. data/lib/gcloud/dns/project.rb +0 -247
  58. data/lib/gcloud/dns/record.rb +0 -170
  59. data/lib/gcloud/dns/record/list.rb +0 -174
  60. data/lib/gcloud/dns/service.rb +0 -167
  61. data/lib/gcloud/dns/zone.rb +0 -759
  62. data/lib/gcloud/dns/zone/list.rb +0 -168
  63. data/lib/gcloud/dns/zone/transaction.rb +0 -176
  64. data/lib/gcloud/errors.rb +0 -206
  65. data/lib/gcloud/gce.rb +0 -56
  66. data/lib/gcloud/grpc_utils.rb +0 -87
  67. data/lib/gcloud/logging/credentials.rb +0 -29
  68. data/lib/gcloud/logging/entry.rb +0 -465
  69. data/lib/gcloud/logging/entry/http_request.rb +0 -141
  70. data/lib/gcloud/logging/entry/list.rb +0 -177
  71. data/lib/gcloud/logging/entry/operation.rb +0 -90
  72. data/lib/gcloud/logging/logger.rb +0 -307
  73. data/lib/gcloud/logging/metric.rb +0 -169
  74. data/lib/gcloud/logging/metric/list.rb +0 -172
  75. data/lib/gcloud/logging/project.rb +0 -642
  76. data/lib/gcloud/logging/resource.rb +0 -84
  77. data/lib/gcloud/logging/resource_descriptor.rb +0 -137
  78. data/lib/gcloud/logging/resource_descriptor/list.rb +0 -174
  79. data/lib/gcloud/logging/service.rb +0 -267
  80. data/lib/gcloud/logging/sink.rb +0 -227
  81. data/lib/gcloud/logging/sink/list.rb +0 -171
  82. data/lib/gcloud/pubsub/credentials.rb +0 -29
  83. data/lib/gcloud/pubsub/message.rb +0 -94
  84. data/lib/gcloud/pubsub/policy.rb +0 -204
  85. data/lib/gcloud/pubsub/project.rb +0 -482
  86. data/lib/gcloud/pubsub/received_message.rb +0 -160
  87. data/lib/gcloud/pubsub/service.rb +0 -334
  88. data/lib/gcloud/pubsub/subscription.rb +0 -565
  89. data/lib/gcloud/pubsub/subscription/list.rb +0 -208
  90. data/lib/gcloud/pubsub/topic.rb +0 -511
  91. data/lib/gcloud/pubsub/topic/list.rb +0 -174
  92. data/lib/gcloud/pubsub/topic/publisher.rb +0 -85
  93. data/lib/gcloud/resource_manager/credentials.rb +0 -30
  94. data/lib/gcloud/resource_manager/manager.rb +0 -266
  95. data/lib/gcloud/resource_manager/policy.rb +0 -211
  96. data/lib/gcloud/resource_manager/project.rb +0 -484
  97. data/lib/gcloud/resource_manager/project/list.rb +0 -167
  98. data/lib/gcloud/resource_manager/project/updater.rb +0 -130
  99. data/lib/gcloud/resource_manager/service.rb +0 -127
  100. data/lib/gcloud/storage/bucket.rb +0 -775
  101. data/lib/gcloud/storage/bucket/acl.rb +0 -810
  102. data/lib/gcloud/storage/bucket/cors.rb +0 -153
  103. data/lib/gcloud/storage/bucket/list.rb +0 -172
  104. data/lib/gcloud/storage/credentials.rb +0 -29
  105. data/lib/gcloud/storage/errors.rb +0 -65
  106. data/lib/gcloud/storage/file.rb +0 -842
  107. data/lib/gcloud/storage/file/acl.rb +0 -425
  108. data/lib/gcloud/storage/file/list.rb +0 -191
  109. data/lib/gcloud/storage/file/verifier.rb +0 -67
  110. data/lib/gcloud/storage/project.rb +0 -316
  111. data/lib/gcloud/storage/service.rb +0 -347
  112. data/lib/gcloud/translate/api.rb +0 -241
  113. data/lib/gcloud/translate/detection.rb +0 -137
  114. data/lib/gcloud/translate/language.rb +0 -69
  115. data/lib/gcloud/translate/service.rb +0 -80
  116. data/lib/gcloud/translate/translation.rb +0 -112
  117. data/lib/gcloud/vision/annotate.rb +0 -224
  118. data/lib/gcloud/vision/annotation.rb +0 -455
  119. data/lib/gcloud/vision/annotation/entity.rb +0 -234
  120. data/lib/gcloud/vision/annotation/face.rb +0 -1750
  121. data/lib/gcloud/vision/annotation/properties.rb +0 -245
  122. data/lib/gcloud/vision/annotation/safe_search.rb +0 -161
  123. data/lib/gcloud/vision/annotation/text.rb +0 -236
  124. data/lib/gcloud/vision/annotation/vertex.rb +0 -108
  125. data/lib/gcloud/vision/credentials.rb +0 -29
  126. data/lib/gcloud/vision/image.rb +0 -590
  127. data/lib/gcloud/vision/location.rb +0 -115
  128. data/lib/gcloud/vision/project.rb +0 -278
  129. data/lib/gcloud/vision/service.rb +0 -66
  130. data/lib/google/api/annotations.rb +0 -14
  131. data/lib/google/api/http.rb +0 -30
  132. data/lib/google/api/label.rb +0 -24
  133. data/lib/google/api/monitored_resource.rb +0 -25
  134. data/lib/google/datastore/v1beta3/datastore.rb +0 -115
  135. data/lib/google/datastore/v1beta3/datastore_services.rb +0 -33
  136. data/lib/google/datastore/v1beta3/entity.rb +0 -63
  137. data/lib/google/datastore/v1beta3/query.rb +0 -128
  138. data/lib/google/devtools/cloudtrace/v1/trace.rb +0 -78
  139. data/lib/google/devtools/cloudtrace/v1/trace_services.rb +0 -32
  140. data/lib/google/example/library/v1/library.rb +0 -91
  141. data/lib/google/example/library/v1/library_services.rb +0 -40
  142. data/lib/google/iam/v1/iam_policy.rb +0 -33
  143. data/lib/google/iam/v1/iam_policy_services.rb +0 -30
  144. data/lib/google/iam/v1/policy.rb +0 -25
  145. data/lib/google/logging/type/http_request.rb +0 -28
  146. data/lib/google/logging/type/log_severity.rb +0 -27
  147. data/lib/google/logging/v2/log_entry.rb +0 -44
  148. data/lib/google/logging/v2/logging.rb +0 -56
  149. data/lib/google/logging/v2/logging_config.rb +0 -59
  150. data/lib/google/logging/v2/logging_config_services.rb +0 -32
  151. data/lib/google/logging/v2/logging_metrics.rb +0 -51
  152. data/lib/google/logging/v2/logging_metrics_services.rb +0 -32
  153. data/lib/google/logging/v2/logging_services.rb +0 -31
  154. data/lib/google/longrunning/operations.rb +0 -50
  155. data/lib/google/longrunning/operations_services.rb +0 -29
  156. data/lib/google/protobuf/descriptor.rb +0 -0
  157. data/lib/google/pubsub/v1/pubsub.rb +0 -129
  158. data/lib/google/pubsub/v1/pubsub_services.rb +0 -56
  159. data/lib/google/pubsub/v1beta2/pubsub.rb +0 -126
  160. data/lib/google/pubsub/v1beta2/pubsub_services.rb +0 -56
  161. data/lib/google/rpc/code.rb +0 -32
  162. data/lib/google/rpc/error_details.rb +0 -61
  163. data/lib/google/rpc/status.rb +0 -19
  164. data/lib/google/type/color.rb +0 -20
  165. data/lib/google/type/date.rb +0 -18
  166. data/lib/google/type/dayofweek.rb +0 -23
  167. data/lib/google/type/latlng.rb +0 -17
  168. data/lib/google/type/money.rb +0 -18
  169. data/lib/google/type/timeofday.rb +0 -19
@@ -1,67 +0,0 @@
1
- # Copyright 2014 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 "pathname"
17
- require "digest/md5"
18
- require "digest/crc32c"
19
- require "gcloud/storage/errors"
20
-
21
- module Gcloud
22
- module Storage
23
- class File
24
- ##
25
- # @private
26
- # Verifies downloaded files by creating an MD5 or CRC32c hash digest
27
- # and comparing the value to the one from the Storage API.
28
- module Verifier
29
- def self.verify_md5! gcloud_file, local_file
30
- gcloud_digest = gcloud_file.md5
31
- local_digest = md5_for local_file
32
- if gcloud_digest != local_digest
33
- fail FileVerificationError.for_md5(gcloud_digest, local_digest)
34
- end
35
- end
36
-
37
- def self.verify_crc32c! gcloud_file, local_file
38
- gcloud_digest = gcloud_file.crc32c
39
- local_digest = crc32c_for local_file
40
- if gcloud_digest != local_digest
41
- fail FileVerificationError.for_crc32c(gcloud_digest, local_digest)
42
- end
43
- end
44
-
45
- def self.verify_md5 gcloud_file, local_file
46
- gcloud_file.md5 == md5_for(local_file)
47
- end
48
-
49
- def self.verify_crc32c gcloud_file, local_file
50
- gcloud_file.crc32c == crc32c_for(local_file)
51
- end
52
-
53
- def self.md5_for local_file
54
- ::File.open(Pathname(local_file).to_path, "rb") do |f|
55
- ::Digest::MD5.file(f).base64digest
56
- end
57
- end
58
-
59
- def self.crc32c_for local_file
60
- ::File.open(Pathname(local_file).to_path, "rb") do |f|
61
- ::Digest::CRC32c.file(f).base64digest
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,316 +0,0 @@
1
- # Copyright 2014 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/gce"
17
- require "gcloud/storage/errors"
18
- require "gcloud/storage/service"
19
- require "gcloud/storage/credentials"
20
- require "gcloud/storage/bucket"
21
- require "gcloud/storage/bucket/cors"
22
- require "gcloud/storage/file"
23
-
24
- module Gcloud
25
- module Storage
26
- ##
27
- # # Project
28
- #
29
- # Represents the project that storage buckets and files belong to.
30
- # All data in Google Cloud Storage belongs inside a project.
31
- # A project consists of a set of users, a set of APIs, billing,
32
- # authentication, and monitoring settings for those APIs.
33
- #
34
- # Gcloud::Storage::Project is the main object for interacting with
35
- # Google Storage. {Gcloud::Storage::Bucket} objects are created,
36
- # read, updated, and deleted by Gcloud::Storage::Project.
37
- #
38
- # See {Gcloud#storage}
39
- #
40
- # @example
41
- # require "gcloud"
42
- #
43
- # gcloud = Gcloud.new
44
- # storage = gcloud.storage
45
- #
46
- # bucket = storage.bucket "my-bucket"
47
- # file = bucket.file "path/to/my-file.ext"
48
- #
49
- class Project
50
- ##
51
- # @private The Service object.
52
- attr_accessor :service
53
-
54
- ##
55
- # @private Creates a new Project instance.
56
- #
57
- # See {Gcloud#storage}
58
- def initialize service
59
- @service = service
60
- end
61
-
62
- ##
63
- # The Storage project connected to.
64
- #
65
- # @example
66
- # require "gcloud"
67
- #
68
- # gcloud = Gcloud.new "my-todo-project",
69
- # "/path/to/keyfile.json"
70
- # storage = gcloud.storage
71
- #
72
- # storage.project #=> "my-todo-project"
73
- #
74
- def project
75
- service.project
76
- end
77
-
78
- ##
79
- # @private Default project.
80
- def self.default_project
81
- ENV["STORAGE_PROJECT"] ||
82
- ENV["GCLOUD_PROJECT"] ||
83
- ENV["GOOGLE_CLOUD_PROJECT"] ||
84
- Gcloud::GCE.project_id
85
- end
86
-
87
- ##
88
- # Retrieves a list of buckets for the given project.
89
- #
90
- # @param [String] prefix Filter results to buckets whose names begin with
91
- # this prefix.
92
- # @param [String] token A previously-returned page token representing part
93
- # of the larger set of results to view.
94
- # @param [Integer] max Maximum number of buckets to return.
95
- #
96
- # @return [Array<Gcloud::Storage::Bucket>] (See
97
- # {Gcloud::Storage::Bucket::List})
98
- #
99
- # @example
100
- # require "gcloud"
101
- #
102
- # gcloud = Gcloud.new
103
- # storage = gcloud.storage
104
- #
105
- # buckets = storage.buckets
106
- # buckets.each do |bucket|
107
- # puts bucket.name
108
- # end
109
- #
110
- # @example Retrieve buckets with names that begin with a given prefix:
111
- # require "gcloud"
112
- #
113
- # gcloud = Gcloud.new
114
- # storage = gcloud.storage
115
- #
116
- # user_buckets = storage.buckets prefix: "user-"
117
- # user_buckets.each do |bucket|
118
- # puts bucket.name
119
- # end
120
- #
121
- # @example Retrieve all buckets: (See {Bucket::List#all})
122
- # require "gcloud"
123
- #
124
- # gcloud = Gcloud.new
125
- # storage = gcloud.storage
126
- #
127
- # buckets = storage.buckets
128
- # buckets.all do |bucket|
129
- # puts bucket.name
130
- # end
131
- #
132
- def buckets prefix: nil, token: nil, max: nil
133
- options = { prefix: prefix, token: token, max: max }
134
- gapi = service.list_buckets options
135
- Bucket::List.from_gapi gapi, service, prefix, max
136
- end
137
- alias_method :find_buckets, :buckets
138
-
139
- ##
140
- # Retrieves bucket by name.
141
- #
142
- # @param [String] bucket_name Name of a bucket.
143
- #
144
- # @return [Gcloud::Storage::Bucket, nil] Returns nil if bucket does not
145
- # exist
146
- #
147
- # @example
148
- # require "gcloud"
149
- #
150
- # gcloud = Gcloud.new
151
- # storage = gcloud.storage
152
- #
153
- # bucket = storage.bucket "my-bucket"
154
- # puts bucket.name
155
- #
156
- def bucket bucket_name
157
- gapi = service.get_bucket bucket_name
158
- Bucket.from_gapi gapi, service
159
- rescue Gcloud::NotFoundError
160
- nil
161
- end
162
- alias_method :find_bucket, :bucket
163
-
164
- ##
165
- # Creates a new bucket with optional attributes. Also accepts a block for
166
- # defining the CORS configuration for a static website served from the
167
- # bucket. See {Bucket::Cors} for details.
168
- #
169
- # The API call to create the bucket may be retried under certain
170
- # conditions. See {Gcloud#storage} to control this behavior.
171
- #
172
- # You can pass [website
173
- # settings](https://cloud.google.com/storage/docs/website-configuration)
174
- # for the bucket, including a block that defines CORS rule. See
175
- # {Bucket::Cors} for details.
176
- #
177
- # @see https://cloud.google.com/storage/docs/cross-origin Cross-Origin
178
- # Resource Sharing (CORS)
179
- # @see https://cloud.google.com/storage/docs/website-configuration How to
180
- # Host a Static Website
181
- #
182
- # @param [String] bucket_name Name of a bucket.
183
- # @param [String] acl Apply a predefined set of access controls to this
184
- # bucket.
185
- #
186
- # Acceptable values are:
187
- #
188
- # * `auth`, `auth_read`, `authenticated`, `authenticated_read`,
189
- # `authenticatedRead` - Project team owners get OWNER access, and
190
- # allAuthenticatedUsers get READER access.
191
- # * `private` - Project team owners get OWNER access.
192
- # * `project_private`, `projectPrivate` - Project team members get
193
- # access according to their roles.
194
- # * `public`, `public_read`, `publicRead` - Project team owners get
195
- # OWNER access, and allUsers get READER access.
196
- # * `public_write`, `publicReadWrite` - Project team owners get OWNER
197
- # access, and allUsers get WRITER access.
198
- # @param [String] default_acl Apply a predefined set of default object
199
- # access controls to this bucket.
200
- #
201
- # Acceptable values are:
202
- #
203
- # * `auth`, `auth_read`, `authenticated`, `authenticated_read`,
204
- # `authenticatedRead` - File owner gets OWNER access, and
205
- # allAuthenticatedUsers get READER access.
206
- # * `owner_full`, `bucketOwnerFullControl` - File owner gets OWNER
207
- # access, and project team owners get OWNER access.
208
- # * `owner_read`, `bucketOwnerRead` - File owner gets OWNER access, and
209
- # project team owners get READER access.
210
- # * `private` - File owner gets OWNER access.
211
- # * `project_private`, `projectPrivate` - File owner gets OWNER access,
212
- # and project team members get access according to their roles.
213
- # * `public`, `public_read`, `publicRead` - File owner gets OWNER
214
- # access, and allUsers get READER access.
215
- # @param [String] location The location of the bucket. Object data for
216
- # objects in the bucket resides in physical storage within this region.
217
- # Possible values include `ASIA`, `EU`, and `US`. (See the [developer's
218
- # guide](https://cloud.google.com/storage/docs/bucket-locations) for the
219
- # authoritative list. The default value is `US`.
220
- # @param [String] logging_bucket The destination bucket for the bucket's
221
- # logs. For more information, see [Access
222
- # Logs](https://cloud.google.com/storage/docs/access-logs).
223
- # @param [String] logging_prefix The prefix used to create log object
224
- # names for the bucket. It can be at most 900 characters and must be a
225
- # [valid object
226
- # name](https://cloud.google.com/storage/docs/bucket-naming#objectnames)
227
- # . By default, the object prefix is the name of the bucket for which
228
- # the logs are enabled. For more information, see [Access
229
- # Logs](https://cloud.google.com/storage/docs/access-logs).
230
- # @param [Symbol, String] storage_class Defines how objects in the bucket
231
- # are stored and determines the SLA and the cost of storage. Values
232
- # include `:standard`, `:nearline`, and `:dra` (Durable Reduced
233
- # Availability), as well as the strings returned by
234
- # Bucket#storage_class. For more information, see [Storage
235
- # Classes](https://cloud.google.com/storage/docs/storage-classes). The
236
- # default value is `:standard`.
237
- # @param [Boolean] versioning Whether [Object
238
- # Versioning](https://cloud.google.com/storage/docs/object-versioning)
239
- # is to be enabled for the bucket. The default value is `false`.
240
- # @param [String] website_main The index page returned from a static
241
- # website served from the bucket when a site visitor requests the top
242
- # level directory. For more information, see [How to Host a Static
243
- # Website
244
- # ](https://cloud.google.com/storage/docs/website-configuration#step4).
245
- # @param [String] website_404 The page returned from a static website
246
- # served from the bucket when a site visitor requests a resource that
247
- # does not exist. For more information, see [How to Host a Static
248
- # Website
249
- # ](https://cloud.google.com/storage/docs/website-configuration#step4).
250
- # @yield [bucket] a block for configuring the bucket before it is created
251
- # @yieldparam [Bucket] cors the bucket object to be configured
252
- #
253
- # @return [Gcloud::Storage::Bucket]
254
- #
255
- # @example
256
- # require "gcloud"
257
- #
258
- # gcloud = Gcloud.new
259
- # storage = gcloud.storage
260
- #
261
- # bucket = storage.create_bucket "my-bucket"
262
- #
263
- # @example Configure the bucket in a block:
264
- # require "gcloud"
265
- #
266
- # gcloud = Gcloud.new
267
- # storage = gcloud.storage
268
- #
269
- # bucket = storage.create_bucket "my-bucket" do |b|
270
- # b.website_main = "index.html"
271
- # b.website_404 = "not_found.html"
272
- # b.cors.add_rule ["http://example.org", "https://example.org"],
273
- # "*",
274
- # response_headers: ["X-My-Custom-Header"],
275
- # max_age: 300
276
- # end
277
- #
278
- def create_bucket bucket_name, acl: nil, default_acl: nil,
279
- location: nil, storage_class: nil, logging_bucket: nil,
280
- logging_prefix: nil, website_main: nil,
281
- website_404: nil, versioning: nil
282
- new_bucket = Google::Apis::StorageV1::Bucket.new({
283
- name: bucket_name,
284
- location: location,
285
- storage_class: storage_class_for(storage_class)
286
- }.delete_if { |_, v| v.nil? })
287
- updater = Bucket::Updater.new(new_bucket).tap do |b|
288
- b.logging_bucket = logging_bucket unless logging_bucket.nil?
289
- b.logging_prefix = logging_prefix unless logging_prefix.nil?
290
- b.website_main = website_main unless website_main.nil?
291
- b.website_404 = website_404 unless website_404.nil?
292
- b.versioning = versioning unless versioning.nil?
293
- end
294
- yield updater if block_given?
295
- updater.check_for_mutable_cors!
296
- gapi = service.insert_bucket \
297
- new_bucket, acl: acl_rule(acl), default_acl: acl_rule(default_acl)
298
- Bucket.from_gapi gapi, service
299
- end
300
-
301
- protected
302
-
303
- def acl_rule option_name
304
- Bucket::Acl.predefined_rule_for option_name
305
- end
306
-
307
- def storage_class_for str
308
- { "durable_reduced_availability" => "DURABLE_REDUCED_AVAILABILITY",
309
- "dra" => "DURABLE_REDUCED_AVAILABILITY",
310
- "durable" => "DURABLE_REDUCED_AVAILABILITY",
311
- "nearline" => "NEARLINE",
312
- "standard" => "STANDARD" }[str.to_s.downcase]
313
- end
314
- end
315
- end
316
- end
@@ -1,347 +0,0 @@
1
- # Copyright 2014 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/backoff"
18
- require "google/apis/storage_v1"
19
- require "digest"
20
- require "mime/types"
21
- require "pathname"
22
-
23
- module Gcloud
24
- module Storage
25
- ##
26
- # @private Represents the connection to Storage,
27
- # as well as expose the API calls.
28
- class Service
29
- ##
30
- # Alias to the Google Client API module
31
- API = Google::Apis::StorageV1
32
-
33
- # @private
34
- attr_accessor :project
35
-
36
- # @private
37
- attr_accessor :credentials
38
-
39
- ##
40
- # Creates a new Service instance.
41
- def initialize project, credentials, retries: nil, timeout: nil
42
- @project = project
43
- @credentials = credentials
44
- @credentials = credentials
45
- @service = API::StorageService.new
46
- @service.client_options.application_name = "gcloud-ruby"
47
- @service.client_options.application_version = Gcloud::VERSION
48
- @service.request_options.retries = retries || 3
49
- @service.request_options.timeout_sec = timeout if timeout
50
- @service.authorization = @credentials.client
51
- end
52
-
53
- def service
54
- return mocked_service if mocked_service
55
- @service
56
- end
57
- attr_accessor :mocked_service
58
-
59
- ##
60
- # Retrieves a list of buckets for the given project.
61
- def list_buckets prefix: nil, token: nil, max: nil
62
- service.list_buckets @project, prefix: prefix, page_token: token,
63
- max_results: max
64
- rescue Google::Apis::Error => e
65
- raise Gcloud::Error.from_error(e)
66
- end
67
-
68
- ##
69
- # Retrieves bucket by name.
70
- # Returns Google::Apis::StorageV1::Bucket.
71
- def get_bucket bucket_name
72
- service.get_bucket bucket_name
73
- rescue Google::Apis::Error => e
74
- raise Gcloud::Error.from_error(e)
75
- end
76
-
77
- ##
78
- # Creates a new bucket.
79
- # Returns Google::Apis::StorageV1::Bucket.
80
- def insert_bucket bucket_gapi, options = {}
81
- service.insert_bucket \
82
- @project, bucket_gapi,
83
- predefined_acl: options[:acl],
84
- predefined_default_object_acl: options[:default_acl]
85
- rescue Google::Apis::Error => e
86
- raise Gcloud::Error.from_error(e)
87
- end
88
-
89
- ##
90
- # Updates a bucket, including its ACL metadata.
91
- def patch_bucket bucket_name, bucket_gapi = nil, predefined_acl: nil,
92
- predefined_default_acl: nil
93
- bucket_gapi ||= Google::Apis::StorageV1::Bucket.new
94
- bucket_gapi.acl = nil if predefined_acl
95
- bucket_gapi.default_object_acl = nil if predefined_default_acl
96
-
97
- service.patch_bucket \
98
- bucket_name, bucket_gapi,
99
- predefined_acl: predefined_acl,
100
- predefined_default_object_acl: predefined_default_acl
101
- rescue Google::Apis::Error => e
102
- raise Gcloud::Error.from_error(e)
103
- end
104
-
105
- ##
106
- # Permanently deletes an empty bucket.
107
- def delete_bucket bucket_name
108
- service.delete_bucket bucket_name
109
- rescue Google::Apis::Error => e
110
- raise Gcloud::Error.from_error(e)
111
- end
112
-
113
- ##
114
- # Retrieves a list of ACLs for the given bucket.
115
- def list_bucket_acls bucket_name
116
- service.list_bucket_access_controls bucket_name
117
- rescue Google::Apis::Error => e
118
- raise Gcloud::Error.from_error(e)
119
- end
120
-
121
- ##
122
- # Creates a new bucket ACL.
123
- def insert_bucket_acl bucket_name, entity, role
124
- new_acl = Google::Apis::StorageV1::BucketAccessControl.new \
125
- entity: entity, role: role
126
- service.insert_bucket_access_control bucket_name, new_acl
127
- rescue Google::Apis::Error => e
128
- raise Gcloud::Error.from_error(e)
129
- end
130
-
131
- ##
132
- # Permanently deletes a bucket ACL.
133
- def delete_bucket_acl bucket_name, entity
134
- service.delete_bucket_access_control bucket_name, entity
135
- rescue Google::Apis::Error => e
136
- raise Gcloud::Error.from_error(e)
137
- end
138
-
139
- ##
140
- # Retrieves a list of default ACLs for the given bucket.
141
- def list_default_acls bucket_name
142
- service.list_default_object_access_controls bucket_name
143
- rescue Google::Apis::Error => e
144
- raise Gcloud::Error.from_error(e)
145
- end
146
-
147
- ##
148
- # Creates a new default ACL.
149
- def insert_default_acl bucket_name, entity, role
150
- new_acl = Google::Apis::StorageV1::ObjectAccessControl.new \
151
- entity: entity, role: role
152
- service.insert_default_object_access_control bucket_name, new_acl
153
- rescue Google::Apis::Error => e
154
- raise Gcloud::Error.from_error(e)
155
- end
156
-
157
- ##
158
- # Permanently deletes a default ACL.
159
- def delete_default_acl bucket_name, entity
160
- service.delete_default_object_access_control bucket_name, entity
161
- rescue Google::Apis::Error => e
162
- raise Gcloud::Error.from_error(e)
163
- end
164
-
165
- ##
166
- # Retrieves a list of files matching the criteria.
167
- def list_files bucket_name, options = {}
168
- service.list_objects \
169
- bucket_name, delimiter: options[:delimiter],
170
- max_results: options[:max], page_token: options[:token],
171
- prefix: options[:prefix], versions: options[:versions]
172
- rescue Google::Apis::Error => e
173
- raise Gcloud::Error.from_error(e)
174
- end
175
-
176
- ##
177
- # Inserts a new file for the given bucket
178
- def insert_file bucket_name, source, path = nil, acl: nil,
179
- cache_control: nil, content_disposition: nil,
180
- content_encoding: nil, content_language: nil,
181
- content_type: nil, crc32c: nil, md5: nil, metadata: nil,
182
- key: nil, key_sha256: nil
183
- file_obj = Google::Apis::StorageV1::Object.new \
184
- cache_control: cache_control, content_type: content_type,
185
- content_disposition: content_disposition, md5_hash: md5,
186
- content_encoding: content_encoding, crc32c: crc32c,
187
- content_language: content_language, metadata: metadata
188
- content_type ||= mime_type_for(Pathname(source).to_path)
189
- service.insert_object \
190
- bucket_name, file_obj,
191
- name: path, predefined_acl: acl, upload_source: source,
192
- content_encoding: content_encoding, content_type: content_type,
193
- options: key_options(key: key, key_sha256: key_sha256)
194
- rescue Google::Apis::Error => e
195
- raise Gcloud::Error.from_error(e)
196
- end
197
-
198
- ##
199
- # Retrieves an object or its metadata.
200
- def get_file bucket_name, file_path, generation: nil, key: nil,
201
- key_sha256: nil
202
- service.get_object \
203
- bucket_name, file_path,
204
- generation: generation,
205
- options: key_options(key: key, key_sha256: key_sha256)
206
- rescue Google::Apis::Error => e
207
- raise Gcloud::Error.from_error(e)
208
- end
209
-
210
- ## Copy a file from source bucket/object to a
211
- # destination bucket/object.
212
- def copy_file source_bucket_name, source_file_path,
213
- destination_bucket_name, destination_file_path, options = {}
214
- service.copy_object \
215
- source_bucket_name, source_file_path,
216
- destination_bucket_name, destination_file_path,
217
- destination_predefined_acl: options[:acl],
218
- source_generation: options[:generation],
219
- options: key_options(key: options[:key],
220
- key_sha256: options[:key_sha256])
221
- rescue Google::Apis::Error => e
222
- raise Gcloud::Error.from_error(e)
223
- end
224
-
225
- ##
226
- # Download contents of a file.
227
- def download_file bucket_name, file_path, target_path, generation: nil,
228
- key: nil, key_sha256: nil
229
- service.get_object \
230
- bucket_name, file_path,
231
- download_dest: target_path, generation: generation,
232
- options: key_options(key: key, key_sha256: key_sha256)
233
- rescue Google::Apis::Error => e
234
- raise Gcloud::Error.from_error(e)
235
- end
236
-
237
- ##
238
- # Updates a file's metadata.
239
- def patch_file bucket_name, file_path, file_gapi = nil,
240
- predefined_acl: nil
241
- file_gapi ||= Google::Apis::StorageV1::Object.new
242
- service.patch_object \
243
- bucket_name, file_path, file_gapi,
244
- predefined_acl: predefined_acl
245
- rescue Google::Apis::Error => e
246
- raise Gcloud::Error.from_error(e)
247
- end
248
-
249
- ##
250
- # Permanently deletes a file.
251
- def delete_file bucket_name, file_path
252
- service.delete_object bucket_name, file_path
253
- rescue Google::Apis::Error => e
254
- raise Gcloud::Error.from_error(e)
255
- end
256
-
257
- ##
258
- # Retrieves a list of ACLs for the given file.
259
- def list_file_acls bucket_name, file_name
260
- service.list_object_access_controls bucket_name, file_name
261
- rescue Google::Apis::Error => e
262
- raise Gcloud::Error.from_error(e)
263
- end
264
-
265
- ##
266
- # Creates a new file ACL.
267
- def insert_file_acl bucket_name, file_name, entity, role, options = {}
268
- new_acl = Google::Apis::StorageV1::ObjectAccessControl.new \
269
- entity: entity, role: role
270
- service.insert_object_access_control \
271
- bucket_name, file_name, new_acl, generation: options[:generation]
272
- rescue Google::Apis::Error => e
273
- raise Gcloud::Error.from_error(e)
274
- end
275
-
276
- ##
277
- # Permanently deletes a file ACL.
278
- def delete_file_acl bucket_name, file_name, entity, options = {}
279
- service.delete_object_access_control \
280
- bucket_name, file_name, entity, generation: options[:generation]
281
- rescue Google::Apis::Error => e
282
- raise Gcloud::Error.from_error(e)
283
- end
284
-
285
- ##
286
- # Retrieves the mime-type for a file path.
287
- # An empty string is returned if no mime-type can be found.
288
- def mime_type_for path
289
- MIME::Types.of(path).first.to_s
290
- end
291
-
292
- # @private
293
- def inspect
294
- "#{self.class}(#{@project})"
295
- end
296
-
297
- protected
298
-
299
- def key_options key: nil, key_sha256: nil
300
- options = {}
301
- if key
302
- headers = {}
303
- headers["x-goog-encryption-algorithm"] = "AES256"
304
- headers["x-goog-encryption-key"] = Base64.strict_encode64 key
305
- key_sha256 ||= Digest::SHA256.digest key
306
- headers["x-goog-encryption-key-sha256"] = \
307
- Base64.strict_encode64 key_sha256
308
- options[:header] = headers
309
- end
310
- options
311
- end
312
-
313
- def patch_bucket_request options = {}
314
- {
315
- "cors" => options[:cors],
316
- "logging" => logging_config(options),
317
- "versioning" => versioning_config(options[:versioning]),
318
- "website" => website_config(options),
319
- "acl" => options[:acl],
320
- "defaultObjectAcl" => options[:default_acl]
321
- }.delete_if { |_, v| v.nil? }
322
- end
323
-
324
- def versioning_config enabled
325
- { "enabled" => enabled } unless enabled.nil?
326
- end
327
-
328
- def logging_config options
329
- bucket = options[:logging_bucket]
330
- prefix = options[:logging_prefix]
331
- {
332
- log_bucket: bucket,
333
- log_object_prefix: prefix
334
- }.delete_if { |_, v| v.nil? } if bucket || prefix
335
- end
336
-
337
- def website_config options
338
- website_main = options[:website_main]
339
- website_404 = options[:website_404]
340
- {
341
- main_page_suffix: website_main,
342
- not_found_page: website_404
343
- }.delete_if { |_, v| v.nil? } if website_main || website_404
344
- end
345
- end
346
- end
347
- end