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
@@ -14,11 +14,15 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
+ require "gapic/presenters/service/sub_client_presenter"
18
+
17
19
  module Gapic
18
20
  module Presenters
19
21
  module Service
20
22
  ##
21
- # Presenter for the generation of the client for nonstandard LROs
23
+ # @private
24
+ # Presenter for the generation of the sub-client for LRO
25
+ # inside a host service's client class
22
26
  #
23
27
  # @!attribute [r] service
24
28
  # Full name of the service providing the nonstandard LRO functionality
@@ -43,13 +47,7 @@ module Gapic
43
47
  # The type of a helper generated for this service if any
44
48
  # @return [String. nil]
45
49
  #
46
- class LroClientPresenter
47
- attr_reader :service
48
- attr_reader :client_class_name
49
- attr_reader :client_class_docname
50
- attr_reader :client_var_name
51
- attr_reader :require_str
52
- attr_reader :service_description
50
+ class LroClientPresenter < SubClientPresenter
53
51
  attr_reader :helper_type
54
52
 
55
53
  ##
@@ -76,12 +74,14 @@ module Gapic
76
74
  require_str:,
77
75
  service_description:,
78
76
  helper_type: nil
79
- @service = service
80
- @client_class_name = client_class_name
81
- @client_class_docname = client_class_docname
82
- @client_var_name = client_var_name
83
- @require_str = require_str
84
- @service_description = service_description
77
+ super(service: service,
78
+ client_class_name: client_class_name,
79
+ client_class_docname: client_class_docname,
80
+ client_var_name: client_var_name,
81
+ require_str: require_str,
82
+ service_description: service_description
83
+ )
84
+
85
85
  @helper_type = helper_type
86
86
  end
87
87
  end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2022 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
+ require "gapic/presenters/service/sub_client_presenter"
18
+
19
+ module Gapic
20
+ module Presenters
21
+ module Service
22
+ ##
23
+ # @private
24
+ # Presenter for the generation of the sub-client for mixins
25
+ # inside a host service's client class
26
+ #
27
+ # @!attribute [r] service
28
+ # Full name of the service providing the nonstandard LRO functionality
29
+ # @return [String]
30
+ # @!attribute [r] client_class_name
31
+ # Full name of the class of the client of the service
32
+ # @return [String]
33
+ # @!attribute [r] client_class_docname
34
+ # Name of the class as it should appear in the documentation
35
+ # @return [String]
36
+ # @!attribute [r] client_var_name
37
+ # Name for the variable for the client of the service
38
+ # @return [String]
39
+ # @!attribute [r] require_str
40
+ # Path to `require` the client of the service
41
+ # @return [String]
42
+ # @!attribute [r] service_description
43
+ # The description to place in the comments to this client's
44
+ # attribute in the library services's client class
45
+ # @return [String]
46
+ # @!attribute [r] bindings_override
47
+ # Override of Http bindings for the methods of the mixin service
48
+ # methods are specified by their full name, e.g. `google.cloud.location.Locations.ListLocations`
49
+ # @return [Hash{String, Array<::Gapic::Model::Method::HttpAnnotation::HttpBinding>}]
50
+ #
51
+ class MixinClientPresenter < SubClientPresenter
52
+ attr_reader :bindings_override
53
+
54
+ ##
55
+ # @param service [String]
56
+ # Full name of the service providing the nonstandard LRO functionality
57
+ # @param client_class_name [String]
58
+ # Full name of the class of the client of the service
59
+ # @param client_class_docname [String]
60
+ # Name of the class as it should appear in the documentation
61
+ # @param client_var_name [String]
62
+ # Name for the variable for the client of the service
63
+ # @param require_str [String]
64
+ # Path to `require` the client of the service
65
+ # @param service_description [String]
66
+ # The description to place in the comments to this client's
67
+ # attribute in the library services's client class
68
+ #
69
+ def initialize service:,
70
+ client_class_name:,
71
+ client_class_docname:,
72
+ client_var_name:,
73
+ require_str:,
74
+ service_description:,
75
+ bindings_override:
76
+ super(service: service,
77
+ client_class_name: client_class_name,
78
+ client_class_docname: client_class_docname,
79
+ client_var_name: client_var_name,
80
+ require_str: require_str,
81
+ service_description: service_description
82
+ )
83
+
84
+ @bindings_override = bindings_override
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2022 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 Service
20
+ ##
21
+ # @private
22
+ # Base class for the presenter for the generation of the clients
23
+ # for sub-services (mixins, lros) inside a host service's client class
24
+ #
25
+ # @!attribute [r] service
26
+ # Full name of the service providing the nonstandard LRO functionality
27
+ # @return [String]
28
+ # @!attribute [r] client_class_name
29
+ # Full name of the class of the client of the service
30
+ # @return [String]
31
+ # @!attribute [r] client_class_docname
32
+ # Name of the class as it should appear in the documentation
33
+ # @return [String]
34
+ # @!attribute [r] client_var_name
35
+ # Name for the variable for the client of the service
36
+ # @return [String]
37
+ # @!attribute [r] require_str
38
+ # Path to `require` the client of the service
39
+ # @return [String]
40
+ # @!attribute [r] service_description
41
+ # The description to place in the comments to this client's
42
+ # attribute in the library services's client class
43
+ # @return [String]
44
+ #
45
+ class SubClientPresenter
46
+ attr_reader :service
47
+ attr_reader :client_class_name
48
+ attr_reader :client_class_docname
49
+ attr_reader :client_var_name
50
+ attr_reader :require_str
51
+ attr_reader :service_description
52
+
53
+ ##
54
+ # @param service [String]
55
+ # Full name of the service providing the nonstandard LRO functionality
56
+ # @param client_class_name [String]
57
+ # Full name of the class of the client of the service
58
+ # @param client_class_docname [String]
59
+ # Name of the class as it should appear in the documentation
60
+ # @param client_var_name [String]
61
+ # Name for the variable for the client of the service
62
+ # @param require_str [String]
63
+ # Path to `require` the client of the service
64
+ # @param service_description [String]
65
+ # The description to place in the comments to this client's
66
+ # attribute in the library services's client class
67
+ #
68
+ def initialize service:,
69
+ client_class_name:,
70
+ client_class_docname:,
71
+ client_var_name:,
72
+ require_str:,
73
+ service_description:
74
+ @service = service
75
+ @client_class_name = client_class_name
76
+ @client_class_docname = client_class_docname
77
+ @client_var_name = client_var_name
78
+ @require_str = require_str
79
+ @service_description = service_description
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -30,6 +30,15 @@ module Gapic
30
30
  # @return [Gapic::Presenters::ServiceRestPresenter]
31
31
  attr_reader :rest
32
32
 
33
+ # @return [String] String representation of this presenter type.
34
+ attr_reader :type
35
+
36
+ ##
37
+ # @param gem_presenter [Gapic::Presenters::GemPresenter]
38
+ # @param api [Gapic::Schema::Api]
39
+ # @param service [Gapic::Presenters::ServicePresenter]
40
+ # @param parent_service [Gapic::Presenters::ServicePresenter]
41
+ #
33
42
  def initialize gem_presenter, api, service, parent_service: nil
34
43
  @gem_presenter = gem_presenter
35
44
  @api = api
@@ -37,6 +46,7 @@ module Gapic
37
46
  @parent_service = parent_service
38
47
  @rest = ServiceRestPresenter.new self, api
39
48
  @nonstandard_lro = api.nonstandard_lro_model_for service.full_name
49
+ @type = "service"
40
50
  end
41
51
 
42
52
  def gem
@@ -51,8 +61,12 @@ module Gapic
51
61
  PackagePresenter.new @gem_presenter, @api, @service.parent.package
52
62
  end
53
63
 
64
+ def special_compute_behavior?
65
+ address[0] == "google" && address[1] == "cloud" && address[2] == "compute" && !address[3].to_s.empty?
66
+ end
67
+
54
68
  ##
55
- # @return [Boolean]
69
+ # @return [Boolean] Whether the service is marked as deprecated.
56
70
  #
57
71
  def is_deprecated?
58
72
  @service.is_deprecated?
@@ -65,6 +79,17 @@ module Gapic
65
79
  @methods ||= @service.methods.map { |m| MethodPresenter.new self, @api, m }
66
80
  end
67
81
 
82
+ ##
83
+ # @return [Boolean] Whether this service autogenerates UUID fields.
84
+ #
85
+ def autogenerates_uuid?
86
+ @methods.any? { |method| method.auto_populated_fields.length.positive? }
87
+ end
88
+
89
+ ##
90
+ # The address of this service split into an array
91
+ #
92
+ # @return [Array<String>]
68
93
  def address
69
94
  @service.address
70
95
  end
@@ -98,8 +123,15 @@ module Gapic
98
123
  ActiveSupport::Inflector.camelize @service.address[-2]
99
124
  end
100
125
 
101
- def doc_description disable_xrefs: false
102
- @service.docs_leading_comments disable_xrefs: disable_xrefs
126
+ ##
127
+ # The description as it should appear in YARD docs.
128
+ #
129
+ # @param transport [:grpc,:rest] Whether xref links should go to REST or
130
+ # gRPC client classes. Uses the default transport if not provided.
131
+ # @return [String]
132
+ #
133
+ def doc_description disable_xrefs: false, transport: nil
134
+ @service.docs_leading_comments disable_xrefs: disable_xrefs, transport: transport
103
135
  end
104
136
 
105
137
  def name
@@ -209,15 +241,36 @@ module Gapic
209
241
  "localhost"
210
242
  end
211
243
 
244
+ ##
245
+ # Returns a template for the endpoint, with the universe domain component
246
+ # of the url replaced with the string `$UNIVERSE_DOMAIN$`.
247
+ #
248
+ # @return [String]
249
+ #
250
+ def client_endpoint_template
251
+ client_endpoint&.sub(/.googleapis.com$/, ".$UNIVERSE_DOMAIN$")
252
+ end
253
+
212
254
  def generic_endpoint?
213
255
  gem.generic_endpoint?
214
256
  end
215
257
 
258
+ # @return [String] The api_version for this service, or empty if not defined.
259
+ def api_version
260
+ @service.api_version.to_s
261
+ end
262
+
216
263
  def client_scopes
217
- common_service_delegate&.client_scopes ||
218
- @service.scopes ||
219
- default_config(:oauth_scopes) ||
220
- []
264
+ scopes = Array(common_service_delegate&.client_scopes)
265
+ return scopes unless scopes.empty?
266
+
267
+ scopes = Array(@service.scopes)
268
+ return scopes unless scopes.empty?
269
+
270
+ scopes = Array(default_config(:oauth_scopes))
271
+ return scopes unless scopes.empty?
272
+
273
+ []
221
274
  end
222
275
 
223
276
  def credentials_name
@@ -312,14 +365,36 @@ module Gapic
312
365
  ruby_file_path @api, "#{service_name_full}::#{paths_name}"
313
366
  end
314
367
 
368
+ ##
369
+ # @return [Boolean] Whether the generation of REST clients is requested
370
+ # and can be done because at least one method has rest bindings.
371
+ #
315
372
  def generate_rest_clients?
316
- @api.generate_rest_clients?
373
+ @api.generate_rest_clients? && methods_rest_bindings?
317
374
  end
318
375
 
376
+ ##
377
+ # @return [Boolean] Whether the generation of gRPC clients is requested
378
+ #
319
379
  def generate_grpc_clients?
320
380
  @api.generate_grpc_clients?
321
381
  end
322
382
 
383
+ ##
384
+ # @return [Boolean]
385
+ #
386
+ def supports_multiple_transports?
387
+ generate_rest_clients? && generate_grpc_clients?
388
+ end
389
+
390
+ def client_suffix_for_default_transport
391
+ if @api.default_transport == :grpc
392
+ "#{module_name}::#{client_name}"
393
+ else
394
+ "#{module_name}::Rest::#{client_name}"
395
+ end
396
+ end
397
+
323
398
  ##
324
399
  # @return [Boolean] whether this service contains any methods with REST bindings
325
400
  #
@@ -329,10 +404,10 @@ module Gapic
329
404
 
330
405
  ##
331
406
  # @return [Enumerable<Gapic::Presenters::MethodPresenter>]
332
- # List of mods for which REST bindings are present and REST methods can be generated
407
+ # List of methods for which REST bindings are present and REST methods can be generated
333
408
  #
334
409
  def methods_rest_bindings
335
- methods.select { |method| method.rest.path? && method.rest.verb? }
410
+ methods.select(&:can_generate_rest?)
336
411
  end
337
412
 
338
413
  def test_client_file_path
@@ -411,7 +486,7 @@ module Gapic
411
486
 
412
487
  def lro_service
413
488
  lro = @service.parent.parent.files.find { |file| file.name == "google/longrunning/operations.proto" }
414
- return ServicePresenter.new @gem_presenter, @api, lro.services.first, parent_service: self unless lro.nil?
489
+ ServicePresenter.new @gem_presenter, @api, lro.services.first, parent_service: self unless lro.nil?
415
490
  end
416
491
 
417
492
  def config_channel_args
@@ -459,22 +534,12 @@ module Gapic
459
534
  # their names are returned together in an array.
460
535
  # For Ruby currently we have 1:1 proto to code
461
536
  # correspondence for methods, so our generation is easier
462
- rpcs: methods.map { |m| [m.grpc_method_name, m.drift_manifest] }.to_h
537
+ rpcs: methods.to_h { |m| [m.grpc_method_name, m.drift_manifest] }
463
538
  }
464
539
  }
465
540
  }
466
541
  end
467
542
 
468
- ##
469
- # How comments in the generated libraries refer to the GRPC client
470
- # if no REST code is generated, this should just be "client",
471
- # if REST code is generated, this should be disambiguated into the "GRPC client"
472
- #
473
- # @return [String]
474
- def grpc_client_designation
475
- generate_rest_clients? ? "GRPC client" : "client"
476
- end
477
-
478
543
  ##
479
544
  # The method to use for quick start samples. Normally this is simply the
480
545
  # first non-client-streaming method defined, but it can be overridden via
@@ -498,13 +563,34 @@ module Gapic
498
563
  # @return [ServicePresenter,ServiceRestPresenter,nil]
499
564
  #
500
565
  def usable_service_presenter
501
- if @api.generate_grpc_clients?
566
+ if generate_grpc_clients?
502
567
  self
503
- elsif @api.generate_rest_clients? && methods_rest_bindings?
568
+ elsif generate_rest_clients?
504
569
  rest
505
570
  end
506
571
  end
507
572
 
573
+ ##
574
+ # Whether this service presenter is a mixin inside a host service's gem
575
+ # (and not in its own gem)
576
+ #
577
+ # @return [Boolean]
578
+ #
579
+ def is_hosted_mixin?
580
+ Gapic::Model::Mixins.mixin_service_address? address, gem_name: @gem_presenter.name
581
+ end
582
+
583
+ ##
584
+ # Whether this service presenter is a mixin inside it's own gem
585
+ # (and not in another service's gem)
586
+ #
587
+ # @return [Boolean]
588
+ #
589
+ def is_main_mixin_service?
590
+ Gapic::Model::Mixins.mixin_service_address?(address) &&
591
+ !Gapic::Model::Mixins.mixin_service_address?(address, gem_name: @gem_presenter.name)
592
+ end
593
+
508
594
  ##
509
595
  # Whether there are mixin services that should be referenced
510
596
  # in the client for this service
@@ -515,14 +601,74 @@ module Gapic
515
601
  @gem_presenter.mixins?
516
602
  end
517
603
 
604
+ ##
605
+ # The models for the mixins
606
+ #
607
+ # @return [Enumerable<::Gapic::Model::Mixins::Mixin>]
608
+ #
609
+ def mixin_models
610
+ @gem_presenter.mixins_model.mixins
611
+ end
612
+
613
+ ##
614
+ # Whether there are mixin services that this package has http binding overrides for.
615
+ #
616
+ # @return [Boolean]
617
+ #
618
+ def mixin_binding_overrides?
619
+ mixin_presenters.any? { |mixin| !mixin.bindings_override.empty? }
620
+ end
621
+
622
+ ##
623
+ # Whether config for this service should include the `bindings_override` field.
624
+ # This field is needed:
625
+ # * if a service is a mixin in it's own package, e.g. `google.Cloud.Location`
626
+ # * if a service hosts a mixin and has bindings overrides for it
627
+ # but the generated Operations clients should not have it since override for
628
+ # their bindings are generated instead of set during runtime.
629
+ #
630
+ # GRPC clients should not have this for now, since the overrides are not currently used.
631
+ #
632
+ def mixin_should_generate_override_config?
633
+ false
634
+ end
635
+
518
636
  ##
519
637
  # The mixin services that should be referenced
520
638
  # in the client for this service
521
639
  #
522
- # @return [Enumerable<Gapic::Model::Mixins::Mixin>]
640
+ # @return [Enumerable<Gapic::Presenters::Service::MixinClientPresenter>]
523
641
  #
524
- def mixins
525
- @gem_presenter.mixins_model.mixins
642
+ def mixin_presenters
643
+ return [] unless mixins?
644
+ mixin_models.map do |model|
645
+ # we don't have mixin's descriptors loaded, so instead of starting with descriptor's methods
646
+ # and looking up the override, we'll start with overrides and see if any fit the mixin's namespace
647
+ bindings_override = begin
648
+ if @api.service_config&.http.nil?
649
+ {}
650
+ else
651
+ service_http_rules = @api.service_config.http.rules.select do |http_rule|
652
+ http_rule.selector.include? model.service
653
+ end
654
+
655
+ service_http_rules.to_h do |http_rule|
656
+ bindings = Gapic::Model::Method::HttpAnnotation.new(http_rule).bindings.map do |binding|
657
+ Gapic::Presenters::Method::HttpBindingPresenter.new binding
658
+ end
659
+ [http_rule.selector, bindings]
660
+ end
661
+ end
662
+ end
663
+
664
+ Gapic::Presenters::Service::MixinClientPresenter.new service: model.service,
665
+ client_class_name: model.client_class_name,
666
+ client_class_docname: model.client_class_docname,
667
+ client_var_name: model.client_var_name,
668
+ require_str: model.require_str,
669
+ service_description: model.service_description,
670
+ bindings_override: bindings_override
671
+ end
526
672
  end
527
673
 
528
674
  ##
@@ -611,13 +757,14 @@ module Gapic
611
757
  return [] unless nonstandard_lro_consumer?
612
758
  nonstandard_lros_models.map do |lro|
613
759
  lro_wrapper = @api.lookup lro.service_full_name
614
- lro_service = ServicePresenter.new(@gem_presenter, @api, lro_wrapper).usable_service_presenter
760
+ lro_service = ServicePresenter.new @gem_presenter, @api, lro_wrapper
615
761
 
616
762
  service_description = "long-running operations via #{lro_service.name}"
763
+ client_var_name = ruby_file_path_for_namespace lro_service.name
617
764
  Gapic::Presenters::Service::LroClientPresenter.new service: lro.service_full_name,
618
765
  client_class_name: lro_service.client_name_full,
619
766
  client_class_docname: lro_service.client_name_full,
620
- client_var_name: lro_service.service_directory_name,
767
+ client_var_name: client_var_name,
621
768
  require_str: lro_service.service_require,
622
769
  service_description: service_description,
623
770
  helper_type: lro_service.nonstandard_lro_name_full
@@ -644,12 +791,15 @@ module Gapic
644
791
  #
645
792
  # @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter, Gapic::Model::Mixins::Mixin>]
646
793
  def subclients
647
- ([] << lro_client_presenter << mixins << nonstandard_lros).flatten.compact
794
+ [lro_client_presenter, mixin_presenters, nonstandard_lros].flatten.compact
648
795
  end
649
796
 
650
- private
797
+ def lro_subclients
798
+ [lro_client_presenter, nonstandard_lros].flatten.compact
799
+ end
651
800
 
652
801
  ##
802
+ # @private
653
803
  # The nonstandard LRO models for the nonstandard LROs that are used by the methods of this service
654
804
  #
655
805
  # @return [Enumerable<Gapic::Model::Method::Lro>]
@@ -658,6 +808,8 @@ module Gapic
658
808
  methods.select(&:nonstandard_lro?).map(&:lro).uniq(&:service_full_name)
659
809
  end
660
810
 
811
+ private
812
+
661
813
  def default_config key
662
814
  return unless @service.parent.parent.configuration[:defaults]
663
815
  return unless @service.parent.parent.configuration[:defaults][:service]