gapic-generator 0.7.5 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +45 -0
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/default_generator.rb +11 -1
- data/lib/gapic/generators/default_generator_parameters.rb +3 -1
- data/lib/gapic/presenters.rb +2 -0
- data/lib/gapic/presenters/gem_presenter.rb +63 -10
- data/lib/gapic/presenters/method/rest_pagination_info.rb +246 -0
- data/lib/gapic/presenters/method_presenter.rb +21 -2
- data/lib/gapic/presenters/method_rest_presenter.rb +70 -4
- data/lib/gapic/presenters/resource_presenter.rb +8 -0
- data/lib/gapic/presenters/service_config_presenter.rb +48 -0
- data/lib/gapic/presenters/service_presenter.rb +69 -0
- data/lib/gapic/presenters/service_rest_presenter.rb +36 -28
- data/lib/gapic/presenters/snippet_presenter.rb +103 -0
- data/lib/gapic/schema/api.rb +32 -8
- data/lib/gapic/schema/request_param_parser.rb +2 -2
- data/lib/gapic/schema/wrappers.rb +26 -0
- data/templates/default/gem/readme.erb +3 -3
- data/templates/default/lib/rest/_rest.erb +0 -2
- data/templates/default/service/client/_client.erb +18 -20
- data/templates/default/service/client/_config.erb +13 -14
- data/templates/default/service/client/_credentials.erb +2 -0
- data/templates/default/service/client/_operations.erb +1 -1
- data/templates/default/service/client/_paths.erb +1 -1
- data/templates/default/service/client/_self_configure_defaults.erb +2 -2
- data/templates/default/service/client/method/_def.erb +2 -0
- data/templates/default/service/client/method/def/_options_defaults.erb +3 -1
- data/templates/default/service/client/method/docs/_deprecated.erb +5 -0
- data/templates/default/service/client/method/docs/_snippets.erb +6 -0
- data/templates/default/service/rest/client/_client.erb +15 -24
- data/templates/default/service/rest/client/_config.erb +48 -0
- data/templates/default/service/rest/client/method/_def.erb +1 -1
- data/templates/default/service/rest/client/method/def/_options_defaults.erb +7 -3
- data/templates/default/service/rest/client/method/def/_response.erb +6 -0
- data/templates/default/service/rest/client/method/def/_response_normal.erb +4 -15
- data/templates/default/service/rest/client/method/def/_response_paged.erb +7 -0
- data/templates/default/service/rest/client/method/docs/_result.erb +3 -3
- data/templates/default/service/rest/service_stub.erb +6 -0
- data/templates/default/service/rest/service_stub/_service_stub.erb +25 -0
- data/templates/default/service/rest/{grpc_transcoding/method → service_stub/grpc_transcoding_method}/_def.erb +4 -1
- data/templates/default/service/rest/{grpc_transcoding/method → service_stub/grpc_transcoding_method}/def/_query_string_param.erb +0 -0
- data/templates/default/service/rest/service_stub/method/_def.erb +20 -0
- data/templates/default/service/rest/service_stub/method/def/_request.erb +2 -0
- data/templates/default/service/rest/service_stub/method/def/_response.erb +17 -0
- data/templates/default/service/rest/test/client.erb +18 -0
- data/templates/default/service/rest/test/method/_assert_response.erb +2 -0
- data/templates/default/service/rest/test/method/_configure.erb +19 -0
- data/templates/default/service/rest/test/method/_normal.erb +71 -0
- data/templates/default/service/rest/test/method/_setup.erb +38 -0
- data/templates/default/service/test/client_paths.erb +1 -1
- data/templates/default/snippets/gemfile.erb +17 -0
- data/templates/default/snippets/snippet/_structure.erb +71 -0
- data/templates/default/snippets/standalone.erb +6 -0
- metadata +29 -12
- data/templates/default/service/client/_self_configure_retry_policy.erb +0 -15
- data/templates/default/service/rest/client/_requires.erb +0 -1
- data/templates/default/service/rest/grpc_transcoding/_grpc_transcoding.erb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36abe40caa29f9c1368fc86632e1c57703d98346ab5dd70ad1a87ba7e73b277c
|
4
|
+
data.tar.gz: 60479a28e6d38873d21f06200f554e874ae2df926929e6eaef0a33e9b3099de5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 970f3a69d280a1cdad3bd53554d48d89524528ae65033e9a469ce4be3ccd9da83d8bd1bb4a28a6d45d9989456398b8421876eaaa39e1eaf179e28573b6ded107
|
7
|
+
data.tar.gz: 41b9678039126730f3295f63cdd20d298516060b3965091888c47cec944863f7dba01d7d5254327c13477053bdcc4425e500a42cf63e620befda2addb0e85c7b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,50 @@
|
|
1
1
|
# Release History for gapic-generator
|
2
2
|
|
3
|
+
### 0.10.0 / 2021-08-09
|
4
|
+
|
5
|
+
* New: Enabled per-RPC configuration for generated REST libraries
|
6
|
+
* New: Generated docs include the deprecated YARD tag for deprecated protos
|
7
|
+
* New: Scopes can be passed to self-signed JWTs
|
8
|
+
* Fixed: Generated gRPC clients honor the client-default timeout config
|
9
|
+
* Fixed: Generated docs now use YARD example tags for inline samples related to configuration
|
10
|
+
* Fixed: Generated REST clients now require google/cloud/errors
|
11
|
+
* Generated libraries now require gapic-common 0.7.0 or later
|
12
|
+
|
13
|
+
### 0.9.2 / 2021-07-27
|
14
|
+
|
15
|
+
* REST libraries are now generated with pagination hepers
|
16
|
+
* REST libraries are now generated with correct examples in README.md and other documentation files
|
17
|
+
* It is now possible to generate inline snippets in yardocs
|
18
|
+
* Fixed the require path in the generated standalone snippets so it reflects the recommended require root rather than the service-specific require path.
|
19
|
+
* Prevent "duplicate" resources (with the same name but different namespaces) from producing duplicate helper methods.
|
20
|
+
|
21
|
+
### 0.9.1 / 2021-07-07
|
22
|
+
|
23
|
+
* Detect multiple resource parents for patterns used by multiple resources
|
24
|
+
|
25
|
+
### 0.9.0 / 2021-06-29
|
26
|
+
|
27
|
+
* Support for configuring the service/method used for the quickstart example
|
28
|
+
* Allow generation of libraries with no custom env prefix
|
29
|
+
* Add service override setting to the repo metadata
|
30
|
+
* Wrapper gem dependencies on pre-GA versioned gems now allow both 0.x and 1.x versions
|
31
|
+
* Scoped some String and Hash references to the global scope to avoid name collisions
|
32
|
+
* Reformat some config code to avoid rubocop indentation churn
|
33
|
+
* Bazel: Replace monolith deps with rules_gapic
|
34
|
+
|
35
|
+
### 0.8.0 / 2021-06-16
|
36
|
+
|
37
|
+
* Initial implementation of standalone snippet generation.
|
38
|
+
* Updated gapic-common dependencies to require at least 0.5 and to support future 1.x versions.
|
39
|
+
* Generated unit tests for REST clients.
|
40
|
+
* Generated proper x-goog-api-client headers for REST clients.
|
41
|
+
* Added generation arguments to generated repo metadata.
|
42
|
+
* Allow multiple versions in the extra-dependency command line argument.
|
43
|
+
* Fixed treatment of boolean-valued command line arguments to the generator.
|
44
|
+
* Fixed behavior of wrapper-gem-override if given an empty value.
|
45
|
+
* Fixed default env_prefix computation to avoid the version part of the proto namespace.
|
46
|
+
* Fixed Bazel front-end to preserve file permissions.
|
47
|
+
|
3
48
|
### 0.7.5 / 2021-05-18
|
4
49
|
|
5
50
|
* Bazel jobs now provide a prebuilt ruby binary.
|
@@ -60,10 +60,18 @@ module Gapic
|
|
60
60
|
files << g("service/paths.erb", "lib/#{service.paths_file_path}", service: service) if service.paths?
|
61
61
|
files << g("service/operations.erb", "lib/#{service.operations_file_path}", service: service) if service.lro? && !@api.generate_rest_clients?
|
62
62
|
files << g("service/rest/client.erb", "lib/#{service.rest.client_file_path}", service: service) if @api.generate_rest_clients? and service.methods_rest_bindings?
|
63
|
-
files << g("service/rest/
|
63
|
+
files << g("service/rest/service_stub.erb", "lib/#{service.rest.service_stub_file_path}", service: service) if @api.generate_rest_clients? and service.methods_rest_bindings?
|
64
|
+
files << g("service/rest/test/client.erb", "test/#{service.rest.test_client_file_path}", service: service) if @api.generate_rest_clients? and service.methods_rest_bindings?
|
64
65
|
files << g("service/test/client.erb", "test/#{service.test_client_file_path}", service: service) unless @api.generate_rest_clients?
|
65
66
|
files << g("service/test/client_paths.erb", "test/#{service.test_paths_file_path}", service: service) if service.paths?
|
66
67
|
files << g("service/test/client_operations.erb", "test/#{service.test_client_operations_file_path}", service: service) if service.lro? && !@api.generate_rest_clients?
|
68
|
+
|
69
|
+
if @api.generate_standalone_snippets?
|
70
|
+
service.methods.each do |method|
|
71
|
+
snippet = method.snippet
|
72
|
+
files << g("snippets/standalone.erb", "snippets/#{snippet.snippet_file_path}", snippet: snippet)
|
73
|
+
end
|
74
|
+
end
|
67
75
|
end
|
68
76
|
end
|
69
77
|
|
@@ -82,6 +90,8 @@ module Gapic
|
|
82
90
|
files << g("gem/entrypoint.erb", "lib/#{gem.name}.rb", gem: gem)
|
83
91
|
files << g("gem/gapic_metadata_json.erb", "gapic_metadata.json", gem: gem) if @api.generate_metadata
|
84
92
|
|
93
|
+
files << g("snippets/gemfile.erb", "snippets/Gemfile", gem: gem) if @api.generate_standalone_snippets?
|
94
|
+
|
85
95
|
gem.proto_files.each do |proto_file|
|
86
96
|
files << g("proto_docs/proto_file.erb", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
|
87
97
|
end
|
data/lib/gapic/presenters.rb
CHANGED
@@ -26,7 +26,9 @@ require "gapic/presenters/package_presenter"
|
|
26
26
|
require "gapic/presenters/resource_presenter"
|
27
27
|
require "gapic/presenters/sample_presenter"
|
28
28
|
require "gapic/presenters/service_presenter"
|
29
|
+
require "gapic/presenters/service_config_presenter"
|
29
30
|
require "gapic/presenters/service_rest_presenter"
|
31
|
+
require "gapic/presenters/snippet_presenter"
|
30
32
|
|
31
33
|
module Gapic
|
32
34
|
##
|
@@ -127,7 +127,7 @@ module Gapic
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def env_prefix
|
130
|
-
|
130
|
+
gem_config(:env_prefix)&.upcase
|
131
131
|
end
|
132
132
|
|
133
133
|
def iam_dependency?
|
@@ -156,18 +156,26 @@ module Gapic
|
|
156
156
|
gem_config :issue_tracker_url
|
157
157
|
end
|
158
158
|
|
159
|
+
##
|
160
|
+
# @return [Boolean]
|
161
|
+
#
|
159
162
|
def free_tier?
|
160
|
-
|
161
|
-
gem_config(:free_tier) == "true"
|
163
|
+
gem_config(:free_tier) || false
|
162
164
|
end
|
163
165
|
|
166
|
+
##
|
167
|
+
# @return [Boolean]
|
168
|
+
#
|
164
169
|
def yard_strict?
|
165
170
|
# Default to true unless the config is explicitly set to "false"
|
166
|
-
gem_config(:yard_strict)
|
171
|
+
gem_config(:yard_strict).nil? || gem_config(:yard_strict)
|
167
172
|
end
|
168
173
|
|
174
|
+
##
|
175
|
+
# @return [Boolean]
|
176
|
+
#
|
169
177
|
def generic_endpoint?
|
170
|
-
gem_config(:generic_endpoint)
|
178
|
+
gem_config(:generic_endpoint) || false
|
171
179
|
end
|
172
180
|
|
173
181
|
def entrypoint_require
|
@@ -183,11 +191,13 @@ module Gapic
|
|
183
191
|
end
|
184
192
|
|
185
193
|
def dependencies
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
194
|
+
@dependencies ||= begin
|
195
|
+
deps = { "gapic-common" => [">= 0.7", "< 2.a"] }
|
196
|
+
deps["grpc-google-iam-v1"] = [">= 0.6.10", "< 2.a"] if iam_dependency?
|
197
|
+
extra_deps = gem_config_dependencies
|
198
|
+
deps.merge! extra_deps if extra_deps
|
199
|
+
deps
|
200
|
+
end
|
191
201
|
end
|
192
202
|
|
193
203
|
def dependency_list
|
@@ -217,6 +227,29 @@ module Gapic
|
|
217
227
|
JSON.pretty_generate first_package_drift_manifest
|
218
228
|
end
|
219
229
|
|
230
|
+
##
|
231
|
+
# The service to use for quick start samples. Normally this is simply the
|
232
|
+
# {#first_non_common_service}, but it can be overridden via a gem config.
|
233
|
+
#
|
234
|
+
# @return [Gapic::Presenters::ServicePresenter]
|
235
|
+
#
|
236
|
+
def quick_start_service
|
237
|
+
preferred_service = gem_config :quick_start_service
|
238
|
+
result = services.find { |svc| svc.name == preferred_service } if preferred_service
|
239
|
+
result || first_non_common_service
|
240
|
+
end
|
241
|
+
|
242
|
+
##
|
243
|
+
# Whether the "Enabling (gRPC) Logging" section of the readme should
|
244
|
+
# appear. This is true if there is a quick-start service displayed in the
|
245
|
+
# readme, AND it uses gRPC.
|
246
|
+
#
|
247
|
+
# @return [Boolean]
|
248
|
+
#
|
249
|
+
def show_grpc_logging_docs?
|
250
|
+
packages? && quick_start_service.usable_service_presenter.is_a?(ServicePresenter)
|
251
|
+
end
|
252
|
+
|
220
253
|
private
|
221
254
|
|
222
255
|
def gem_config key
|
@@ -225,6 +258,26 @@ module Gapic
|
|
225
258
|
@api.configuration[:gem][key]
|
226
259
|
end
|
227
260
|
|
261
|
+
##
|
262
|
+
# There is a special case (from PoV of generator parameters)
|
263
|
+
# in gem dependencies where a dependency needs to be an array of strings
|
264
|
+
# e.g. ">= 1.6", "< 2.a"
|
265
|
+
# Rather than creating a special generator param case for this I will special-case it here.
|
266
|
+
# '|' is the separator.
|
267
|
+
# The above would be represented as ">= 1.6|< 2.a"
|
268
|
+
#
|
269
|
+
# @return [Hash<String, String>, Hash{String=>Array<String>}, nil]
|
270
|
+
def gem_config_dependencies
|
271
|
+
return unless gem_config :extra_dependencies
|
272
|
+
gem_config(:extra_dependencies).map do |dep_name, dep_versions|
|
273
|
+
if dep_versions.include? "|"
|
274
|
+
[dep_name, dep_versions.split("|")]
|
275
|
+
else
|
276
|
+
[dep_name, dep_versions]
|
277
|
+
end
|
278
|
+
end.to_h
|
279
|
+
end
|
280
|
+
|
228
281
|
def blacklist_protos
|
229
282
|
blacklist = gem_config :blacklist
|
230
283
|
|
@@ -0,0 +1,246 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2021 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
module Gapic
|
18
|
+
module Presenters
|
19
|
+
module Method
|
20
|
+
##
|
21
|
+
# Pagination info determined from the proto method
|
22
|
+
#
|
23
|
+
class RestPaginationInfo
|
24
|
+
include Gapic::Helpers::NamespaceHelper
|
25
|
+
##
|
26
|
+
# @param proto_method [Gapic::Schema::Method] the method to derive pagination info from
|
27
|
+
# @param api [Gapic::Schema::Api]
|
28
|
+
#
|
29
|
+
def initialize proto_method, api
|
30
|
+
@api = api
|
31
|
+
@request = proto_method.input
|
32
|
+
@response = proto_method.output
|
33
|
+
@server_streaming = proto_method.server_streaming
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Whether the method should be generated as paged
|
38
|
+
#
|
39
|
+
# @return [Boolean]
|
40
|
+
def paged?
|
41
|
+
!server_streaming? && paged_request? && paged_response?
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Name of the request's field used for page size
|
46
|
+
# For Regapic can be either `page_size` or `max_results`
|
47
|
+
#
|
48
|
+
# @return [String, nil]
|
49
|
+
def request_page_size_name
|
50
|
+
request_page_size_field&.name
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Name of the repeated field in the response message
|
55
|
+
# For REST gapics can be either a vanilla repeated field or a map
|
56
|
+
#
|
57
|
+
# @return [String, nil]
|
58
|
+
def response_repeated_field_name
|
59
|
+
response_results_field&.name
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Whether the repeated field in the response message is a map
|
64
|
+
#
|
65
|
+
# @return [Boolean, nil]
|
66
|
+
def repeated_field_is_a_map?
|
67
|
+
response_results_field&.map?
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Proto type of the repeated field in the response message
|
72
|
+
#
|
73
|
+
# @return [String, nil]
|
74
|
+
def paged_element_doc_type
|
75
|
+
return nil if response_results_field.nil?
|
76
|
+
field_paginated_elem_doc_type response_results_field
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
# Whether the underlying proto rpc is a server streaming rpc
|
82
|
+
# @return [Boolean]
|
83
|
+
attr_accessor :server_streaming
|
84
|
+
|
85
|
+
##
|
86
|
+
# Whether the underlying proto rpc is a server streaming rpc
|
87
|
+
#
|
88
|
+
# @return [Boolean]
|
89
|
+
def server_streaming?
|
90
|
+
@server_streaming
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# Whether the request message for the REGAPIC rpc satisfies the criteria
|
95
|
+
# for the rpc to be classified and implemented as paged
|
96
|
+
#
|
97
|
+
# @return [Boolean]
|
98
|
+
def paged_request?
|
99
|
+
# Has a String page_token field which specifies the actual (next) page to retrieve.
|
100
|
+
# Has an int32 page_size or int32 max_results field
|
101
|
+
# which defines the maximum number of paginated resources to return in the response.
|
102
|
+
!request_page_token_field.nil? && !request_page_size_field.nil?
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# The field in the request that holds a page_token
|
107
|
+
#
|
108
|
+
# @return[Gapic::Schema::Field, nil]
|
109
|
+
def request_page_token_field
|
110
|
+
# Has a String page_token field which specifies the actual (next) page to retrieve.
|
111
|
+
@request_page_token_field ||= @request.fields.find do |f|
|
112
|
+
f.name == "page_token" && f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_STRING
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
##
|
117
|
+
# The field in the request that holds a page_size
|
118
|
+
# For Regapic can have a name of either `page_size` or `max_results`
|
119
|
+
#
|
120
|
+
# @return[Gapic::Schema::Field, nil]
|
121
|
+
def request_page_size_field
|
122
|
+
@request_page_size_field ||=
|
123
|
+
begin
|
124
|
+
page_size_names = ["page_size", "max_results"]
|
125
|
+
|
126
|
+
# Has the int32 page_size or int32 max_results field
|
127
|
+
# which defines the maximum number of paginated resources to return in the response.
|
128
|
+
page_size_types = [
|
129
|
+
Google::Protobuf::FieldDescriptorProto::Type::TYPE_UINT32,
|
130
|
+
Google::Protobuf::FieldDescriptorProto::Type::TYPE_INT32
|
131
|
+
]
|
132
|
+
|
133
|
+
field = @request.fields.find do |f|
|
134
|
+
page_size_names.include?(f.name) && page_size_types.include?(f.type)
|
135
|
+
end
|
136
|
+
|
137
|
+
field
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
##
|
142
|
+
# Whether the response message for the REGAPIC rpc satisfies the criteria
|
143
|
+
# for the rpc to be classified and implemented as paged
|
144
|
+
#
|
145
|
+
# @return [Boolean]
|
146
|
+
def paged_response?
|
147
|
+
# Has the string next_page_token field to be used in the next request as page_token to retrieve the next page.
|
148
|
+
# Has only one repeated or map<string, ?> field containing a list of paginated resources.
|
149
|
+
!response_next_page_token_field.nil? && !response_results_field.nil?
|
150
|
+
end
|
151
|
+
|
152
|
+
##
|
153
|
+
# The field in the response that holds a next page_token
|
154
|
+
#
|
155
|
+
# @return[Gapic::Schema::Field, nil]
|
156
|
+
def response_next_page_token_field
|
157
|
+
# Has the string next_page_token field to be used in the next request as page_token to retrieve the next page.
|
158
|
+
@response_next_page_token_field ||= @response.fields.find do |f|
|
159
|
+
f.name == "next_page_token" && f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_STRING
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
##
|
164
|
+
# The field in the response that holds the results
|
165
|
+
# For Regapic can be either a vanilla repeated field or a map
|
166
|
+
#
|
167
|
+
# @return [Gapic::Schema::Field, nil]
|
168
|
+
def response_results_field
|
169
|
+
@response_results_field ||= begin
|
170
|
+
map_fields = @response.fields.find_all(&:map?)
|
171
|
+
repeated_fields = @response.fields.find_all do |f|
|
172
|
+
!f.map? &&
|
173
|
+
f.label == Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED
|
174
|
+
end
|
175
|
+
|
176
|
+
if map_fields.count == 1
|
177
|
+
# If the response message has only one map<string, ?> field
|
178
|
+
# treat it as the one with paginated resources (i.e. ignore the repeated fields if any).
|
179
|
+
map_fields.first
|
180
|
+
elsif repeated_fields.count == 1 && map_fields.empty?
|
181
|
+
# If the response message contains only one repeated field,
|
182
|
+
# treat that field as the one containing the paginated resources.
|
183
|
+
repeated_fields.first
|
184
|
+
end
|
185
|
+
# If the response message contains more than one repeated field or does not have repeated fields at all
|
186
|
+
# but has more than one map<string, ?> field, do not generate any paginated methods for such rpc.
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
##
|
191
|
+
# A helper to get a Ruby doc-type for a paginated element.
|
192
|
+
#
|
193
|
+
# @param field [Gapic::Schema::Field]
|
194
|
+
#
|
195
|
+
# @return [String]
|
196
|
+
def field_paginated_elem_doc_type field
|
197
|
+
return field_paginated_elem_map_type field if field.map?
|
198
|
+
if field.message?
|
199
|
+
message_ruby_type field.message
|
200
|
+
elsif field.enum?
|
201
|
+
# TODO: handle when arg message is nil and enum is the type
|
202
|
+
message_ruby_type field.enum
|
203
|
+
else
|
204
|
+
case field.type
|
205
|
+
when 1, 2 then "::Float"
|
206
|
+
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "::Integer"
|
207
|
+
when 9, 12 then "::String"
|
208
|
+
when 8 then "::Boolean"
|
209
|
+
else
|
210
|
+
"::Object"
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
##
|
216
|
+
# A helper to get a Ruby doc-type for a proto map's paginated element.
|
217
|
+
#
|
218
|
+
# @param field [Gapic::Schema::Field]
|
219
|
+
#
|
220
|
+
# @return [String]
|
221
|
+
def field_paginated_elem_map_type field
|
222
|
+
key_field = field.map_key_field
|
223
|
+
value_field = field.map_val_field
|
224
|
+
|
225
|
+
if key_field && value_field
|
226
|
+
key_type = field_paginated_elem_doc_type key_field
|
227
|
+
value_type = field_paginated_elem_doc_type value_field
|
228
|
+
"#{key_type}, #{value_type}"
|
229
|
+
else
|
230
|
+
class_name
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
##
|
235
|
+
# A helper to get a Ruby type for a proto message.
|
236
|
+
#
|
237
|
+
# @param message [Gapic::Schema::Message]
|
238
|
+
#
|
239
|
+
# @return [String]
|
240
|
+
def message_ruby_type message
|
241
|
+
ruby_namespace @api, message.address.join(".")
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|