gapic-generator 0.11.0 → 0.45.2

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 +303 -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 +24 -10
  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/{rest_pagination_info.rb → compute_pagination_info.rb} +31 -20
  30. data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
  31. data/lib/gapic/presenters/method_presenter.rb +109 -35
  32. data/lib/gapic/presenters/method_rest_presenter.rb +83 -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 +154 -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 +199 -274
  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
@@ -37,23 +37,21 @@ module Gapic
37
37
  # Writes all the files for the gem.
38
38
  #
39
39
  def bootstrap
40
- gen "readme.erb", "README.md"
41
- gen "gemspec.erb", "gapic-generator-#{gem_name}.gemspec"
42
- gen "rakefile.erb", "Rakefile"
43
- gen "gemfile.erb", "Gemfile"
44
- gen "gitignore.erb", ".gitignore"
45
- gen "rubocop.erb", ".rubocop.yml"
46
- gen "dockerfile.erb", "Dockerfile"
47
- gen "entrypoint.erb", "docker-entrypoint.sh"
48
- gen "gapic_sh.erb", "gapic.sh"
49
- gen "binary.erb", "bin/protoc-gen-ruby_#{gem_name}"
50
- gen "generator.erb",
51
- "lib/gapic/generators/#{gem_name}_generator.rb"
52
- gen "version.erb",
53
- "lib/gapic/generator/#{gem_name}/version.rb"
54
- gen "test_helper.erb", "test/test_helper.rb"
55
- gen "test_generator.erb", "test/generators/#{gem_name}_test.rb"
56
- cp "speech_desc.bin", "proto_input/speech_desc.bin"
40
+ gen "readme", "README.md"
41
+ gen "gemspec", "gapic-generator-#{gem_name}.gemspec"
42
+ gen "rakefile", "Rakefile"
43
+ gen "gemfile", "Gemfile"
44
+ gen "gitignore", ".gitignore"
45
+ gen "rubocop", ".rubocop.yml"
46
+ gen "dockerfile", "Dockerfile"
47
+ gen "entrypoint", "docker-entrypoint.sh"
48
+ gen "gapic_sh", "gapic.sh"
49
+ gen "binary", "bin/protoc-gen-ruby_#{gem_name}"
50
+ gen "generator", "lib/gapic/generators/#{gem_name}_generator.rb"
51
+ gen "version", "lib/gapic/generator/#{gem_name}/version.rb"
52
+ gen "test_helper", "test/test_helper.rb"
53
+ gen "test_generator", "test/generators/#{gem_name}_test.rb"
54
+ cp "speech_desc.bin", "proto_input/speech_desc.bin"
57
55
  end
58
56
 
59
57
  private
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Gapic
18
18
  module Generator
19
- VERSION = "0.11.0"
19
+ VERSION = "0.45.2"
20
20
  end
21
21
  end
@@ -16,7 +16,7 @@
16
16
 
17
17
  require "gapic/file_formatter"
18
18
  require "action_controller"
19
- require "google/protobuf/compiler/plugin.pb"
19
+ require "google/protobuf/compiler/plugin_pb"
20
20
  require "tempfile"
21
21
 
22
22
  module Gapic
@@ -46,8 +46,10 @@ module Gapic
46
46
  template_path = File.expand_path template_path
47
47
  helpers_path = File.join template_path, "helpers"
48
48
 
49
- # Configure Dependencies to know how to load helpers
50
- ActiveSupport::Dependencies.autoload_paths.prepend helpers_path
49
+ # For some reason autoload doesn't seem to be working for helpers in Rails 8:
50
+ # ActiveSupport::Dependencies.autoload_paths.prepend helpers_path
51
+ # So instead we eagerly load helpers
52
+ Dir.glob("#{helpers_path}/*_helper.rb") { |file| require file }
51
53
 
52
54
  # Configure the controller to know about the templates and helpers
53
55
  controller.prepend_view_path template_path
@@ -66,7 +68,7 @@ module Gapic
66
68
  template: template, formats: :text, locals: args
67
69
  )
68
70
  Google::Protobuf::Compiler::CodeGeneratorResponse::File.new(
69
- name: filename, content: content
71
+ name: filename, content: String.new(content)
70
72
  )
71
73
  end
72
74
  alias_method :g, :generate_file
@@ -17,6 +17,7 @@
17
17
  require "gapic/generators/base_generator"
18
18
  require "gapic/generators/default_generator_parameters"
19
19
  require "gapic/presenters"
20
+ require "gapic/package_snippets"
20
21
 
21
22
  module Gapic
22
23
  module Generators
@@ -47,57 +48,92 @@ module Gapic
47
48
 
48
49
  gem = gem_presenter || Gapic::Presenters.gem_presenter(@api)
49
50
 
51
+ if @api.generate_rest_clients? && gem.packages.find(&:generate_rest_clients?).nil?
52
+ raise "Rest transport specified but no services have HTTP bindings"
53
+ end
54
+
50
55
  gem.packages.each do |package|
56
+ package_snippets = PackageSnippets.new snippet_dir: "snippets",
57
+ proto_package: package.name,
58
+ gem_name: gem.name
59
+
51
60
  # Package level files
52
- files << g("package.erb", "lib/#{package.package_file_path}", package: package)
61
+ files << g("package", "lib/#{package.package_file_path}", package: package)
62
+ files << g("package_rest", "lib/#{package.package_rest_file_path}", package: package) if package.generate_rest_clients?
63
+ files << g("binding_override", "lib/#{package.mixin_binding_overrides_file_path}", package: package) if package.mixin_binding_overrides? && package.generate_rest_clients?
53
64
 
54
65
  package.services.each do |service|
66
+ should_generate_grpc = service.generate_grpc_clients?
67
+ should_generate_rest = service.generate_rest_clients?
68
+
55
69
  # Service level files
56
- files << g("service.erb", "lib/#{service.service_file_path}", service: service)
57
- files << g("service/rest.erb", "lib/#{service.rest.service_rest_file_path}", service: service) if @api.generate_rest_clients? and service.methods_rest_bindings?
58
- files << g("service/client.erb", "lib/#{service.client_file_path}", service: service) unless @api.generate_rest_clients?
59
- files << g("service/credentials.erb", "lib/#{service.credentials_file_path}", service: service) unless gem.generic_endpoint?
60
- files << g("service/paths.erb", "lib/#{service.paths_file_path}", service: service) if service.paths?
61
- files << g("service/operations.erb", "lib/#{service.operations_file_path}", service: service) if service.lro? && !@api.generate_rest_clients?
62
- files << g("service/nonstandard_lro.erb", "lib/#{service.nonstandard_lro_file_path}", service: service) if service.nonstandard_lro_provider? && !service.methods_rest_bindings?
63
- files << g("service/nonstandard_lro.erb", "lib/#{service.rest.nonstandard_lro_file_path}", service: service) if service.nonstandard_lro_provider? && service.methods_rest_bindings?
64
- files << g("service/rest/client.erb", "lib/#{service.rest.client_file_path}", service: service) if @api.generate_rest_clients? and service.methods_rest_bindings?
65
- 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?
66
- 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?
67
- files << g("service/test/client.erb", "test/#{service.test_client_file_path}", service: service) unless @api.generate_rest_clients?
68
- files << g("service/test/client_paths.erb", "test/#{service.test_paths_file_path}", service: service) if service.paths?
69
- files << g("service/test/client_operations.erb", "test/#{service.test_client_operations_file_path}", service: service) if service.lro? && !@api.generate_rest_clients?
70
+ files << g("service", "lib/#{service.service_file_path}", service: service)
71
+ files << g("service/credentials", "lib/#{service.credentials_file_path}", service: service) unless gem.generic_endpoint?
72
+ files << g("service/paths", "lib/#{service.paths_file_path}", service: service) if service.paths?
73
+
74
+ # Rest module file
75
+ files << g("service/rest", "lib/#{service.rest.service_rest_file_path}", service: service) if should_generate_rest
76
+
77
+ # client.rb
78
+ files << g("service/client", "lib/#{service.client_file_path}", service: service) if should_generate_grpc
79
+ files << g("service/rest/client", "lib/#{service.rest.client_file_path}", service: service) if should_generate_rest
80
+
81
+ # Standard LRO shim
82
+ files << g("service/operations", "lib/#{service.operations_file_path}", service: service) if service.lro? && should_generate_grpc
83
+ files << g("service/rest/operations", "lib/#{service.rest.operations_file_path}", service: service) if service.rest.lro? && should_generate_rest
84
+
85
+ # Nonstandard LRO shim
86
+ files << g("service/nonstandard_lro", "lib/#{service.nonstandard_lro_file_path}", service: service) if service.nonstandard_lro_provider? && should_generate_grpc
87
+ files << g("service/rest/nonstandard_lro", "lib/#{service.rest.nonstandard_lro_file_path}", service: service) if service.rest.nonstandard_lro_provider? && should_generate_rest
88
+
89
+ # Rest-only `service.stub` file
90
+ files << g("service/rest/service_stub", "lib/#{service.rest.service_stub_file_path}", service: service) if should_generate_rest
91
+
92
+ # Unit tests for `client.rb`
93
+ files << g("service/test/client", "test/#{service.test_client_file_path}", service: service) if should_generate_grpc
94
+ files << g("service/rest/test/client", "test/#{service.rest.test_client_file_path}", service: service) if should_generate_rest
95
+
96
+ # Unit tests for `paths.rb`
97
+ files << g("service/test/client_paths", "test/#{service.test_paths_file_path}", service: service) if service.paths? && should_generate_grpc
98
+
99
+ # Unit tests for standard LRO shim
100
+ files << g("service/test/client_operations", "test/#{service.test_client_operations_file_path}", service: service) if service.lro? && should_generate_grpc
70
101
 
71
102
  if @api.generate_standalone_snippets?
72
103
  service.methods.each do |method|
73
- snippet = method.snippet
74
- files << g("snippets/standalone.erb", "snippets/#{snippet.snippet_file_path}", snippet: snippet)
104
+ method.all_snippets.each do |snippet|
105
+ snippet_file = g("snippets/standalone", "snippets/#{snippet.snippet_file_path}", snippet: snippet)
106
+ package_snippets.add(method_presenter: method, snippet_presenter: snippet, snippet_file: snippet_file)
107
+ end
75
108
  end
76
109
  end
77
110
  end
111
+
112
+ files += package_snippets.files if @api.generate_standalone_snippets?
78
113
  end
79
114
 
80
115
  # Gem level files
81
- files << g("gem/gitignore.erb", ".gitignore", gem: gem)
82
- files << g("gem/version.erb", "lib/#{gem.version_file_path}", gem: gem)
83
- files << g("gem/test_helper.erb", "test/helper.rb", gem: gem)
84
- files << g("gem/gemspec.erb", "#{gem.name}.gemspec", gem: gem)
85
- files << g("gem/gemfile.erb", "Gemfile", gem: gem)
86
- files << g("gem/rakefile.erb", "Rakefile", gem: gem)
87
- files << g("gem/readme.erb", "README.md", gem: gem)
88
- files << g("gem/changelog.erb", "CHANGELOG.md", gem: gem)
89
- files << g("gem/rubocop.erb", ".rubocop.yml", gem: gem)
90
- files << g("gem/yardopts.erb", ".yardopts", gem: gem)
91
- files << g("gem/license.erb", "LICENSE.md", gem: gem)
92
- files << g("gem/entrypoint.erb", "lib/#{gem.name}.rb", gem: gem)
93
- files << g("gem/gapic_metadata_json.erb", "gapic_metadata.json", gem: gem) if @api.generate_metadata
94
-
95
- files << g("snippets/gemfile.erb", "snippets/Gemfile", gem: gem) if @api.generate_standalone_snippets?
116
+ files << g("gem/gitignore", ".gitignore", gem: gem)
117
+ files << g("gem/version", "lib/#{gem.version_file_path}", gem: gem)
118
+ files << g("gem/test_helper", "test/helper.rb", gem: gem)
119
+ files << g("gem/gemspec", "#{gem.name}.gemspec", gem: gem)
120
+ files << g("gem/gemfile", "Gemfile", gem: gem)
121
+ files << g("gem/rakefile", "Rakefile", gem: gem)
122
+ files << g("gem/readme", "README.md", gem: gem)
123
+ files << g("gem/changelog", "CHANGELOG.md", gem: gem)
124
+ files << g("gem/rubocop", ".rubocop.yml", gem: gem)
125
+ files << g("gem/toys", ".toys.rb", gem: gem)
126
+ files << g("gem/yardopts", ".yardopts", gem: gem)
127
+ files << g("gem/license", "LICENSE.md", gem: gem)
128
+ files << g("gem/entrypoint", "lib/#{gem.name}.rb", gem: gem)
129
+ files << g("gem/gapic_metadata_json", "gapic_metadata.json", gem: gem) if @api.generate_metadata
130
+
131
+ files << g("snippets/gemfile", "snippets/Gemfile", gem: gem) if @api.generate_standalone_snippets?
96
132
 
97
133
  gem.proto_files.each do |proto_file|
98
- files << g("proto_docs/proto_file.erb", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
134
+ files << g("proto_docs/proto_file", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
99
135
  end
100
- files << g("proto_docs/readme.erb", "proto_docs/README.md", gem: gem)
136
+ files << g("proto_docs/readme", "proto_docs/README.md", gem: gem)
101
137
 
102
138
  format_files files
103
139
 
@@ -24,6 +24,8 @@ module Gapic
24
24
  ":gem.:free_tier",
25
25
  ":gem.:yard_strict",
26
26
  ":gem.:generic_endpoint",
27
+ ":gem.:is_cloud_product",
28
+ ":gem.:rest_numeric_enums",
27
29
  ":generate_metadata",
28
30
  ":generate_standalone_snippets",
29
31
  ":generate_yardoc_snippets"
@@ -47,7 +49,8 @@ module Gapic
47
49
  ":defaults.:service.:default_host",
48
50
  "grpc_service_config",
49
51
  ":service_yaml",
50
- ":overrides.:wrapper_gem_name"
52
+ ":overrides.:wrapper_gem_name",
53
+ ":snippet_configs_path"
51
54
  ].freeze
52
55
 
53
56
  ARRAY_PARAMETERS = [
@@ -66,7 +69,9 @@ module Gapic
66
69
  BOOL_PARAMETERS_ALIASES = {
67
70
  "gem-free-tier" => ":gem.:free_tier",
68
71
  "gem-yard-strict" => ":gem.:yard_strict",
69
- "gem-generic-endpoint" => ":gem.:generic_endpoint"
72
+ "gem-generic-endpoint" => ":gem.:generic_endpoint",
73
+ "gem-is-cloud-product" => ":gem.:is_cloud_product",
74
+ "rest-numeric-enums" => ":gem.:rest_numeric_enums"
70
75
  }.freeze
71
76
 
72
77
  STRING_PARAMETERS_ALIASES = {
@@ -86,7 +91,8 @@ module Gapic
86
91
  "gem-factory-method-suffix" => ":gem.:factory_method_suffix",
87
92
  "default-service-host" => ":defaults.:service.:default_host",
88
93
  "grpc-service-config" => "grpc_service_config",
89
- "service-yaml" => ":service_yaml"
94
+ "service-yaml" => ":service_yaml",
95
+ "snippet-configs-path" => ":snippet_configs_path"
90
96
  }.freeze
91
97
 
92
98
  ARRAY_PARAMETERS_ALIASES = {
@@ -62,7 +62,7 @@ module Gapic
62
62
  "UNAUTHENTICATED"
63
63
  ].freeze
64
64
 
65
- ERROR_STRING_MAPPING = ERROR_CODE_MAPPING.each_with_index.each_with_object({}) do |(str, num), hash|
65
+ ERROR_STRING_MAPPING = ERROR_CODE_MAPPING.each_with_index.with_object({}) do |(str, num), hash|
66
66
  hash[str] = num
67
67
  end.freeze
68
68
 
@@ -209,7 +209,7 @@ module Gapic
209
209
  timestring_nos = timestring.delete_suffix "s"
210
210
  unless valid_float? timestring_nos
211
211
  error_text = "Was not able to convert the string `#{timestring}` " \
212
- "to a time interval when parsing a grpc service config"
212
+ "to a time interval when parsing a grpc service config"
213
213
  raise ParsingError, error_text
214
214
  end
215
215
  Float(timestring_nos)
@@ -0,0 +1,173 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2023 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 Model
19
+ ##
20
+ # A collection of metadata about an API.
21
+ #
22
+ # This information generally comes from the service yaml rather than from
23
+ # proto input.
24
+ #
25
+ class ApiMetadata
26
+ ##
27
+ # @return [String] The full ID of the API, including `".googleapis.com"`.
28
+ # For example, `"pubsub.googleapis.com"`.
29
+ #
30
+ attr_reader :name
31
+
32
+ ##
33
+ # @return [String] The shortname of the API, omitting `".googleapis.com"`.
34
+ # For example, `"pubsub"`.
35
+ #
36
+ attr_reader :short_name
37
+
38
+ ##
39
+ # @return [String] A title of the API, including the version.
40
+ # For example, `"Cloud Pub/Sub V1"`
41
+ #
42
+ attr_reader :title
43
+
44
+ ##
45
+ # @return [String] A short description of the API, suitable for the
46
+ # RubyGems summary field.
47
+ #
48
+ attr_reader :summary
49
+
50
+ ##
51
+ # @return [String] A longer description of the API, suitable for the
52
+ # RubyGems description field.
53
+ #
54
+ attr_reader :description
55
+
56
+ ##
57
+ # @return [String] The organization name, determining where the API's
58
+ # documentation should be published, among other things. This value
59
+ # is `"CLOUD"` for Google Cloud APIs.
60
+ #
61
+ attr_reader :organization
62
+
63
+ ##
64
+ # @return [String] The URL for the documentation.
65
+ #
66
+ attr_reader :documentation_url
67
+
68
+ ##
69
+ # @return [String] The prefix string for sample doc tags.
70
+ #
71
+ attr_reader :doc_tag_prefix
72
+
73
+ ##
74
+ # @return [Hash{String => Array<String>}] A mapping from method name to a list of auto
75
+ # populated fields.
76
+ #
77
+ attr_reader :auto_populated_fields_by_method_name
78
+
79
+ ######## Internal ########
80
+ # @private
81
+ SELECTOR = "selector"
82
+ # @private
83
+ AUTO_POPULATED_FIELDS = "auto_populated_fields"
84
+
85
+ ##
86
+ # @private
87
+ # Special cases for short names
88
+ #
89
+ SHORT_NAME_MAPPING = {
90
+ "iam-meta-api" => "iam"
91
+ }.freeze
92
+
93
+ # @private
94
+ def update! **keywords
95
+ omit_patterns = [
96
+ nil,
97
+ "",
98
+ "CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED",
99
+ /\A\s*\(==.+==\)\s*\Z/
100
+ ]
101
+ keywords.each do |key, value|
102
+ instance_variable_set "@#{key}", value unless omit_patterns.any? { |pat| pat === value }
103
+ end
104
+ self
105
+ end
106
+
107
+ # @private
108
+ def standardize_names!
109
+ return unless name || short_name
110
+ @name ||= short_name
111
+ @short_name ||= name
112
+ @name = "#{name}.googleapis.com" unless name.include? "."
113
+ @short_name = short_name.split(".").first
114
+ @short_name = SHORT_NAME_MAPPING.fetch @short_name, @short_name
115
+ @doc_tag_prefix ||= short_name
116
+ self
117
+ end
118
+
119
+ # @private
120
+ def standardize_title! gem_name:
121
+ return unless title
122
+ @title = title.sub %r{\s+API$}, ""
123
+ return if title =~ /\s+V\d+\w*$/
124
+ vers = gem_name.split("-").last
125
+ @title = "#{title} #{vers.upcase}" if vers =~ /^v\d+\w*$/
126
+ self
127
+ end
128
+
129
+ # @private
130
+ def standardize_descriptions!
131
+ return unless summary || description
132
+ @description ||= summary
133
+ if summary
134
+ @summary = summary.gsub(/\s+/, " ").strip
135
+ @summary = "#{summary}." if summary =~ /\w\z/
136
+ @summary = remove_html_tags summary
137
+ end
138
+ @description = "#{description}." if description =~ /\w\z/
139
+ @description = remove_html_tags description
140
+ self
141
+ end
142
+
143
+ # @private
144
+ # Remove html tags and markdown links
145
+ def remove_html_tags str
146
+ str
147
+ .gsub(%r{</?[[:alpha:]]+(?:\s+[[:alpha:]]+\s*=\s*(?:"[^"]+"|'[^']+'|[^\s">]+))*\s*/?>}, "")
148
+ .gsub(%r{\[([^\]]+)\]\([^)]+\)}, "\\1")
149
+ end
150
+
151
+ ##
152
+ # @private
153
+ # Parses a service configuration, mapping method names to their respective
154
+ # auto populated field lists.
155
+ #
156
+ def standardize_auto_populated_fields! service_config
157
+ @auto_populated_fields_by_method_name = {}
158
+ return unless !service_config.nil? && !service_config.apis.nil?
159
+ @method_settings.each do |setting|
160
+ selector = setting[SELECTOR]
161
+ methods = service_config.apis.filter_map do |api|
162
+ # Removes API prefix and trailing period.
163
+ selector[api.name.length + 1..].downcase if selector.start_with? api.name
164
+ end
165
+ if !methods.nil? && setting.key?(AUTO_POPULATED_FIELDS)
166
+ @auto_populated_fields_by_method_name[methods.first] = setting[AUTO_POPULATED_FIELDS]
167
+ end
168
+ end
169
+ self
170
+ end
171
+ end
172
+ end
173
+ end