google-cloud-recommender-v1 0.5.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,3 +33,6 @@ module Google
33
33
  end
34
34
  end
35
35
  end
36
+
37
+ helper_path = ::File.join __dir__, "v1", "_helpers.rb"
38
+ require "google/cloud/recommender/v1/_helpers" if ::File.file? helper_path
@@ -63,25 +63,43 @@ module Google
63
63
  parent_config = while namespace.any?
64
64
  parent_name = namespace.join "::"
65
65
  parent_const = const_get parent_name
66
- break parent_const.configure if parent_const&.respond_to? :configure
66
+ break parent_const.configure if parent_const.respond_to? :configure
67
67
  namespace.pop
68
68
  end
69
69
  default_config = Client::Configuration.new parent_config
70
70
 
71
+ default_config.rpcs.list_insights.timeout = 60.0
72
+ default_config.rpcs.list_insights.retry_policy = {
73
+ initial_delay: 0.1,
74
+ max_delay: 60.0,
75
+ multiplier: 1.3,
76
+ retry_codes: [4, 14]
77
+ }
78
+
79
+ default_config.rpcs.get_insight.timeout = 60.0
80
+ default_config.rpcs.get_insight.retry_policy = {
81
+ initial_delay: 0.1,
82
+ max_delay: 60.0,
83
+ multiplier: 1.3,
84
+ retry_codes: [4, 14]
85
+ }
86
+
87
+ default_config.rpcs.mark_insight_accepted.timeout = 60.0
88
+
71
89
  default_config.rpcs.list_recommendations.timeout = 60.0
72
90
  default_config.rpcs.list_recommendations.retry_policy = {
73
91
  initial_delay: 0.1,
74
- max_delay: 60.0,
75
- multiplier: 1.3,
76
- retry_codes: [4, 14]
92
+ max_delay: 60.0,
93
+ multiplier: 1.3,
94
+ retry_codes: [4, 14]
77
95
  }
78
96
 
79
97
  default_config.rpcs.get_recommendation.timeout = 60.0
80
98
  default_config.rpcs.get_recommendation.retry_policy = {
81
99
  initial_delay: 0.1,
82
- max_delay: 60.0,
83
- multiplier: 1.3,
84
- retry_codes: [4, 14]
100
+ max_delay: 60.0,
101
+ multiplier: 1.3,
102
+ retry_codes: [4, 14]
85
103
  }
86
104
 
87
105
  default_config.rpcs.mark_recommendation_claimed.timeout = 60.0
@@ -151,7 +169,13 @@ module Google
151
169
 
152
170
  # Create credentials
153
171
  credentials = @config.credentials
154
- credentials ||= Credentials.default scope: @config.scope
172
+ # Use self-signed JWT if the scope and endpoint are unchanged from default,
173
+ # but only if the default endpoint does not have a region prefix.
174
+ enable_self_signed_jwt = @config.scope == Client.configure.scope &&
175
+ @config.endpoint == Client.configure.endpoint &&
176
+ !@config.endpoint.split(".").first.include?("-")
177
+ credentials ||= Credentials.default scope: @config.scope,
178
+ enable_self_signed_jwt: enable_self_signed_jwt
155
179
  if credentials.is_a?(String) || credentials.is_a?(Hash)
156
180
  credentials = Credentials.new credentials, scope: @config.scope
157
181
  end
@@ -197,6 +221,8 @@ module Google
197
221
  #
198
222
  # LOCATION here refers to GCP Locations:
199
223
  # https://cloud.google.com/about/locations/
224
+ # INSIGHT_TYPE_ID refers to supported insight types:
225
+ # https://cloud.google.com/recommender/docs/insights/insight-types.)
200
226
  # @param page_size [::Integer]
201
227
  # Optional. The maximum number of results to return from this request. Non-positive
202
228
  # values are ignored. If not specified, the server will determine the number
@@ -428,6 +454,8 @@ module Google
428
454
  #
429
455
  # LOCATION here refers to GCP Locations:
430
456
  # https://cloud.google.com/about/locations/
457
+ # RECOMMENDER_ID refers to supported recommenders:
458
+ # https://cloud.google.com/recommender/docs/recommenders.
431
459
  # @param page_size [::Integer]
432
460
  # Optional. The maximum number of results to return from this request. Non-positive
433
461
  # values are ignored. If not specified, the server will determine the number
@@ -888,14 +916,14 @@ module Google
888
916
 
889
917
  config_attr :endpoint, "recommender.googleapis.com", ::String
890
918
  config_attr :credentials, nil do |value|
891
- allowed = [::String, ::Hash, ::Proc, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
919
+ allowed = [::String, ::Hash, ::Proc, ::Symbol, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
892
920
  allowed += [::GRPC::Core::Channel, ::GRPC::Core::ChannelCredentials] if defined? ::GRPC
893
921
  allowed.any? { |klass| klass === value }
894
922
  end
895
923
  config_attr :scope, nil, ::String, ::Array, nil
896
924
  config_attr :lib_name, nil, ::String, nil
897
925
  config_attr :lib_version, nil, ::String, nil
898
- config_attr(:channel_args, { "grpc.service_config_disable_resolution"=>1 }, ::Hash, nil)
926
+ config_attr(:channel_args, { "grpc.service_config_disable_resolution" => 1 }, ::Hash, nil)
899
927
  config_attr :interceptors, nil, ::Array, nil
900
928
  config_attr :timeout, nil, ::Numeric, nil
901
929
  config_attr :metadata, nil, ::Hash, nil
@@ -916,7 +944,7 @@ module Google
916
944
  def rpcs
917
945
  @rpcs ||= begin
918
946
  parent_rpcs = nil
919
- parent_rpcs = @parent_config.rpcs if defined?(@parent_config) && @parent_config&.respond_to?(:rpcs)
947
+ parent_rpcs = @parent_config.rpcs if defined?(@parent_config) && @parent_config.respond_to?(:rpcs)
920
948
  Rpcs.new parent_rpcs
921
949
  end
922
950
  end
@@ -928,7 +956,7 @@ module Google
928
956
  # Each configuration object is of type `Gapic::Config::Method` and includes
929
957
  # the following configuration fields:
930
958
  #
931
- # * `timeout` (*type:* `Numeric`) - The call timeout in milliseconds
959
+ # * `timeout` (*type:* `Numeric`) - The call timeout in seconds
932
960
  # * `metadata` (*type:* `Hash{Symbol=>String}`) - Additional gRPC headers
933
961
  # * `retry_policy (*type:* `Hash`) - The retry policy. The policy fields
934
962
  # include the following keys:
@@ -982,21 +1010,21 @@ module Google
982
1010
 
983
1011
  # @private
984
1012
  def initialize parent_rpcs = nil
985
- list_insights_config = parent_rpcs&.list_insights if parent_rpcs&.respond_to? :list_insights
1013
+ list_insights_config = parent_rpcs.list_insights if parent_rpcs.respond_to? :list_insights
986
1014
  @list_insights = ::Gapic::Config::Method.new list_insights_config
987
- get_insight_config = parent_rpcs&.get_insight if parent_rpcs&.respond_to? :get_insight
1015
+ get_insight_config = parent_rpcs.get_insight if parent_rpcs.respond_to? :get_insight
988
1016
  @get_insight = ::Gapic::Config::Method.new get_insight_config
989
- mark_insight_accepted_config = parent_rpcs&.mark_insight_accepted if parent_rpcs&.respond_to? :mark_insight_accepted
1017
+ mark_insight_accepted_config = parent_rpcs.mark_insight_accepted if parent_rpcs.respond_to? :mark_insight_accepted
990
1018
  @mark_insight_accepted = ::Gapic::Config::Method.new mark_insight_accepted_config
991
- list_recommendations_config = parent_rpcs&.list_recommendations if parent_rpcs&.respond_to? :list_recommendations
1019
+ list_recommendations_config = parent_rpcs.list_recommendations if parent_rpcs.respond_to? :list_recommendations
992
1020
  @list_recommendations = ::Gapic::Config::Method.new list_recommendations_config
993
- get_recommendation_config = parent_rpcs&.get_recommendation if parent_rpcs&.respond_to? :get_recommendation
1021
+ get_recommendation_config = parent_rpcs.get_recommendation if parent_rpcs.respond_to? :get_recommendation
994
1022
  @get_recommendation = ::Gapic::Config::Method.new get_recommendation_config
995
- mark_recommendation_claimed_config = parent_rpcs&.mark_recommendation_claimed if parent_rpcs&.respond_to? :mark_recommendation_claimed
1023
+ mark_recommendation_claimed_config = parent_rpcs.mark_recommendation_claimed if parent_rpcs.respond_to? :mark_recommendation_claimed
996
1024
  @mark_recommendation_claimed = ::Gapic::Config::Method.new mark_recommendation_claimed_config
997
- mark_recommendation_succeeded_config = parent_rpcs&.mark_recommendation_succeeded if parent_rpcs&.respond_to? :mark_recommendation_succeeded
1025
+ mark_recommendation_succeeded_config = parent_rpcs.mark_recommendation_succeeded if parent_rpcs.respond_to? :mark_recommendation_succeeded
998
1026
  @mark_recommendation_succeeded = ::Gapic::Config::Method.new mark_recommendation_succeeded_config
999
- mark_recommendation_failed_config = parent_rpcs&.mark_recommendation_failed if parent_rpcs&.respond_to? :mark_recommendation_failed
1027
+ mark_recommendation_failed_config = parent_rpcs.mark_recommendation_failed if parent_rpcs.respond_to? :mark_recommendation_failed
1000
1028
  @mark_recommendation_failed = ::Gapic::Config::Method.new mark_recommendation_failed_config
1001
1029
 
1002
1030
  yield self if block_given?
@@ -27,81 +27,309 @@ module Google
27
27
  ##
28
28
  # Create a fully-qualified Insight resource string.
29
29
  #
30
- # The resource will be in the following format:
30
+ # @overload insight_path(project:, location:, insight_type:, insight:)
31
+ # The resource will be in the following format:
31
32
  #
32
- # `projects/{project}/locations/{location}/insightTypes/{insight_type}/insights/{insight}`
33
+ # `projects/{project}/locations/{location}/insightTypes/{insight_type}/insights/{insight}`
33
34
  #
34
- # @param project [String]
35
- # @param location [String]
36
- # @param insight_type [String]
37
- # @param insight [String]
35
+ # @param project [String]
36
+ # @param location [String]
37
+ # @param insight_type [String]
38
+ # @param insight [String]
39
+ #
40
+ # @overload insight_path(billing_account:, location:, insight_type:, insight:)
41
+ # The resource will be in the following format:
42
+ #
43
+ # `billingAccounts/{billing_account}/locations/{location}/insightTypes/{insight_type}/insights/{insight}`
44
+ #
45
+ # @param billing_account [String]
46
+ # @param location [String]
47
+ # @param insight_type [String]
48
+ # @param insight [String]
49
+ #
50
+ # @overload insight_path(folder:, location:, insight_type:, insight:)
51
+ # The resource will be in the following format:
52
+ #
53
+ # `folders/{folder}/locations/{location}/insightTypes/{insight_type}/insights/{insight}`
54
+ #
55
+ # @param folder [String]
56
+ # @param location [String]
57
+ # @param insight_type [String]
58
+ # @param insight [String]
59
+ #
60
+ # @overload insight_path(organization:, location:, insight_type:, insight:)
61
+ # The resource will be in the following format:
62
+ #
63
+ # `organizations/{organization}/locations/{location}/insightTypes/{insight_type}/insights/{insight}`
64
+ #
65
+ # @param organization [String]
66
+ # @param location [String]
67
+ # @param insight_type [String]
68
+ # @param insight [String]
38
69
  #
39
70
  # @return [::String]
40
- def insight_path project:, location:, insight_type:, insight:
41
- raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
42
- raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
43
- raise ::ArgumentError, "insight_type cannot contain /" if insight_type.to_s.include? "/"
71
+ def insight_path **args
72
+ resources = {
73
+ "insight:insight_type:location:project" => (proc do |project:, location:, insight_type:, insight:|
74
+ raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
75
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
76
+ raise ::ArgumentError, "insight_type cannot contain /" if insight_type.to_s.include? "/"
77
+
78
+ "projects/#{project}/locations/#{location}/insightTypes/#{insight_type}/insights/#{insight}"
79
+ end),
80
+ "billing_account:insight:insight_type:location" => (proc do |billing_account:, location:, insight_type:, insight:|
81
+ raise ::ArgumentError, "billing_account cannot contain /" if billing_account.to_s.include? "/"
82
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
83
+ raise ::ArgumentError, "insight_type cannot contain /" if insight_type.to_s.include? "/"
84
+
85
+ "billingAccounts/#{billing_account}/locations/#{location}/insightTypes/#{insight_type}/insights/#{insight}"
86
+ end),
87
+ "folder:insight:insight_type:location" => (proc do |folder:, location:, insight_type:, insight:|
88
+ raise ::ArgumentError, "folder cannot contain /" if folder.to_s.include? "/"
89
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
90
+ raise ::ArgumentError, "insight_type cannot contain /" if insight_type.to_s.include? "/"
91
+
92
+ "folders/#{folder}/locations/#{location}/insightTypes/#{insight_type}/insights/#{insight}"
93
+ end),
94
+ "insight:insight_type:location:organization" => (proc do |organization:, location:, insight_type:, insight:|
95
+ raise ::ArgumentError, "organization cannot contain /" if organization.to_s.include? "/"
96
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
97
+ raise ::ArgumentError, "insight_type cannot contain /" if insight_type.to_s.include? "/"
98
+
99
+ "organizations/#{organization}/locations/#{location}/insightTypes/#{insight_type}/insights/#{insight}"
100
+ end)
101
+ }
44
102
 
45
- "projects/#{project}/locations/#{location}/insightTypes/#{insight_type}/insights/#{insight}"
103
+ resource = resources[args.keys.sort.join(":")]
104
+ raise ::ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
105
+ resource.call(**args)
46
106
  end
47
107
 
48
108
  ##
49
109
  # Create a fully-qualified InsightType resource string.
50
110
  #
51
- # The resource will be in the following format:
111
+ # @overload insight_type_path(project:, location:, insight_type:)
112
+ # The resource will be in the following format:
52
113
  #
53
- # `projects/{project}/locations/{location}/insightTypes/{insight_type}`
114
+ # `projects/{project}/locations/{location}/insightTypes/{insight_type}`
54
115
  #
55
- # @param project [String]
56
- # @param location [String]
57
- # @param insight_type [String]
116
+ # @param project [String]
117
+ # @param location [String]
118
+ # @param insight_type [String]
119
+ #
120
+ # @overload insight_type_path(billing_account:, location:, insight_type:)
121
+ # The resource will be in the following format:
122
+ #
123
+ # `billingAccounts/{billing_account}/locations/{location}/insightTypes/{insight_type}`
124
+ #
125
+ # @param billing_account [String]
126
+ # @param location [String]
127
+ # @param insight_type [String]
128
+ #
129
+ # @overload insight_type_path(folder:, location:, insight_type:)
130
+ # The resource will be in the following format:
131
+ #
132
+ # `folders/{folder}/locations/{location}/insightTypes/{insight_type}`
133
+ #
134
+ # @param folder [String]
135
+ # @param location [String]
136
+ # @param insight_type [String]
137
+ #
138
+ # @overload insight_type_path(organization:, location:, insight_type:)
139
+ # The resource will be in the following format:
140
+ #
141
+ # `organizations/{organization}/locations/{location}/insightTypes/{insight_type}`
142
+ #
143
+ # @param organization [String]
144
+ # @param location [String]
145
+ # @param insight_type [String]
58
146
  #
59
147
  # @return [::String]
60
- def insight_type_path project:, location:, insight_type:
61
- raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
62
- raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
148
+ def insight_type_path **args
149
+ resources = {
150
+ "insight_type:location:project" => (proc do |project:, location:, insight_type:|
151
+ raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
152
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
153
+
154
+ "projects/#{project}/locations/#{location}/insightTypes/#{insight_type}"
155
+ end),
156
+ "billing_account:insight_type:location" => (proc do |billing_account:, location:, insight_type:|
157
+ raise ::ArgumentError, "billing_account cannot contain /" if billing_account.to_s.include? "/"
158
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
159
+
160
+ "billingAccounts/#{billing_account}/locations/#{location}/insightTypes/#{insight_type}"
161
+ end),
162
+ "folder:insight_type:location" => (proc do |folder:, location:, insight_type:|
163
+ raise ::ArgumentError, "folder cannot contain /" if folder.to_s.include? "/"
164
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
165
+
166
+ "folders/#{folder}/locations/#{location}/insightTypes/#{insight_type}"
167
+ end),
168
+ "insight_type:location:organization" => (proc do |organization:, location:, insight_type:|
169
+ raise ::ArgumentError, "organization cannot contain /" if organization.to_s.include? "/"
170
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
171
+
172
+ "organizations/#{organization}/locations/#{location}/insightTypes/#{insight_type}"
173
+ end)
174
+ }
63
175
 
64
- "projects/#{project}/locations/#{location}/insightTypes/#{insight_type}"
176
+ resource = resources[args.keys.sort.join(":")]
177
+ raise ::ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
178
+ resource.call(**args)
65
179
  end
66
180
 
67
181
  ##
68
182
  # Create a fully-qualified Recommendation resource string.
69
183
  #
70
- # The resource will be in the following format:
184
+ # @overload recommendation_path(project:, location:, recommender:, recommendation:)
185
+ # The resource will be in the following format:
71
186
  #
72
- # `projects/{project}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}`
187
+ # `projects/{project}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}`
73
188
  #
74
- # @param project [String]
75
- # @param location [String]
76
- # @param recommender [String]
77
- # @param recommendation [String]
189
+ # @param project [String]
190
+ # @param location [String]
191
+ # @param recommender [String]
192
+ # @param recommendation [String]
193
+ #
194
+ # @overload recommendation_path(billing_account:, location:, recommender:, recommendation:)
195
+ # The resource will be in the following format:
196
+ #
197
+ # `billingAccounts/{billing_account}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}`
198
+ #
199
+ # @param billing_account [String]
200
+ # @param location [String]
201
+ # @param recommender [String]
202
+ # @param recommendation [String]
203
+ #
204
+ # @overload recommendation_path(folder:, location:, recommender:, recommendation:)
205
+ # The resource will be in the following format:
206
+ #
207
+ # `folders/{folder}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}`
208
+ #
209
+ # @param folder [String]
210
+ # @param location [String]
211
+ # @param recommender [String]
212
+ # @param recommendation [String]
213
+ #
214
+ # @overload recommendation_path(organization:, location:, recommender:, recommendation:)
215
+ # The resource will be in the following format:
216
+ #
217
+ # `organizations/{organization}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}`
218
+ #
219
+ # @param organization [String]
220
+ # @param location [String]
221
+ # @param recommender [String]
222
+ # @param recommendation [String]
78
223
  #
79
224
  # @return [::String]
80
- def recommendation_path project:, location:, recommender:, recommendation:
81
- raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
82
- raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
83
- raise ::ArgumentError, "recommender cannot contain /" if recommender.to_s.include? "/"
225
+ def recommendation_path **args
226
+ resources = {
227
+ "location:project:recommendation:recommender" => (proc do |project:, location:, recommender:, recommendation:|
228
+ raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
229
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
230
+ raise ::ArgumentError, "recommender cannot contain /" if recommender.to_s.include? "/"
231
+
232
+ "projects/#{project}/locations/#{location}/recommenders/#{recommender}/recommendations/#{recommendation}"
233
+ end),
234
+ "billing_account:location:recommendation:recommender" => (proc do |billing_account:, location:, recommender:, recommendation:|
235
+ raise ::ArgumentError, "billing_account cannot contain /" if billing_account.to_s.include? "/"
236
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
237
+ raise ::ArgumentError, "recommender cannot contain /" if recommender.to_s.include? "/"
238
+
239
+ "billingAccounts/#{billing_account}/locations/#{location}/recommenders/#{recommender}/recommendations/#{recommendation}"
240
+ end),
241
+ "folder:location:recommendation:recommender" => (proc do |folder:, location:, recommender:, recommendation:|
242
+ raise ::ArgumentError, "folder cannot contain /" if folder.to_s.include? "/"
243
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
244
+ raise ::ArgumentError, "recommender cannot contain /" if recommender.to_s.include? "/"
245
+
246
+ "folders/#{folder}/locations/#{location}/recommenders/#{recommender}/recommendations/#{recommendation}"
247
+ end),
248
+ "location:organization:recommendation:recommender" => (proc do |organization:, location:, recommender:, recommendation:|
249
+ raise ::ArgumentError, "organization cannot contain /" if organization.to_s.include? "/"
250
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
251
+ raise ::ArgumentError, "recommender cannot contain /" if recommender.to_s.include? "/"
252
+
253
+ "organizations/#{organization}/locations/#{location}/recommenders/#{recommender}/recommendations/#{recommendation}"
254
+ end)
255
+ }
84
256
 
85
- "projects/#{project}/locations/#{location}/recommenders/#{recommender}/recommendations/#{recommendation}"
257
+ resource = resources[args.keys.sort.join(":")]
258
+ raise ::ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
259
+ resource.call(**args)
86
260
  end
87
261
 
88
262
  ##
89
263
  # Create a fully-qualified Recommender resource string.
90
264
  #
91
- # The resource will be in the following format:
265
+ # @overload recommender_path(project:, location:, recommender:)
266
+ # The resource will be in the following format:
92
267
  #
93
- # `projects/{project}/locations/{location}/recommenders/{recommender}`
268
+ # `projects/{project}/locations/{location}/recommenders/{recommender}`
94
269
  #
95
- # @param project [String]
96
- # @param location [String]
97
- # @param recommender [String]
270
+ # @param project [String]
271
+ # @param location [String]
272
+ # @param recommender [String]
273
+ #
274
+ # @overload recommender_path(billing_account:, location:, recommender:)
275
+ # The resource will be in the following format:
276
+ #
277
+ # `billingAccounts/{billing_account}/locations/{location}/recommenders/{recommender}`
278
+ #
279
+ # @param billing_account [String]
280
+ # @param location [String]
281
+ # @param recommender [String]
282
+ #
283
+ # @overload recommender_path(folder:, location:, recommender:)
284
+ # The resource will be in the following format:
285
+ #
286
+ # `folders/{folder}/locations/{location}/recommenders/{recommender}`
287
+ #
288
+ # @param folder [String]
289
+ # @param location [String]
290
+ # @param recommender [String]
291
+ #
292
+ # @overload recommender_path(organization:, location:, recommender:)
293
+ # The resource will be in the following format:
294
+ #
295
+ # `organizations/{organization}/locations/{location}/recommenders/{recommender}`
296
+ #
297
+ # @param organization [String]
298
+ # @param location [String]
299
+ # @param recommender [String]
98
300
  #
99
301
  # @return [::String]
100
- def recommender_path project:, location:, recommender:
101
- raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
102
- raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
302
+ def recommender_path **args
303
+ resources = {
304
+ "location:project:recommender" => (proc do |project:, location:, recommender:|
305
+ raise ::ArgumentError, "project cannot contain /" if project.to_s.include? "/"
306
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
307
+
308
+ "projects/#{project}/locations/#{location}/recommenders/#{recommender}"
309
+ end),
310
+ "billing_account:location:recommender" => (proc do |billing_account:, location:, recommender:|
311
+ raise ::ArgumentError, "billing_account cannot contain /" if billing_account.to_s.include? "/"
312
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
313
+
314
+ "billingAccounts/#{billing_account}/locations/#{location}/recommenders/#{recommender}"
315
+ end),
316
+ "folder:location:recommender" => (proc do |folder:, location:, recommender:|
317
+ raise ::ArgumentError, "folder cannot contain /" if folder.to_s.include? "/"
318
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
319
+
320
+ "folders/#{folder}/locations/#{location}/recommenders/#{recommender}"
321
+ end),
322
+ "location:organization:recommender" => (proc do |organization:, location:, recommender:|
323
+ raise ::ArgumentError, "organization cannot contain /" if organization.to_s.include? "/"
324
+ raise ::ArgumentError, "location cannot contain /" if location.to_s.include? "/"
325
+
326
+ "organizations/#{organization}/locations/#{location}/recommenders/#{recommender}"
327
+ end)
328
+ }
103
329
 
104
- "projects/#{project}/locations/#{location}/recommenders/#{recommender}"
330
+ resource = resources[args.keys.sort.join(":")]
331
+ raise ::ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
332
+ resource.call(**args)
105
333
  end
106
334
 
107
335
  extend self