google-cloud-resource_manager 0.30.3 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b15b1f5fe2a66250875ff2e25ad3c7c24c459b18b129b9010fd489774f8d4511
4
- data.tar.gz: c304b85eabd473f1c9adeddb10cfca5bb9fc070d827a38218098f362302c9d19
3
+ metadata.gz: 4b2b524b149206b6776eb5dd65e24833d2bd1ff1643af4d37229bebc2bd42ecd
4
+ data.tar.gz: 4b8556c72c3182be9f3ba256786945d263c838c6b687b37a7dbe3731cd697e92
5
5
  SHA512:
6
- metadata.gz: 7702f9223683a072c7fe99db3b067afe7c14d647634ed312103d6dea31e4f6328cb47724124f8825f93bda64d7d627df21721ead6d6547dd434e45d2c12ad4d8
7
- data.tar.gz: 5eed5e29dfbfad2d3de78af0bd07d1dd8ac8ba60e4f96ed6ec3bb7e25c813c242d023536416cb02aed11ce51030ddb4a252a57178e6420c3792de72e2e706265
6
+ metadata.gz: 3ef341093f4fd54a886d916c528ef32091f259feb2778861cb60459d14c6f2ca920002b96a2eb49def80a15dc24a3fe1d48fc2d4d8ea347fef57e148cd8a7e15
7
+ data.tar.gz: 4e66a0d717be7f176b3b807b9ec30e74875efb06a525c726dd832fc09a44a494406f2eb3ef95ce6677d18253aa0233ca3a7396bde59c245edad67f73cf61cb8b
@@ -1,5 +1,13 @@
1
1
  # Release History
2
2
 
3
+ ### 0.31.0 / 2019-02-12
4
+
5
+ * Add parent resoure to `Project`:
6
+ * Add `Project#parent`.
7
+ * Add `parent` optional named argument to `Manager#create_project`.
8
+ * Add `Resource` class.
9
+ * Add `Manager#resource` convenience method.
10
+
3
11
  ### 0.30.3 / 2018-09-20
4
12
 
5
13
  * Update documentation.
@@ -17,6 +17,7 @@ require "google/cloud/errors"
17
17
  require "google/cloud/resource_manager/credentials"
18
18
  require "google/cloud/resource_manager/service"
19
19
  require "google/cloud/resource_manager/project"
20
+ require "google/cloud/resource_manager/resource"
20
21
 
21
22
  module Google
22
23
  module Cloud
@@ -166,6 +167,15 @@ module Google
166
167
  # <code>([a-z]([-a-z0-9]*[a-z0-9])?)?</code>.
167
168
  #
168
169
  # No more than 256 labels can be associated with a given resource.
170
+ # @param [Resource] parent A parent Resource. Optional.
171
+ #
172
+ # Supported parent types include "organization" and "folder". Once
173
+ # set, the parent can be updated but cannot be cleared.
174
+ #
175
+ # The end user must have the `resourcemanager.projects.create`
176
+ # permission on the parent.
177
+ #
178
+ # (See {#resource} and {Resource}.)
169
179
  #
170
180
  # @return [Google::Cloud::ResourceManager::Project]
171
181
  #
@@ -182,8 +192,16 @@ module Google
182
192
  # project = resource_manager.create_project "tokyo-rain-123",
183
193
  # name: "Todos Development", labels: {env: :development}
184
194
  #
185
- def create_project project_id, name: nil, labels: nil
186
- gapi = service.create_project project_id, name, labels
195
+ # @example A project can also be created with a `name` and `parent`:
196
+ # require "google/cloud/resource_manager"
197
+ #
198
+ # resource_manager = Google::Cloud::ResourceManager.new
199
+ # folder = resource_manager.resource "folder", "1234"
200
+ # project = resource_manager.create_project "tokyo-rain-123",
201
+ # name: "Todos Development", parent: folder
202
+ #
203
+ def create_project project_id, name: nil, labels: nil, parent: nil
204
+ gapi = service.create_project project_id, name, labels, parent
187
205
  Project.from_gapi gapi, service
188
206
  end
189
207
 
@@ -241,6 +259,27 @@ module Google
241
259
  true
242
260
  end
243
261
 
262
+ ##
263
+ # Create a Resource object. (See {Resource}.)
264
+ #
265
+ # @param [String] type The resource type this id is for. At present, the
266
+ # valid types are: "organization" and "folder".
267
+ # @param [String] id The type-specific id. This should correspond to the
268
+ # id used in the type-specific API's.
269
+ # @return [resource]
270
+ #
271
+ # @example
272
+ # require "google/cloud/resource_manager"
273
+ #
274
+ # resource_manager = Google::Cloud::ResourceManager.new
275
+ # project = resource_manager.project "tokyo-rain-123"
276
+ # folder = resource_manager.resource "folder", "1234"
277
+ # project.parent = folder
278
+ #
279
+ def resource type, id
280
+ Resource.new type, id
281
+ end
282
+
244
283
  protected
245
284
 
246
285
  ##
@@ -17,6 +17,7 @@ require "time"
17
17
  require "google/cloud/resource_manager/project/list"
18
18
  require "google/cloud/resource_manager/project/updater"
19
19
  require "google/cloud/resource_manager/policy"
20
+ require "google/cloud/resource_manager/resource"
20
21
 
21
22
  module Google
22
23
  module Cloud
@@ -164,6 +165,51 @@ module Google
164
165
  @gapi = service.update_project @gapi
165
166
  end
166
167
 
168
+ ##
169
+ # An optional reference to a parent Resource.
170
+ #
171
+ # Supported parent types include "organization" and "folder". Once set,
172
+ # the parent can be updated but cannot be cleared.
173
+ #
174
+ # The resource object returned is read-only and cannot be changed. A new
175
+ # resource object can be set using the `#parent=` or `#update` methods.
176
+ # (See {Resource} and {Manager#resource}.)
177
+ #
178
+ # @return [nil, Resource] the reference to a parent Resource (read-only)
179
+ #
180
+ def parent
181
+ return nil if @gapi.parent.nil?
182
+ Resource.from_gapi(@gapi.parent).freeze
183
+ end
184
+
185
+ ##
186
+ # Updates the reference to a parent with a new Resource.
187
+ #
188
+ # Supported parent types include "organization" and "folder". Once set,
189
+ # the parent can be updated but cannot be cleared.
190
+ #
191
+ # The end user must have the `resourcemanager.projects.create`
192
+ # permission on the parent.
193
+ #
194
+ # (See {Resource} and {Manager#resource}.)
195
+ #
196
+ # @param [Resource] new_parent A new parent Resource.
197
+ #
198
+ # @example
199
+ # require "google/cloud/resource_manager"
200
+ #
201
+ # resource_manager = Google::Cloud::ResourceManager.new
202
+ # project = resource_manager.project "tokyo-rain-123"
203
+ # folder = resource_manager.resource "folder", "1234"
204
+ # project.parent = folder
205
+ #
206
+ def parent= new_parent
207
+ raise ArgumentError, "new_parent is required" if new_parent.nil?
208
+ ensure_service!
209
+ @gapi.parent = new_parent.to_gapi
210
+ @gapi = service.update_project @gapi
211
+ end
212
+
167
213
  ##
168
214
  # The time that this project was created.
169
215
  #
@@ -230,8 +276,10 @@ module Google
230
276
  #
231
277
  # resource_manager = Google::Cloud::ResourceManager.new
232
278
  # project = resource_manager.project "tokyo-rain-123"
279
+ # folder = resource_manager.resource "folder", "1234"
233
280
  # project.update do |p|
234
281
  # p.name = "My Project"
282
+ # p.parent = folder
235
283
  # p.labels["env"] = "production"
236
284
  # end
237
285
  #
@@ -117,6 +117,32 @@ module Google
117
117
  gapi.labels = new_labels
118
118
  end
119
119
 
120
+ ##
121
+ # Updates the reference to a parent with a new Resource.
122
+ #
123
+ # Supported parent types include "organization" and "folder". Once
124
+ # set, the parent can be updated but cannot be cleared.
125
+ #
126
+ # The end user must have the `resourcemanager.projects.create`
127
+ # permission on the parent.
128
+ #
129
+ # (See {Resource} and {Manager#resource}.)
130
+ #
131
+ # @param [Resource] new_parent A new parent Resource.
132
+ #
133
+ # @example
134
+ # require "google/cloud/resource_manager"
135
+ #
136
+ # resource_manager = Google::Cloud::ResourceManager.new
137
+ # project = resource_manager.project "tokyo-rain-123"
138
+ # folder = resource_manager.resource "folder", "1234"
139
+ # project.parent = folder
140
+ #
141
+ def parent= new_parent
142
+ raise ArgumentError, "new_parent is required" if new_parent.nil?
143
+ gapi.parent = new_parent.to_gapi
144
+ end
145
+
120
146
  ##
121
147
  # @private Create an Updater object.
122
148
  def self.from_project project
@@ -0,0 +1,119 @@
1
+ # Copyright 2019 Google LLC
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
+ # https://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
+ module Google
17
+ module Cloud
18
+ module ResourceManager
19
+ ##
20
+ # # Resource
21
+ #
22
+ # A container to reference an id for any resource type. A `resource` in
23
+ # Google Cloud Platform is a generic term for something a developer may
24
+ # want to interact with through an API. Some examples are an App Engine
25
+ # app, a Compute Engine instance, a Cloud SQL database, and so on. (See
26
+ # {Manager#resource}.)
27
+ #
28
+ # @example
29
+ # require "google/cloud/resource_manager"
30
+ #
31
+ # resource_manager = Google::Cloud::ResourceManager.new
32
+ # project = resource_manager.project "tokyo-rain-123"
33
+ # folder = Google::Cloud::ResourceManager::Resource.new "folder", "1234"
34
+ # project.parent = folder
35
+ #
36
+ class Resource
37
+ ##
38
+ # Create a Resource object.
39
+ #
40
+ # @param [String] type The resource type this id is for. At present, the
41
+ # valid types are: "organization" and "folder".
42
+ # @param [String] id The type-specific id. This should correspond to the
43
+ # id used in the type-specific API's.
44
+ def initialize type, id
45
+ raise ArgumentError, "type is required" if type.nil?
46
+ raise ArgumentError, "id is required" if id.nil?
47
+
48
+ @type = type
49
+ @id = id
50
+ end
51
+
52
+ ##
53
+ # Required field representing the resource type this id is for. At
54
+ # present, the valid types are: "organization" and "folder".
55
+ # @return [String]
56
+ attr_accessor :type
57
+
58
+ ##
59
+ # Required field for the type-specific id. This should correspond to the
60
+ # id used in the type-specific API's.
61
+ # @return [String]
62
+ attr_accessor :id
63
+
64
+ ##
65
+ # Checks if the type is `folder`.
66
+ # @return [Boolean]
67
+ def folder?
68
+ return false if type.nil?
69
+ "folder".casecmp(type).zero?
70
+ end
71
+
72
+ ##
73
+ # Checks if the type is `organization`.
74
+ # @return [Boolean]
75
+ def organization?
76
+ return false if type.nil?
77
+ "organization".casecmp(type).zero?
78
+ end
79
+
80
+ ##
81
+ # Create a Resource object with type `folder`.
82
+ #
83
+ # @param [String] id The type-specific id. This should correspond to the
84
+ # id used in the type-specific API's.
85
+ # @return [Resource]
86
+ def self.folder id
87
+ new "folder", id
88
+ end
89
+
90
+ ##
91
+ # Create a Resource object with type `organization`.
92
+ #
93
+ # @param [String] id The type-specific id. This should correspond to the
94
+ # id used in the type-specific API's.
95
+ # @return [Resource]
96
+ def self.organization id
97
+ new "organization", id
98
+ end
99
+
100
+ ##
101
+ # @private Convert the Resource to a Google API Client ResourceId
102
+ # object.
103
+ def to_gapi
104
+ Google::Apis::CloudresourcemanagerV1::ResourceId.new(
105
+ type: type,
106
+ id: id
107
+ )
108
+ end
109
+
110
+ ##
111
+ # @private Create new Resource from a Google API Client ResourceId
112
+ # object.
113
+ def self.from_gapi gapi
114
+ new gapi.type, gapi.id
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -74,9 +74,11 @@ module Google
74
74
 
75
75
  ##
76
76
  # Returns API::Project
77
- def create_project project_id, name, labels
78
- project_attrs = { project_id: project_id, name: name,
79
- labels: labels }.delete_if { |_, v| v.nil? }
77
+ def create_project project_id, name, labels, parent
78
+ parent = parent.to_gapi unless parent.nil?
79
+ project_attrs = {
80
+ project_id: project_id, name: name, labels: labels, parent: parent
81
+ }.delete_if { |_, v| v.nil? }
80
82
  execute { service.create_project API::Project.new(project_attrs) }
81
83
  end
82
84
 
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module ResourceManager
19
- VERSION = "0.30.3".freeze
19
+ VERSION = "0.31.0".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-resource_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.3
4
+ version: 0.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-09-21 00:00:00.000000000 Z
12
+ date: 2019-02-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -43,16 +43,22 @@ dependencies:
43
43
  name: googleauth
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: 0.6.2
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: 0.10.0
49
52
  type: :runtime
50
53
  prerelease: false
51
54
  version_requirements: !ruby/object:Gem::Requirement
52
55
  requirements:
53
- - - "~>"
56
+ - - ">="
54
57
  - !ruby/object:Gem::Version
55
58
  version: 0.6.2
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.0
56
62
  - !ruby/object:Gem::Dependency
57
63
  name: minitest
58
64
  requirement: !ruby/object:Gem::Requirement
@@ -143,14 +149,14 @@ dependencies:
143
149
  requirements:
144
150
  - - "~>"
145
151
  - !ruby/object:Gem::Version
146
- version: 0.50.0
152
+ version: 0.61.0
147
153
  type: :development
148
154
  prerelease: false
149
155
  version_requirements: !ruby/object:Gem::Requirement
150
156
  requirements:
151
157
  - - "~>"
152
158
  - !ruby/object:Gem::Version
153
- version: 0.50.0
159
+ version: 0.61.0
154
160
  - !ruby/object:Gem::Dependency
155
161
  name: simplecov
156
162
  requirement: !ruby/object:Gem::Requirement
@@ -219,6 +225,7 @@ files:
219
225
  - lib/google/cloud/resource_manager/project.rb
220
226
  - lib/google/cloud/resource_manager/project/list.rb
221
227
  - lib/google/cloud/resource_manager/project/updater.rb
228
+ - lib/google/cloud/resource_manager/resource.rb
222
229
  - lib/google/cloud/resource_manager/service.rb
223
230
  - lib/google/cloud/resource_manager/version.rb
224
231
  homepage: https://github.com/googleapis/google-cloud-ruby/tree/master/google-cloud-resource_manager
@@ -241,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
248
  version: '0'
242
249
  requirements: []
243
250
  rubyforge_project:
244
- rubygems_version: 2.7.7
251
+ rubygems_version: 2.7.6
245
252
  signing_key:
246
253
  specification_version: 4
247
254
  summary: API Client library for Google Cloud Resource Manager