gapic-generator 0.11.0 → 0.45.1

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.
Files changed (276) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +299 -0
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +71 -37
  5. data/bin/protoc-gen-ruby_gapic +2 -2
  6. data/lib/gapic/file_formatter.rb +23 -19
  7. data/lib/gapic/formatting_utils.rb +22 -9
  8. data/lib/gapic/gem_builder.rb +15 -17
  9. data/lib/gapic/generator/version.rb +1 -1
  10. data/lib/gapic/generators/base_generator.rb +6 -4
  11. data/lib/gapic/generators/default_generator.rb +70 -34
  12. data/lib/gapic/generators/default_generator_parameters.rb +9 -3
  13. data/lib/gapic/grpc_service_config/parser.rb +2 -2
  14. data/lib/gapic/model/api_metadata.rb +173 -0
  15. data/lib/gapic/model/method/http_annotation.rb +158 -60
  16. data/lib/gapic/model/method/lro.rb +8 -5
  17. data/lib/gapic/model/method/routing.rb +3 -18
  18. data/lib/gapic/model/mixins.rb +76 -10
  19. data/lib/gapic/model/service/nonstandard_lro_provider.rb +10 -11
  20. data/lib/gapic/package_snippets.rb +159 -0
  21. data/lib/gapic/path_pattern/parser.rb +11 -2
  22. data/lib/gapic/path_pattern/pattern.rb +18 -1
  23. data/lib/gapic/path_pattern/segment.rb +11 -4
  24. data/lib/gapic/presenters/enum_presenter.rb +14 -0
  25. data/lib/gapic/presenters/enum_value_presenter.rb +4 -1
  26. data/lib/gapic/presenters/field_presenter.rb +78 -21
  27. data/lib/gapic/presenters/gem_presenter.rb +109 -35
  28. data/lib/gapic/presenters/message_presenter.rb +15 -0
  29. data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
  30. data/lib/gapic/presenters/method/rest_pagination_info.rb +25 -16
  31. data/lib/gapic/presenters/method_presenter.rb +109 -35
  32. data/lib/gapic/presenters/method_rest_presenter.rb +70 -137
  33. data/lib/gapic/presenters/package_presenter.rb +63 -18
  34. data/lib/gapic/presenters/resource_presenter.rb +9 -3
  35. data/lib/gapic/presenters/service/lro_client_presenter.rb +14 -14
  36. data/lib/gapic/presenters/service/mixin_client_presenter.rb +89 -0
  37. data/lib/gapic/presenters/service/sub_client_presenter.rb +84 -0
  38. data/lib/gapic/presenters/service_presenter.rb +183 -31
  39. data/lib/gapic/presenters/service_rest_presenter.rb +180 -27
  40. data/lib/gapic/presenters/snippet/client_call_presenter.rb +82 -0
  41. data/lib/gapic/presenters/snippet/client_initialization_presenter.rb +87 -0
  42. data/lib/gapic/presenters/snippet/declaration_presenter.rb +91 -0
  43. data/lib/gapic/presenters/snippet/expression_presenter.rb +135 -0
  44. data/lib/gapic/presenters/snippet/iteration_presenter.rb +118 -0
  45. data/lib/gapic/presenters/snippet/parameter_presenter.rb +67 -0
  46. data/lib/gapic/presenters/snippet/request_initialization_presenters.rb +202 -0
  47. data/lib/gapic/presenters/snippet/response_handling_presenters.rb +329 -0
  48. data/lib/gapic/presenters/snippet/statement_presenter.rb +134 -0
  49. data/lib/gapic/presenters/snippet/type_presenter.rb +98 -0
  50. data/lib/gapic/presenters/snippet_presenter.rb +199 -10
  51. data/lib/gapic/presenters.rb +2 -0
  52. data/lib/gapic/runner.rb +1 -1
  53. data/lib/gapic/schema/api.rb +49 -3
  54. data/lib/gapic/schema/loader.rb +67 -22
  55. data/lib/gapic/schema/parameter_schema.rb +8 -8
  56. data/lib/gapic/schema/proto_tools.rb +193 -0
  57. data/lib/gapic/schema/request_param_parser.rb +5 -7
  58. data/lib/gapic/schema/service_config_parser.rb +38 -4
  59. data/lib/gapic/schema/wrappers.rb +192 -31
  60. data/lib/gapic/uri_template/parser.rb +15 -7
  61. data/lib/google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb.rb +104 -0
  62. data/lib/google/cloud/tools/snippetgen/snippetindex/v1/snippet_index_pb.rb +58 -0
  63. data/lib/google/protobuf/compiler/plugin_pb.rb +47 -0
  64. data/templates/default/binding_override.text.erb +6 -0
  65. data/templates/default/gem/gemfile.text.erb +12 -0
  66. data/templates/default/gem/{gemspec.erb → gemspec.text.erb} +3 -11
  67. data/templates/default/gem/{readme.erb → readme.text.erb} +10 -6
  68. data/templates/default/gem/{rubocop.erb → rubocop.text.erb} +3 -0
  69. data/templates/default/gem/{test_helper.erb → test_helper.text.erb} +4 -2
  70. data/templates/default/gem/toys.text.erb +12 -0
  71. data/templates/default/helpers/default_helper.rb +33 -1
  72. data/templates/default/lib/_binding_override.text.erb +49 -0
  73. data/templates/default/lib/{_package.erb → _package.text.erb} +6 -9
  74. data/templates/default/lib/_package_rest.text.erb +24 -0
  75. data/templates/default/lib/{_service.erb → _service.text.erb} +11 -23
  76. data/templates/default/lib/package/_self_configure.text.erb +16 -0
  77. data/templates/default/lib/package/_self_configure_defaults.text.erb +13 -0
  78. data/templates/default/lib/package/self_configure/_binding_default.text.erb +15 -0
  79. data/templates/default/lib/rest/_rest.text.erb +46 -0
  80. data/templates/default/package_rest.text.erb +6 -0
  81. data/templates/default/proto_docs/_deprecated.text.erb +9 -0
  82. data/templates/default/proto_docs/{_enum.erb → _enum.text.erb} +1 -0
  83. data/templates/default/proto_docs/{_message.erb → _message.text.erb} +2 -0
  84. data/templates/default/service/client/{_client.erb → _client.text.erb} +60 -12
  85. data/templates/default/service/client/{_config.erb → _config.text.erb} +39 -8
  86. data/templates/default/service/client/{_operations.erb → _operations.text.erb} +24 -3
  87. data/templates/default/service/client/method/{_def.erb → _def.text.erb} +2 -2
  88. data/templates/default/service/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +2 -1
  89. data/templates/default/service/client/method/def/_request_normal.text.erb +18 -0
  90. data/templates/default/service/client/method/def/_request_streaming.text.erb +23 -0
  91. data/templates/default/service/client/method/def/{_response.erb → _response.text.erb} +2 -0
  92. data/templates/default/service/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +1 -1
  93. data/templates/default/service/client/method/def/_response_normal.text.erb +4 -0
  94. data/templates/default/service/client/method/def/{_response_normal.erb → _response_normal_lro.text.erb} +1 -3
  95. data/templates/default/service/client/method/def/{_response_paged.erb → _response_paged.text.erb} +1 -1
  96. data/templates/default/service/client/method/docs/{_request_normal.erb → _request_normal.text.erb} +1 -1
  97. data/templates/default/service/client/method/docs/_snippets.text.erb +6 -0
  98. data/templates/default/service/client/resource/_def.text.erb +7 -0
  99. data/templates/default/service/nonstandard_lro.text.erb +6 -0
  100. data/templates/default/service/rest/client/{_client.erb → _client.text.erb} +82 -13
  101. data/templates/default/service/rest/client/_config.text.erb +178 -0
  102. data/templates/default/service/rest/client/_operations.text.erb +124 -0
  103. data/templates/default/service/rest/client/method/{_def.erb → _def.text.erb} +7 -1
  104. data/templates/default/service/rest/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +8 -3
  105. data/templates/default/service/rest/client/method/def/{_response.erb → _response.text.erb} +4 -0
  106. data/templates/default/service/rest/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +5 -4
  107. data/templates/default/service/rest/client/method/def/_response_normal.text.erb +5 -0
  108. data/templates/default/service/rest/client/method/def/_response_normal_lro.text.erb +7 -0
  109. data/templates/default/service/rest/client/method/def/_response_paged.text.erb +7 -0
  110. data/templates/default/service/rest/client/method/def/_response_server_streaming.text.erb +11 -0
  111. data/templates/default/service/rest/client/method/docs/{_request.erb → _request.text.erb} +1 -3
  112. data/templates/default/service/rest/client/method/docs/_result.text.erb +10 -0
  113. data/templates/default/service/rest/client/method/docs/_snippets.text.erb +6 -0
  114. data/templates/default/service/{nonstandard_lro.erb → rest/nonstandard_lro.text.erb} +1 -1
  115. data/templates/default/service/rest/operations.text.erb +6 -0
  116. data/templates/default/service/rest/service_stub/_service_stub.text.erb +63 -0
  117. data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.text.erb +37 -0
  118. data/templates/default/service/rest/service_stub/method/_def.text.erb +35 -0
  119. data/templates/default/service/rest/service_stub/method/def/_response.text.erb +37 -0
  120. data/templates/default/service/rest/test/{client.erb → client.text.erb} +3 -3
  121. data/templates/default/service/rest/test/method/_assert_response.text.erb +2 -0
  122. data/templates/default/service/rest/test/method/{_configure.erb → _configure.text.erb} +3 -2
  123. data/templates/default/service/rest/test/method/_normal.text.erb +60 -0
  124. data/templates/default/service/rest/test/method/_server.text.erb +60 -0
  125. data/templates/default/service/rest/test/method/{_setup.erb → _setup.text.erb} +26 -10
  126. data/templates/default/service/test/{_resource.erb → _resource.text.erb} +1 -1
  127. data/templates/default/service/test/{client.erb → client.text.erb} +3 -2
  128. data/templates/default/service/test/client_paths.text.erb +33 -0
  129. data/templates/default/service/test/method/{_bidi.erb → _bidi.text.erb} +1 -1
  130. data/templates/default/service/test/method/{_client.erb → _client.text.erb} +1 -1
  131. data/templates/default/service/test/method/{_configure.erb → _configure.text.erb} +2 -1
  132. data/templates/default/service/test/method/{_normal.erb → _normal.text.erb} +1 -1
  133. data/templates/default/service/test/method/{_server.erb → _server.text.erb} +1 -1
  134. data/templates/default/service/test/method/{_setup.erb → _setup.text.erb} +19 -2
  135. data/templates/default/snippets/{gemfile.erb → gemfile.text.erb} +2 -2
  136. data/templates/default/snippets/snippet/_body.text.erb +24 -0
  137. data/templates/default/snippets/snippet/_inline.text.erb +11 -0
  138. data/templates/default/snippets/snippet/_standalone.text.erb +25 -0
  139. data/templates/default/snippets/{standalone.erb → standalone.text.erb} +1 -1
  140. metadata +198 -273
  141. data/lib/google/api/annotations.pb.rb +0 -39
  142. data/lib/google/api/auth.pb.rb +0 -75
  143. data/lib/google/api/backend.pb.rb +0 -59
  144. data/lib/google/api/billing.pb.rb +0 -53
  145. data/lib/google/api/client.pb.rb +0 -43
  146. data/lib/google/api/context.pb.rb +0 -47
  147. data/lib/google/api/control.pb.rb +0 -38
  148. data/lib/google/api/documentation.pb.rb +0 -56
  149. data/lib/google/api/endpoint.pb.rb +0 -42
  150. data/lib/google/api/field_behavior.pb.rb +0 -51
  151. data/lib/google/api/http.pb.rb +0 -60
  152. data/lib/google/api/label.pb.rb +0 -49
  153. data/lib/google/api/launch_stage.pb.rb +0 -37
  154. data/lib/google/api/log.pb.rb +0 -47
  155. data/lib/google/api/logging.pb.rb +0 -48
  156. data/lib/google/api/metric.pb.rb +0 -90
  157. data/lib/google/api/monitored_resource.pb.rb +0 -68
  158. data/lib/google/api/monitoring.pb.rb +0 -48
  159. data/lib/google/api/quota.pb.rb +0 -63
  160. data/lib/google/api/resource.pb.rb +0 -80
  161. data/lib/google/api/routing.pb.rb +0 -58
  162. data/lib/google/api/service.pb.rb +0 -90
  163. data/lib/google/api/source_info.pb.rb +0 -44
  164. data/lib/google/api/system_parameter.pb.rb +0 -51
  165. data/lib/google/api/usage.pb.rb +0 -47
  166. data/lib/google/cloud/extended_operations.pb.rb +0 -57
  167. data/lib/google/longrunning/operations.pb.rb +0 -115
  168. data/lib/google/protobuf/any.pb.rb +0 -40
  169. data/lib/google/protobuf/api.pb.rb +0 -69
  170. data/lib/google/protobuf/compiler/plugin.pb.rb +0 -79
  171. data/lib/google/protobuf/descriptor.pb.rb +0 -360
  172. data/lib/google/protobuf/duration.pb.rb +0 -41
  173. data/lib/google/protobuf/empty.pb.rb +0 -36
  174. data/lib/google/protobuf/source_context.pb.rb +0 -39
  175. data/lib/google/protobuf/struct.pb.rb +0 -65
  176. data/lib/google/protobuf/type.pb.rb +0 -128
  177. data/lib/google/protobuf/wrappers.pb.rb +0 -80
  178. data/lib/google/rpc/status.pb.rb +0 -46
  179. data/templates/default/gem/gemfile.erb +0 -4
  180. data/templates/default/lib/rest/_rest.erb +0 -9
  181. data/templates/default/service/client/method/def/_request_normal.erb +0 -4
  182. data/templates/default/service/client/method/def/_request_streaming.erb +0 -9
  183. data/templates/default/service/client/method/docs/_deprecated.erb +0 -5
  184. data/templates/default/service/client/method/docs/_snippets.erb +0 -6
  185. data/templates/default/service/client/resource/_def.erb +0 -6
  186. data/templates/default/service/rest/client/_config.erb +0 -122
  187. data/templates/default/service/rest/client/method/def/_response_normal.erb +0 -6
  188. data/templates/default/service/rest/client/method/def/_response_paged.erb +0 -7
  189. data/templates/default/service/rest/client/method/docs/_result.erb +0 -6
  190. data/templates/default/service/rest/service_stub/_service_stub.erb +0 -25
  191. data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.erb +0 -24
  192. data/templates/default/service/rest/service_stub/method/_def.erb +0 -20
  193. data/templates/default/service/rest/service_stub/method/def/_response.erb +0 -17
  194. data/templates/default/service/rest/test/method/_assert_response.erb +0 -2
  195. data/templates/default/service/rest/test/method/_normal.erb +0 -71
  196. data/templates/default/service/test/client_paths.erb +0 -15
  197. data/templates/default/snippets/snippet/_structure.erb +0 -71
  198. /data/gem_templates/{binary.erb → binary.text.erb} +0 -0
  199. /data/gem_templates/{dockerfile.erb → dockerfile.text.erb} +0 -0
  200. /data/gem_templates/{entrypoint.erb → entrypoint.text.erb} +0 -0
  201. /data/gem_templates/{gapic_sh.erb → gapic_sh.text.erb} +0 -0
  202. /data/gem_templates/{gemfile.erb → gemfile.text.erb} +0 -0
  203. /data/gem_templates/{gemspec.erb → gemspec.text.erb} +0 -0
  204. /data/gem_templates/{generator.erb → generator.text.erb} +0 -0
  205. /data/gem_templates/{gitignore.erb → gitignore.text.erb} +0 -0
  206. /data/gem_templates/{rakefile.erb → rakefile.text.erb} +0 -0
  207. /data/gem_templates/{readme.erb → readme.text.erb} +0 -0
  208. /data/gem_templates/{rubocop.erb → rubocop.text.erb} +0 -0
  209. /data/gem_templates/shared/{_header.erb → _header.text.erb} +0 -0
  210. /data/gem_templates/shared/{_license.erb → _license.text.erb} +0 -0
  211. /data/gem_templates/shared/{_warning.erb → _warning.text.erb} +0 -0
  212. /data/gem_templates/{test_generator.erb → test_generator.text.erb} +0 -0
  213. /data/gem_templates/{test_helper.erb → test_helper.text.erb} +0 -0
  214. /data/gem_templates/{version.erb → version.text.erb} +0 -0
  215. /data/templates/default/gem/{_version.erb → _version.text.erb} +0 -0
  216. /data/templates/default/gem/{changelog.erb → changelog.text.erb} +0 -0
  217. /data/templates/default/gem/{entrypoint.erb → entrypoint.text.erb} +0 -0
  218. /data/templates/default/gem/{gapic_metadata_json.erb → gapic_metadata_json.text.erb} +0 -0
  219. /data/templates/default/gem/{gitignore.erb → gitignore.text.erb} +0 -0
  220. /data/templates/default/gem/{license.erb → license.text.erb} +0 -0
  221. /data/templates/default/gem/{rakefile.erb → rakefile.text.erb} +0 -0
  222. /data/templates/default/gem/{version.erb → version.text.erb} +0 -0
  223. /data/templates/default/gem/{yardopts.erb → yardopts.text.erb} +0 -0
  224. /data/templates/default/layouts/{_ruby.erb → _ruby.text.erb} +0 -0
  225. /data/templates/default/{package.erb → package.text.erb} +0 -0
  226. /data/templates/default/proto_docs/{_proto_file.erb → _proto_file.text.erb} +0 -0
  227. /data/templates/default/proto_docs/{proto_file.erb → proto_file.text.erb} +0 -0
  228. /data/templates/default/proto_docs/{readme.erb → readme.text.erb} +0 -0
  229. /data/templates/default/service/{_helpers.erb → _helpers.text.erb} +0 -0
  230. /data/templates/default/service/client/{_credentials.erb → _credentials.text.erb} +0 -0
  231. /data/templates/default/service/client/{_nonstandard_lro.erb → _nonstandard_lro.text.erb} +0 -0
  232. /data/templates/default/service/client/{_paths.erb → _paths.text.erb} +0 -0
  233. /data/templates/default/service/client/{_requires.erb → _requires.text.erb} +0 -0
  234. /data/templates/default/service/client/{_resource.erb → _resource.text.erb} +0 -0
  235. /data/templates/default/service/client/{_self_configure.erb → _self_configure.text.erb} +0 -0
  236. /data/templates/default/service/client/{_self_configure_defaults.erb → _self_configure_defaults.text.erb} +0 -0
  237. /data/templates/default/service/client/method/def/{_request.erb → _request.text.erb} +0 -0
  238. /data/templates/default/service/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
  239. /data/templates/default/service/client/method/def/{_routing_params.erb → _routing_params.text.erb} +0 -0
  240. /data/templates/default/service/client/method/docs/{_error.erb → _error.text.erb} +0 -0
  241. /data/templates/default/service/client/method/docs/{_request.erb → _request.text.erb} +0 -0
  242. /data/templates/default/service/client/method/docs/{_request_field.erb → _request_field.text.erb} +0 -0
  243. /data/templates/default/service/client/method/docs/{_request_streaming.erb → _request_streaming.text.erb} +0 -0
  244. /data/templates/default/service/client/method/docs/{_response.erb → _response.text.erb} +0 -0
  245. /data/templates/default/service/client/method/docs/{_sample.erb → _sample.text.erb} +0 -0
  246. /data/templates/default/service/client/method/docs/{_sample_response.erb → _sample_response.text.erb} +0 -0
  247. /data/templates/default/service/client/method/docs/{_samples.erb → _samples.text.erb} +0 -0
  248. /data/templates/default/service/client/method/docs/request_field/{_arg.erb → _arg.text.erb} +0 -0
  249. /data/templates/default/service/client/method/docs/request_field/{_hash.erb → _hash.text.erb} +0 -0
  250. /data/templates/default/service/client/method/docs/sample_response/{_comment.erb → _comment.text.erb} +0 -0
  251. /data/templates/default/service/client/method/docs/sample_response/{_define.erb → _define.text.erb} +0 -0
  252. /data/templates/default/service/client/method/docs/sample_response/{_loop.erb → _loop.text.erb} +0 -0
  253. /data/templates/default/service/client/method/docs/sample_response/{_print.erb → _print.text.erb} +0 -0
  254. /data/templates/default/service/client/method/docs/sample_response/{_write_file.erb → _write_file.text.erb} +0 -0
  255. /data/templates/default/service/client/resource/{_doc.erb → _doc.text.erb} +0 -0
  256. /data/templates/default/service/client/resource/{_multi.erb → _multi.text.erb} +0 -0
  257. /data/templates/default/service/client/resource/{_single.erb → _single.text.erb} +0 -0
  258. /data/templates/default/service/{client.erb → client.text.erb} +0 -0
  259. /data/templates/default/service/{credentials.erb → credentials.text.erb} +0 -0
  260. /data/templates/default/service/{operations.erb → operations.text.erb} +0 -0
  261. /data/templates/default/service/{paths.erb → paths.text.erb} +0 -0
  262. /data/templates/default/service/rest/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
  263. /data/templates/default/service/rest/client/method/docs/{_error.erb → _error.text.erb} +0 -0
  264. /data/templates/default/service/rest/{client.erb → client.text.erb} +0 -0
  265. /data/templates/default/service/rest/{grpc_transcoding.erb → grpc_transcoding.text.erb} +0 -0
  266. /data/templates/default/service/rest/service_stub/grpc_transcoding_method/def/{_query_string_param.erb → _query_string_param.text.erb} +0 -0
  267. /data/templates/default/service/rest/service_stub/method/def/{_request.erb → _request.text.erb} +0 -0
  268. /data/templates/default/service/rest/{service_stub.erb → service_stub.text.erb} +0 -0
  269. /data/templates/default/service/{rest.erb → rest.text.erb} +0 -0
  270. /data/templates/default/service/test/{client_operations.erb → client_operations.text.erb} +0 -0
  271. /data/templates/default/service/test/method/{_assert_response.erb → _assert_response.text.erb} +0 -0
  272. /data/templates/default/service/test/{smoke.erb → smoke.text.erb} +0 -0
  273. /data/templates/default/{service.erb → service.text.erb} +0 -0
  274. /data/templates/default/shared/{_header.erb → _header.text.erb} +0 -0
  275. /data/templates/default/shared/{_license.erb → _license.text.erb} +0 -0
  276. /data/templates/default/shared/{_warning.erb → _warning.text.erb} +0 -0
@@ -15,6 +15,17 @@
15
15
  # limitations under the License.
16
16
 
17
17
  require "active_support/inflector"
18
+ require "google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb"
19
+ require "gapic/presenters/snippet/client_call_presenter"
20
+ require "gapic/presenters/snippet/client_initialization_presenter"
21
+ require "gapic/presenters/snippet/declaration_presenter"
22
+ require "gapic/presenters/snippet/expression_presenter"
23
+ require "gapic/presenters/snippet/iteration_presenter"
24
+ require "gapic/presenters/snippet/parameter_presenter"
25
+ require "gapic/presenters/snippet/request_initialization_presenters"
26
+ require "gapic/presenters/snippet/response_handling_presenters"
27
+ require "gapic/presenters/snippet/statement_presenter"
28
+ require "gapic/presenters/snippet/type_presenter"
18
29
 
19
30
  module Gapic
20
31
  module Presenters
@@ -22,17 +33,27 @@ module Gapic
22
33
  # A presenter for snippets.
23
34
  #
24
35
  class SnippetPresenter
25
- def initialize method_presenter, api
36
+ def initialize method_presenter, api, config: nil, transport: nil
26
37
  @method_presenter = method_presenter
27
38
  @api = api
39
+ @config = config
40
+ @transport = transport || @api.default_transport
41
+ analyze_config
42
+ end
43
+
44
+ attr_reader :config
45
+ attr_reader :transport
46
+
47
+ def config?
48
+ !config.nil?
28
49
  end
29
50
 
30
51
  def client_streaming?
31
52
  @method_presenter.client_streaming?
32
53
  end
33
54
 
34
- def bidi_streaming?
35
- @method_presenter.client_streaming? && @method_presenter.server_streaming?
55
+ def server_streaming?
56
+ @method_presenter.server_streaming?
36
57
  end
37
58
 
38
59
  def response_kind
@@ -48,7 +69,7 @@ module Gapic
48
69
  end
49
70
 
50
71
  def snippet_file_path
51
- "#{@method_presenter.service.service_require.split('/').last}/#{@method_presenter.name}.rb"
72
+ "#{@method_presenter.service.service_require.split('/').last}/#{snippet_method_name}.rb"
52
73
  end
53
74
 
54
75
  def require_path
@@ -56,7 +77,13 @@ module Gapic
56
77
  end
57
78
 
58
79
  def client_type
59
- @method_presenter.service.client_name_full.sub(/^::/, "")
80
+ service = @method_presenter.service
81
+ service = service.rest if transport == :rest
82
+ service.client_name_full.sub(/^::/, "")
83
+ end
84
+
85
+ def service_name_short
86
+ @method_presenter.service.module_name
60
87
  end
61
88
 
62
89
  def request_type
@@ -82,22 +109,184 @@ module Gapic
82
109
  @method_presenter.name
83
110
  end
84
111
 
112
+ def snippet_method_name
113
+ config? ? "#{method_name}_#{snake_config_id}" : method_name
114
+ end
115
+
116
+ def snippet_name
117
+ @config&.metadata&.snippet_name ||
118
+ "Snippet for the #{method_name} call in the #{service_name_short} service"
119
+ end
120
+
121
+ def description
122
+ @config&.metadata&.snippet_description ||
123
+ "This is an auto-generated example demonstrating basic usage of #{client_type}##{method_name}."
124
+ end
125
+
126
+ def disclaimer
127
+ "This snippet has been automatically generated and should be regarded as a code template only. " \
128
+ "It will require modifications to work:\n" \
129
+ "- It may require correct/in-range values for request initialization.\n" \
130
+ "- It may require specifying regional endpoints when creating the service client as shown in https://cloud.google.com/ruby/docs/reference."
131
+ end
132
+
133
+ def snippet_method_parameters
134
+ @snippet_method_parameters ||= begin
135
+ parameters_proto = @config&.signature&.parameters
136
+ if parameters_proto
137
+ parameters_json = @config.json_representation["signature"]["parameters"]
138
+ parameters_proto.each_with_index.map do |param_proto, index|
139
+ ParameterPresenter.new param_proto, parameters_json[index]
140
+ end
141
+ else
142
+ []
143
+ end
144
+ end
145
+ end
146
+
147
+ def snippet_method_parameters_render
148
+ return "" if snippet_method_parameters.empty?
149
+ names = snippet_method_parameters.map { |param| "#{param.name}:" }.join ", "
150
+ "(#{names})"
151
+ end
152
+
153
+ attr_reader :client_initialization
154
+ attr_reader :request_initialization
155
+ attr_reader :client_call
156
+ attr_reader :response_handling
157
+ attr_reader :final_statements
158
+
85
159
  def region_tag
86
160
  gem_presenter = @method_presenter.service.gem
87
- api_id = gem_presenter.api_shortname || gem_presenter.api_id&.split(".")&.first
161
+ prefix = gem_presenter.doc_tag_prefix
88
162
  names = gem_presenter.name.split "-"
89
163
  final_name = names.pop
90
164
  if final_name =~ /^v\d/
91
165
  api_version = final_name
92
- api_id ||= names.last
166
+ prefix ||= names.last
93
167
  else
94
- api_id ||= final_name
168
+ prefix ||= final_name
95
169
  api_version = "v0"
96
170
  end
97
- api_id = api_id.downcase.gsub(/[^a-z0-9]/, "")
171
+ prefix = prefix.downcase.gsub(/[^a-z0-9]/, "")
98
172
  service_name = @method_presenter.service.module_name
99
173
  method_name = @method_presenter.method.name
100
- "#{api_id}_#{api_version}_generated_#{service_name}_#{method_name}_sync"
174
+ type = config? ? "config" : "generated"
175
+ config_id = config? ? "#{@config.metadata.config_id}_" : ""
176
+ "#{prefix}_#{api_version}_#{type}_#{service_name}_#{method_name}_#{config_id}sync"
177
+ end
178
+
179
+ private
180
+
181
+ def analyze_config
182
+ snippet_proto, snippet_json = snippet_proto_info
183
+ call_proto, call_json = call_proto_info snippet_proto, snippet_json
184
+ @client_initialization = build_client_initialization_presenter snippet_proto, snippet_json
185
+ @request_initialization = build_request_initialization_presenter call_proto, call_json
186
+ @response_handling = build_response_handling_presenter call_proto, call_json
187
+ @client_call = build_client_call_presenter call_proto, call_json,
188
+ @request_initialization.request_name,
189
+ @response_handling.response_name
190
+ @final_statements = build_final_statements snippet_proto, snippet_json
191
+ end
192
+
193
+ def snippet_proto_info
194
+ [@config&.snippet, @config&.json_representation&.fetch("snippet", nil)]
195
+ end
196
+
197
+ def call_proto_info snippet_proto, snippet_json
198
+ if snippet_proto&.standard
199
+ [snippet_proto.standard, snippet_json["standard"]]
200
+ elsif snippet_proto&.paginated
201
+ [snippet_proto.paginated, snippet_json["paginated"]]
202
+ elsif snippet_proto&.lro
203
+ [snippet_proto.lro, snippet_json["lro"]]
204
+ elsif snippet_proto&.server_streaming
205
+ [snippet_proto.server_streaming, snippet_json["serverStreaming"]]
206
+ elsif snippet_proto&.client_streaming
207
+ [snippet_proto.client_streaming, snippet_json["clientStreaming"]]
208
+ elsif snippet_proto&.bidi_streaming
209
+ [snippet_proto.bidi_streaming, snippet_json["bidiStreaming"]]
210
+ else
211
+ [nil, nil]
212
+ end
213
+ end
214
+
215
+ def build_client_initialization_presenter snippet_proto, snippet_json
216
+ ClientInitializationPresenter.new snippet_proto&.service_client_initialization,
217
+ snippet_json&.fetch("serviceClientInitialization", nil),
218
+ phase1: !config?, client_type: client_type
219
+ end
220
+
221
+ def build_request_initialization_presenter call_proto, call_json
222
+ phase1 = !config?
223
+ request_init_proto = call_proto&.request_initialization
224
+ request_init_json = call_json&.fetch "requestInitialization", nil
225
+ if client_streaming?
226
+ request_name = phase1 ? "input" : call_proto.client_stream_name
227
+ StreamingRequestInitializationPresenter.new request_init_proto, request_init_json,
228
+ request_name: request_name, request_type: request_type,
229
+ phase1: phase1
230
+ else
231
+ SimpleRequestInitializationPresenter.new request_init_proto, request_init_json,
232
+ request_type: request_type, phase1: phase1
233
+ end
234
+ end
235
+
236
+ def build_response_handling_presenter call_proto, call_json
237
+ phase1 = !config?
238
+ case response_kind
239
+ when :paged
240
+ PaginatedResponseHandlingPresenter.new call_proto&.paginated_handling,
241
+ call_json&.fetch("paginatedHandling", nil),
242
+ paged_response_type: paged_response_type, phase1: phase1
243
+ when :lro
244
+ LroResponseHandlingPresenter.new call_proto&.lro_handling,
245
+ call_json&.fetch("lroHandling", nil),
246
+ phase1: phase1
247
+ when :streaming
248
+ response_name = phase1 ? "output" : call_proto&.server_stream_name
249
+ response_name = nil if response_name == ""
250
+ StreamingResponseHandlingPresenter.new call_proto&.response_handling,
251
+ call_json&.fetch("responseHandling", nil),
252
+ response_name: response_name, base_response_type: base_response_type,
253
+ phase1: phase1
254
+ else
255
+ SimpleResponseHandlingPresenter.new call_proto&.response_handling,
256
+ call_json&.fetch("responseHandling", nil),
257
+ response_type: return_type, phase1: phase1
258
+ end
259
+ end
260
+
261
+ def build_client_call_presenter call_proto, call_json, request_name, response_name
262
+ phase1 = !config?
263
+ if response_kind == :paged
264
+ ClientCallPresenter.new call_proto&.paginated_call, call_json&.fetch("paginatedCall", nil),
265
+ method_name: method_name, request_name: request_name, response_name: response_name,
266
+ client_streaming: client_streaming?, server_streaming: server_streaming?,
267
+ phase1: phase1
268
+ elsif client_streaming? || server_streaming?
269
+ ClientCallPresenter.new call_proto&.initialization_call, call_json&.fetch("initializationCall", nil),
270
+ method_name: method_name, request_name: request_name, response_name: response_name,
271
+ client_streaming: client_streaming?, server_streaming: server_streaming?,
272
+ phase1: phase1
273
+ else
274
+ ClientCallPresenter.new call_proto&.call, call_json&.fetch("call", nil),
275
+ method_name: method_name, request_name: request_name, response_name: response_name,
276
+ client_streaming: false, server_streaming: false, phase1: phase1
277
+ end
278
+ end
279
+
280
+ def build_final_statements snippet_proto, snippet_json
281
+ return [] unless snippet_proto&.final_statements
282
+ snippet_proto.final_statements.each_with_index.map do |statement_proto, index|
283
+ statement_json = snippet_json["finalStatements"][index]
284
+ StatementPresenter.new statement_proto, statement_json
285
+ end
286
+ end
287
+
288
+ def snake_config_id
289
+ ActiveSupport::Inflector.underscore @config.metadata.config_id
101
290
  end
102
291
  end
103
292
  end
@@ -21,12 +21,14 @@ require "gapic/presenters/field_presenter"
21
21
  require "gapic/presenters/file_presenter"
22
22
  require "gapic/presenters/gem_presenter"
23
23
  require "gapic/presenters/message_presenter"
24
+ require "gapic/presenters/method/http_binding_presenter"
24
25
  require "gapic/presenters/method_presenter"
25
26
  require "gapic/presenters/method_rest_presenter"
26
27
  require "gapic/presenters/package_presenter"
27
28
  require "gapic/presenters/resource_presenter"
28
29
  require "gapic/presenters/sample_presenter"
29
30
  require "gapic/presenters/service/lro_client_presenter"
31
+ require "gapic/presenters/service/mixin_client_presenter"
30
32
  require "gapic/presenters/service_presenter"
31
33
  require "gapic/presenters/grpc_service_config_presenter"
32
34
  require "gapic/presenters/service_rest_presenter"
data/lib/gapic/runner.rb CHANGED
@@ -17,7 +17,7 @@
17
17
  require "gapic/generator"
18
18
  require "gapic/schema"
19
19
  require "gapic/schema/request_param_parser"
20
- require "google/protobuf/compiler/plugin.pb"
20
+ require "google/protobuf/compiler/plugin_pb"
21
21
 
22
22
  module Gapic
23
23
  # TODO: Enter docs
@@ -21,6 +21,7 @@ require "gapic/schema/loader"
21
21
  require "gapic/schema/request_param_parser"
22
22
  require "gapic/grpc_service_config/parser"
23
23
  require "gapic/schema/service_config_parser"
24
+ require "gapic/model/api_metadata"
24
25
 
25
26
  module Gapic
26
27
  module Schema
@@ -42,6 +43,7 @@ module Gapic
42
43
  class Api
43
44
  attr_accessor :request
44
45
  attr_accessor :files
46
+ attr_reader :snippet_configs
45
47
 
46
48
  # Initializes an API object with the file descriptors that represent the
47
49
  # API.
@@ -65,6 +67,7 @@ module Gapic
65
67
 
66
68
  parameter_schema ||= Gapic::Generators::DefaultGeneratorParameters.default_schema
67
69
  @protoc_parameters = parse_parameter request.parameter, parameter_schema, error_output
70
+ @snippet_configs = loader.load_snippet_configs self.configuration[:snippet_configs_path]
68
71
  sanity_checks error_output
69
72
  end
70
73
 
@@ -92,7 +95,7 @@ module Gapic
92
95
  end
93
96
 
94
97
  def overrides_of key
95
- configuration&.fetch(:overrides, nil)&.fetch(key, nil) || {}
98
+ configuration&.dig(:overrides, key) || {}
96
99
  end
97
100
 
98
101
  def fix_file_path str
@@ -206,6 +209,22 @@ module Gapic
206
209
  end
207
210
  end
208
211
 
212
+ # Return all snippet configs for the given method address. Returns the
213
+ # empty array if there are no snippet configs.
214
+ # @param address [String] Method address in the form
215
+ # `proto.package.v1.ServiceName.MethodName`
216
+ # @return [Array<
217
+ # Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig>]
218
+ def snippet_configs_for address
219
+ address = address.join "." if address.is_a? ::Array
220
+ @snippet_configs.find_all do |config|
221
+ rpc = config.rpc
222
+ rpc.api_version.any? do |vers|
223
+ address == "#{rpc.proto_package}.#{vers}.#{rpc.service_name}.#{rpc.rpc_name}"
224
+ end
225
+ end
226
+ end
227
+
209
228
  # Structured Hash representation of the configuration file.
210
229
  # @return [Hash]
211
230
  # A Hash of the configuration values.
@@ -250,6 +269,16 @@ module Gapic
250
269
  configuration[:transports].include? "grpc"
251
270
  end
252
271
 
272
+ ##
273
+ # The default transport, used when choosing which client class a docs
274
+ # xref should link to.
275
+ #
276
+ # @return [:grpc,:rest]
277
+ #
278
+ def default_transport
279
+ generate_grpc_clients? ? :grpc : :rest
280
+ end
281
+
253
282
  # Whether to generate standalone snippets
254
283
  def generate_standalone_snippets?
255
284
  configuration.fetch :generate_standalone_snippets, true
@@ -314,6 +343,20 @@ module Gapic
314
343
  @service_config ||= Gapic::Schema::ServiceConfigParser.parse_service_yaml service_config_raw
315
344
  end
316
345
 
346
+ # Parsed API Metadata model
347
+ # @return [Gapic::Model::ApiMetadata]
348
+ def api_metadata
349
+ @api_metadata ||= begin
350
+ api_metadata = Gapic::Model::ApiMetadata.new
351
+ Gapic::Schema::ServiceConfigParser.parse_api_metadata service_config_raw, api_metadata
352
+ api_metadata.standardize_names!
353
+ api_metadata.standardize_title! gem_name: configuration.fetch(:gem, nil)&.fetch(:name, "")
354
+ api_metadata.standardize_descriptions!
355
+ api_metadata.standardize_auto_populated_fields! @service_config
356
+ api_metadata
357
+ end
358
+ end
359
+
317
360
  # Get a resource given its type string
318
361
  def lookup_resource_type resource_type
319
362
  @resource_types[resource_type]
@@ -387,6 +430,9 @@ module Gapic
387
430
  output.puts "WARNING: configured common service #{k} is not present" unless addrs.include? k
388
431
  output.puts "WARNING: configured common service delegate #{v} is not present" unless addrs.include? v
389
432
  end
433
+ # TODO: Sanity check snippet configs to ensure that the type of call
434
+ # (e.g. streaming, lro, etc) matches the rpc type. Warn and remove any
435
+ # noncomplying snippet configs to prevent crashes when rendering.
390
436
  end
391
437
 
392
438
  # Does a pre-analysis of all resources defined in the job. This has
@@ -411,7 +457,7 @@ module Gapic
411
457
  file.resources.each { |resource| populate_resource_lookups resource, types, patterns }
412
458
  file.messages.each { |message| populate_message_resource_lookups message, types, patterns }
413
459
  end
414
- types.each do |_type, resource|
460
+ types.each_value do |resource|
415
461
  parents = resource.parsed_parent_patterns
416
462
  .flat_map { |pat| Array(patterns[pat]) }
417
463
  .uniq
@@ -481,7 +527,7 @@ module Gapic
481
527
 
482
528
  def str_to_key str
483
529
  str = str.to_s
484
- str.start_with?(":") ? str[1..-1].to_sym : str
530
+ str.start_with?(":") ? str[1..].to_sym : str
485
531
  end
486
532
 
487
533
  def key_to_str key
@@ -14,14 +14,15 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- require "google/api/annotations.pb"
18
- require "google/api/client.pb"
19
- require "google/api/field_behavior.pb"
20
- require "google/api/resource.pb"
21
- require "google/api/routing.pb"
22
- require "google/cloud/extended_operations.pb"
23
- require "google/longrunning/operations.pb"
24
- require "google/protobuf/descriptor.pb"
17
+ require "google/api/annotations_pb"
18
+ require "google/api/client_pb"
19
+ require "google/api/field_behavior_pb"
20
+ require "google/api/resource_pb"
21
+ require "google/api/routing_pb"
22
+ require "google/cloud/extended_operations_pb"
23
+ require "google/longrunning/operations_pb"
24
+ require "google/protobuf/descriptor_pb"
25
+ require "gapic/schema/proto_tools"
25
26
  require "gapic/schema/wrappers"
26
27
 
27
28
  module Gapic
@@ -34,6 +35,14 @@ module Gapic
34
35
  @prior_enums = []
35
36
  end
36
37
 
38
+ FILE_EXTENSION_NAMES = {
39
+ "google.api.resource_definition" => [1053, ::Google::Api::ResourceDescriptor, :repeated]
40
+ }.freeze
41
+
42
+ MESSAGE_EXTENSION_NAMES = {
43
+ "google.api.resource" => [1053, ::Google::Api::ResourceDescriptor]
44
+ }.freeze
45
+
37
46
  # Loads a file.
38
47
  #
39
48
  # @param file_descriptor [Google::Protobuf::FileDescriptorProto] the
@@ -48,27 +57,28 @@ module Gapic
48
57
  registry = {}
49
58
 
50
59
  # Load the docs.
51
- location = file_descriptor.source_code_info.location
52
- docs = location.each_with_object({}) { |l, ans| ans[l.path] = l }
60
+ location = file_descriptor.source_code_info.location || []
61
+ docs = location.each_with_object({}) { |l, ans| ans[l.path.to_a] = l }
53
62
 
54
63
  # Load top-level enums.
55
- enums = file_descriptor.enum_type.each_with_index.map do |e, i|
64
+ enums = (file_descriptor.enum_type || []).each_with_index.map do |e, i|
56
65
  load_enum registry, e, address, docs, [5, i]
57
66
  end
58
67
 
59
68
  # Load top-level messages.
60
- messages = file_descriptor.message_type.each_with_index.map do |m, i|
69
+ messages = (file_descriptor.message_type || []).each_with_index.map do |m, i|
61
70
  load_message registry, m, address, docs, [4, i]
62
71
  end
63
72
  messages.each(&method(:update_fields!))
64
73
 
65
74
  # Load services.
66
- services = file_descriptor.service.each_with_index.map do |s, i|
75
+ services = (file_descriptor.service || []).each_with_index.map do |s, i|
67
76
  load_service registry, s, address, docs, [6, i]
68
77
  end
69
78
 
70
79
  # Load top-level resources
71
- resource_descriptors = file_descriptor.options[:".google.api.resource_definition"] if file_descriptor.options
80
+ option_extensions = ProtoTools.parse_options_extensions file_descriptor.options, FILE_EXTENSION_NAMES
81
+ resource_descriptors = option_extensions["google.api.resource_definition"]
72
82
  resources = Array(resource_descriptors).map { |descriptor| Resource.new descriptor }
73
83
 
74
84
  # Construct and return the file.
@@ -76,6 +86,25 @@ module Gapic
76
86
  services, resources, file_to_generate, registry
77
87
  end
78
88
 
89
+ ##
90
+ # Loads snippet configs from the given directory
91
+ #
92
+ # @param path [String] Directory to search for snippet config files
93
+ # @return [Array<
94
+ # Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig>]
95
+ #
96
+ def load_snippet_configs path
97
+ return [] unless path
98
+ Dir.chdir path do
99
+ Dir.glob("**/*.json").map do |file_path|
100
+ json = JSON.load_file file_path
101
+ proto = Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig.new underscore_keys json
102
+ proto.json_representation = json
103
+ proto
104
+ end
105
+ end
106
+ end
107
+
79
108
  # Updates the fields of a message and it's nested messages.
80
109
  #
81
110
  # @param message [Message] the message whose fields and nested messages
@@ -105,7 +134,7 @@ module Gapic
105
134
  address = address.clone << descriptor.name
106
135
 
107
136
  # Load Enum Values
108
- values = descriptor.value.each_with_index.map do |value, i|
137
+ values = (descriptor.value || []).each_with_index.map do |value, i|
109
138
  load_enum_value registry, value, address, docs, path + [2, i]
110
139
  end
111
140
 
@@ -152,20 +181,22 @@ module Gapic
152
181
  address = address.clone << descriptor.name
153
182
 
154
183
  # Load Children
155
- nested_messages = descriptor.nested_type.each_with_index.map do |m, i|
184
+ nested_messages = (descriptor.nested_type || []).each_with_index.map do |m, i|
156
185
  load_message registry, m, address, docs, path + [3, i]
157
186
  end
158
- nested_enums = descriptor.enum_type.each_with_index.map do |e, i|
187
+ nested_enums = (descriptor.enum_type || []).each_with_index.map do |e, i|
159
188
  load_enum registry, e, address, docs, path + [4, i]
160
189
  end
161
- fields = descriptor.field.each_with_index.map do |f, i|
190
+ fields = (descriptor.field || []).each_with_index.map do |f, i|
162
191
  load_field registry, f, address, docs, path + [2, i]
163
192
  end
164
- extensions = descriptor.extension.each_with_index.map do |e, i|
193
+ fields.each { |field| field.populate_oneof_siblings! fields }
194
+ extensions = (descriptor.extension || []).each_with_index.map do |e, i|
165
195
  load_field registry, e, address, docs, path + [6, i]
166
196
  end
167
197
 
168
- resource_descriptor = descriptor.options[:".google.api.resource"] if descriptor.options
198
+ option_extensions = ProtoTools.parse_options_extensions descriptor.options, MESSAGE_EXTENSION_NAMES
199
+ resource_descriptor = option_extensions["google.api.resource"]
169
200
  resource = resource_descriptor ? Resource.new(resource_descriptor) : nil
170
201
 
171
202
  # Construct, cache, and return.
@@ -212,7 +243,7 @@ module Gapic
212
243
  address = address.clone << descriptor.name
213
244
 
214
245
  # Load children
215
- methods = descriptor.method.each_with_index.map do |m, i|
246
+ methods = (descriptor["method"] || descriptor.method || []).each_with_index.map do |m, i|
216
247
  load_method registry, m, address, docs, path + [2, i]
217
248
  end
218
249
 
@@ -262,6 +293,20 @@ module Gapic
262
293
 
263
294
  private
264
295
 
296
+ ##
297
+ # Transforms all keys in the given hash to snake case.
298
+ #
299
+ def underscore_keys input
300
+ case input
301
+ when Hash
302
+ input.to_h { |key, value| [ActiveSupport::Inflector.underscore(key), underscore_keys(value)] }
303
+ when Array
304
+ input.map { |elem| underscore_keys elem }
305
+ else
306
+ input
307
+ end
308
+ end
309
+
265
310
  def add_to_registry registry, address, obj
266
311
  registry[address.join(".")] = obj
267
312
  obj
@@ -269,7 +314,7 @@ module Gapic
269
314
 
270
315
  def cached_obj collection, type_name
271
316
  # Remove leading dot.
272
- type_name = type_name[1..-1] if type_name && type_name[0] == "."
317
+ type_name = type_name[1..] if type_name && type_name[0] == "."
273
318
 
274
319
  # Create an address from the type & check cache.
275
320
  collection.find { |m| m.address == type_name.split(".") }
@@ -43,10 +43,10 @@ module Gapic
43
43
  # @param map_params_list [Array<String>]
44
44
  # @return Gapic::Schema::ParameterSchema
45
45
  def self.create bool_params_list: [], string_params_list: [], array_params_list: [], map_params_list: []
46
- bool_params = bool_params_list.map { |val| [val, val] }.to_h
47
- string_params = string_params_list.map { |val| [val, val] }.to_h
48
- array_params = array_params_list.map { |val| [val, val] }.to_h
49
- map_params = map_params_list.map { |val| [val, val] }.to_h
46
+ bool_params = bool_params_list.to_h { |val| [val, val] }
47
+ string_params = string_params_list.to_h { |val| [val, val] }
48
+ array_params = array_params_list.to_h { |val| [val, val] }
49
+ map_params = map_params_list.to_h { |val| [val, val] }
50
50
 
51
51
  ParameterSchema.new bool_params, string_params, array_params, map_params
52
52
  end
@@ -58,16 +58,16 @@ module Gapic
58
58
  # @param map_aliases [Hash{String => String}]
59
59
  # @return Gapic::Schema::ParameterSchema
60
60
  def extend_with_aliases bool_aliases: {}, string_aliases: {}, array_aliases: {}, map_aliases: {}
61
- bool_params = @bool_params
61
+ bool_params = @bool_params.dup
62
62
  bool_aliases.each { |param_alias, param| bool_params[param_alias] = param if bool_params.key? param }
63
63
 
64
- string_params = @string_params
64
+ string_params = @string_params.dup
65
65
  string_aliases.each { |param_alias, param| string_params[param_alias] = param if string_params.key? param }
66
66
 
67
- array_params = @array_params
67
+ array_params = @array_params.dup
68
68
  array_aliases.each { |param_alias, param| array_params[param_alias] = param if array_params.key? param }
69
69
 
70
- map_params = @map_params
70
+ map_params = @map_params.dup
71
71
  map_aliases.each { |param_alias, param| map_params[param_alias] = param if map_params.key? param }
72
72
 
73
73
  ParameterSchema.new bool_params, string_params, array_params, map_params