gapic-generator 0.10.1 → 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 (257) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +333 -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 -32
  12. data/lib/gapic/generators/default_generator_parameters.rb +11 -3
  13. data/lib/gapic/grpc_service_config/{service_config.rb → config.rb} +2 -2
  14. data/lib/gapic/grpc_service_config/parser.rb +10 -10
  15. data/lib/gapic/model/api_metadata.rb +173 -0
  16. data/lib/gapic/model/method/http_annotation.rb +221 -0
  17. data/lib/gapic/model/method/lro.rb +163 -0
  18. data/lib/gapic/model/method/routing.rb +248 -0
  19. data/lib/gapic/model/mixins.rb +247 -0
  20. data/lib/gapic/model/model_error.rb +26 -0
  21. data/lib/gapic/model/service/nonstandard_lro_provider.rb +292 -0
  22. data/lib/gapic/model.rb +22 -0
  23. data/lib/gapic/package_snippets.rb +159 -0
  24. data/lib/gapic/path_pattern/parser.rb +11 -2
  25. data/lib/gapic/path_pattern/pattern.rb +64 -1
  26. data/lib/gapic/path_pattern/segment.rb +108 -13
  27. data/lib/gapic/presenters/enum_presenter.rb +14 -0
  28. data/lib/gapic/presenters/enum_value_presenter.rb +4 -1
  29. data/lib/gapic/presenters/field_presenter.rb +78 -21
  30. data/lib/gapic/presenters/gem_presenter.rb +140 -34
  31. data/lib/gapic/presenters/{service_config_presenter.rb → grpc_service_config_presenter.rb} +1 -1
  32. data/lib/gapic/presenters/message_presenter.rb +15 -0
  33. data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
  34. data/lib/gapic/presenters/method/rest_pagination_info.rb +25 -16
  35. data/lib/gapic/presenters/method_presenter.rb +149 -35
  36. data/lib/gapic/presenters/method_rest_presenter.rb +79 -168
  37. data/lib/gapic/presenters/package_presenter.rb +63 -18
  38. data/lib/gapic/presenters/resource_presenter.rb +9 -3
  39. data/lib/gapic/presenters/service/lro_client_presenter.rb +90 -0
  40. data/lib/gapic/presenters/service/mixin_client_presenter.rb +89 -0
  41. data/lib/gapic/presenters/service/sub_client_presenter.rb +84 -0
  42. data/lib/gapic/presenters/service_presenter.rb +361 -27
  43. data/lib/gapic/presenters/service_rest_presenter.rb +247 -13
  44. data/lib/gapic/presenters/snippet/client_call_presenter.rb +82 -0
  45. data/lib/gapic/presenters/snippet/client_initialization_presenter.rb +87 -0
  46. data/lib/gapic/presenters/snippet/declaration_presenter.rb +91 -0
  47. data/lib/gapic/presenters/snippet/expression_presenter.rb +135 -0
  48. data/lib/gapic/presenters/snippet/iteration_presenter.rb +118 -0
  49. data/lib/gapic/presenters/snippet/parameter_presenter.rb +67 -0
  50. data/lib/gapic/presenters/snippet/request_initialization_presenters.rb +202 -0
  51. data/lib/gapic/presenters/snippet/response_handling_presenters.rb +329 -0
  52. data/lib/gapic/presenters/snippet/statement_presenter.rb +134 -0
  53. data/lib/gapic/presenters/snippet/type_presenter.rb +98 -0
  54. data/lib/gapic/presenters/snippet_presenter.rb +199 -9
  55. data/lib/gapic/presenters.rb +5 -1
  56. data/lib/gapic/runner.rb +1 -1
  57. data/lib/gapic/schema/api.rb +105 -5
  58. data/lib/gapic/schema/loader.rb +69 -21
  59. data/lib/gapic/schema/parameter_schema.rb +8 -8
  60. data/lib/gapic/schema/proto_tools.rb +193 -0
  61. data/lib/gapic/schema/request_param_parser.rb +5 -7
  62. data/lib/gapic/schema/service_config_parser.rb +152 -0
  63. data/lib/gapic/schema/wrappers.rb +309 -25
  64. data/lib/gapic/uri_template/parser.rb +15 -7
  65. data/lib/google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb.rb +104 -0
  66. data/lib/google/cloud/tools/snippetgen/snippetindex/v1/snippet_index_pb.rb +58 -0
  67. data/lib/google/protobuf/compiler/plugin_pb.rb +47 -0
  68. data/templates/default/binding_override.text.erb +6 -0
  69. data/templates/default/gem/gemfile.text.erb +12 -0
  70. data/templates/default/gem/{gemspec.erb → gemspec.text.erb} +3 -11
  71. data/templates/default/gem/{readme.erb → readme.text.erb} +10 -6
  72. data/templates/default/gem/{rubocop.erb → rubocop.text.erb} +3 -0
  73. data/templates/default/gem/{test_helper.erb → test_helper.text.erb} +4 -2
  74. data/templates/default/gem/toys.text.erb +12 -0
  75. data/templates/default/gem/{yardopts.erb → yardopts.text.erb} +1 -1
  76. data/templates/default/helpers/default_helper.rb +33 -1
  77. data/templates/default/lib/_binding_override.text.erb +49 -0
  78. data/templates/default/lib/{_package.erb → _package.text.erb} +7 -6
  79. data/templates/default/lib/_package_rest.text.erb +24 -0
  80. data/templates/default/lib/{_service.erb → _service.text.erb} +14 -20
  81. data/templates/default/lib/package/_self_configure.text.erb +16 -0
  82. data/templates/default/lib/package/_self_configure_defaults.text.erb +13 -0
  83. data/templates/default/lib/package/self_configure/_binding_default.text.erb +15 -0
  84. data/templates/default/lib/rest/_rest.text.erb +46 -0
  85. data/templates/default/package_rest.text.erb +6 -0
  86. data/templates/default/proto_docs/_deprecated.text.erb +9 -0
  87. data/templates/default/proto_docs/{_enum.erb → _enum.text.erb} +1 -0
  88. data/templates/default/proto_docs/{_message.erb → _message.text.erb} +2 -0
  89. data/templates/default/service/client/{_client.erb → _client.text.erb} +77 -17
  90. data/templates/default/service/client/{_config.erb → _config.text.erb} +39 -8
  91. data/templates/default/service/client/_nonstandard_lro.text.erb +57 -0
  92. data/templates/default/service/client/{_operations.erb → _operations.text.erb} +24 -3
  93. data/templates/default/service/client/{_self_configure_defaults.erb → _self_configure_defaults.text.erb} +2 -2
  94. data/templates/default/service/client/method/{_def.erb → _def.text.erb} +2 -2
  95. data/templates/default/service/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +3 -9
  96. data/templates/default/service/client/method/def/_request_normal.text.erb +18 -0
  97. data/templates/default/service/client/method/def/_request_streaming.text.erb +23 -0
  98. data/templates/default/service/client/method/def/_response.text.erb +10 -0
  99. data/templates/default/service/client/method/def/_response_nonstandard_lro.text.erb +23 -0
  100. data/templates/default/service/client/method/def/_response_normal.text.erb +4 -0
  101. data/templates/default/service/client/method/def/{_response_normal.erb → _response_normal_lro.text.erb} +1 -3
  102. data/templates/default/service/client/method/def/{_response_paged.erb → _response_paged.text.erb} +1 -1
  103. data/templates/default/service/client/method/def/_routing_params.text.erb +36 -0
  104. data/templates/default/service/client/method/docs/{_request_normal.erb → _request_normal.text.erb} +1 -1
  105. data/templates/default/service/client/method/docs/_snippets.text.erb +6 -0
  106. data/templates/default/service/client/resource/_def.text.erb +7 -0
  107. data/templates/default/service/nonstandard_lro.text.erb +6 -0
  108. data/templates/default/service/rest/client/_client.text.erb +202 -0
  109. data/templates/default/service/rest/client/_config.text.erb +178 -0
  110. data/templates/default/service/rest/client/_operations.text.erb +124 -0
  111. data/templates/default/service/rest/client/method/{_def.erb → _def.text.erb} +7 -1
  112. data/templates/default/service/rest/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +8 -3
  113. data/templates/default/service/rest/client/method/def/_response.text.erb +12 -0
  114. data/templates/default/service/rest/client/method/def/_response_nonstandard_lro.text.erb +24 -0
  115. data/templates/default/service/rest/client/method/def/_response_normal.text.erb +5 -0
  116. data/templates/default/service/rest/client/method/def/_response_normal_lro.text.erb +7 -0
  117. data/templates/default/service/rest/client/method/def/_response_paged.text.erb +7 -0
  118. data/templates/default/service/rest/client/method/def/_response_server_streaming.text.erb +11 -0
  119. data/templates/default/service/rest/client/method/docs/{_request.erb → _request.text.erb} +1 -3
  120. data/templates/default/service/rest/client/method/docs/_result.text.erb +10 -0
  121. data/templates/default/service/rest/client/method/docs/_snippets.text.erb +6 -0
  122. data/templates/default/service/rest/nonstandard_lro.text.erb +6 -0
  123. data/templates/default/service/rest/operations.text.erb +6 -0
  124. data/templates/default/service/rest/service_stub/_service_stub.text.erb +63 -0
  125. data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.text.erb +37 -0
  126. data/templates/default/service/rest/service_stub/method/_def.text.erb +35 -0
  127. data/templates/default/service/rest/service_stub/method/def/_response.text.erb +37 -0
  128. data/templates/default/service/rest/test/{client.erb → client.text.erb} +3 -3
  129. data/templates/default/service/rest/test/method/_assert_response.text.erb +2 -0
  130. data/templates/default/service/rest/test/method/{_configure.erb → _configure.text.erb} +3 -2
  131. data/templates/default/service/rest/test/method/_normal.text.erb +60 -0
  132. data/templates/default/service/rest/test/method/_server.text.erb +60 -0
  133. data/templates/default/service/rest/test/method/{_setup.erb → _setup.text.erb} +26 -10
  134. data/templates/default/service/test/{_resource.erb → _resource.text.erb} +1 -1
  135. data/templates/default/service/test/{client.erb → client.text.erb} +3 -2
  136. data/templates/default/service/test/client_paths.text.erb +33 -0
  137. data/templates/default/service/test/method/{_assert_response.erb → _assert_response.text.erb} +3 -0
  138. data/templates/default/service/test/method/{_bidi.erb → _bidi.text.erb} +1 -1
  139. data/templates/default/service/test/method/{_client.erb → _client.text.erb} +1 -1
  140. data/templates/default/service/test/method/{_configure.erb → _configure.text.erb} +2 -1
  141. data/templates/default/service/test/method/{_normal.erb → _normal.text.erb} +1 -1
  142. data/templates/default/service/test/method/{_server.erb → _server.text.erb} +1 -1
  143. data/templates/default/service/test/method/{_setup.erb → _setup.text.erb} +19 -2
  144. data/templates/default/snippets/{gemfile.erb → gemfile.text.erb} +2 -2
  145. data/templates/default/snippets/snippet/_body.text.erb +24 -0
  146. data/templates/default/snippets/snippet/_inline.text.erb +11 -0
  147. data/templates/default/snippets/snippet/_standalone.text.erb +25 -0
  148. data/templates/default/snippets/{standalone.erb → standalone.text.erb} +1 -1
  149. metadata +209 -230
  150. data/lib/google/api/annotations.pb.rb +0 -39
  151. data/lib/google/api/client.pb.rb +0 -43
  152. data/lib/google/api/field_behavior.pb.rb +0 -51
  153. data/lib/google/api/http.pb.rb +0 -60
  154. data/lib/google/api/resource.pb.rb +0 -80
  155. data/lib/google/longrunning/operations.pb.rb +0 -115
  156. data/lib/google/protobuf/any.pb.rb +0 -40
  157. data/lib/google/protobuf/compiler/plugin.pb.rb +0 -79
  158. data/lib/google/protobuf/descriptor.pb.rb +0 -360
  159. data/lib/google/protobuf/empty.pb.rb +0 -36
  160. data/lib/google/rpc/status.pb.rb +0 -46
  161. data/templates/default/gem/gemfile.erb +0 -4
  162. data/templates/default/lib/rest/_rest.erb +0 -9
  163. data/templates/default/service/client/method/def/_request_normal.erb +0 -4
  164. data/templates/default/service/client/method/def/_request_streaming.erb +0 -9
  165. data/templates/default/service/client/method/def/_response.erb +0 -6
  166. data/templates/default/service/client/method/docs/_deprecated.erb +0 -5
  167. data/templates/default/service/client/method/docs/_snippets.erb +0 -6
  168. data/templates/default/service/client/resource/_def.erb +0 -6
  169. data/templates/default/service/rest/client/_client.erb +0 -106
  170. data/templates/default/service/rest/client/_config.erb +0 -122
  171. data/templates/default/service/rest/client/method/def/_response.erb +0 -8
  172. data/templates/default/service/rest/client/method/def/_response_lro.erb +0 -7
  173. data/templates/default/service/rest/client/method/def/_response_normal.erb +0 -6
  174. data/templates/default/service/rest/client/method/def/_response_paged.erb +0 -7
  175. data/templates/default/service/rest/client/method/docs/_result.erb +0 -6
  176. data/templates/default/service/rest/service_stub/_service_stub.erb +0 -25
  177. data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.erb +0 -24
  178. data/templates/default/service/rest/service_stub/method/_def.erb +0 -20
  179. data/templates/default/service/rest/service_stub/method/def/_response.erb +0 -17
  180. data/templates/default/service/rest/test/method/_assert_response.erb +0 -2
  181. data/templates/default/service/rest/test/method/_normal.erb +0 -71
  182. data/templates/default/service/test/client_paths.erb +0 -15
  183. data/templates/default/snippets/snippet/_structure.erb +0 -71
  184. /data/gem_templates/{binary.erb → binary.text.erb} +0 -0
  185. /data/gem_templates/{dockerfile.erb → dockerfile.text.erb} +0 -0
  186. /data/gem_templates/{entrypoint.erb → entrypoint.text.erb} +0 -0
  187. /data/gem_templates/{gapic_sh.erb → gapic_sh.text.erb} +0 -0
  188. /data/gem_templates/{gemfile.erb → gemfile.text.erb} +0 -0
  189. /data/gem_templates/{gemspec.erb → gemspec.text.erb} +0 -0
  190. /data/gem_templates/{generator.erb → generator.text.erb} +0 -0
  191. /data/gem_templates/{gitignore.erb → gitignore.text.erb} +0 -0
  192. /data/gem_templates/{rakefile.erb → rakefile.text.erb} +0 -0
  193. /data/gem_templates/{readme.erb → readme.text.erb} +0 -0
  194. /data/gem_templates/{rubocop.erb → rubocop.text.erb} +0 -0
  195. /data/gem_templates/shared/{_header.erb → _header.text.erb} +0 -0
  196. /data/gem_templates/shared/{_license.erb → _license.text.erb} +0 -0
  197. /data/gem_templates/shared/{_warning.erb → _warning.text.erb} +0 -0
  198. /data/gem_templates/{test_generator.erb → test_generator.text.erb} +0 -0
  199. /data/gem_templates/{test_helper.erb → test_helper.text.erb} +0 -0
  200. /data/gem_templates/{version.erb → version.text.erb} +0 -0
  201. /data/templates/default/gem/{_version.erb → _version.text.erb} +0 -0
  202. /data/templates/default/gem/{changelog.erb → changelog.text.erb} +0 -0
  203. /data/templates/default/gem/{entrypoint.erb → entrypoint.text.erb} +0 -0
  204. /data/templates/default/gem/{gapic_metadata_json.erb → gapic_metadata_json.text.erb} +0 -0
  205. /data/templates/default/gem/{gitignore.erb → gitignore.text.erb} +0 -0
  206. /data/templates/default/gem/{license.erb → license.text.erb} +0 -0
  207. /data/templates/default/gem/{rakefile.erb → rakefile.text.erb} +0 -0
  208. /data/templates/default/gem/{version.erb → version.text.erb} +0 -0
  209. /data/templates/default/layouts/{_ruby.erb → _ruby.text.erb} +0 -0
  210. /data/templates/default/{package.erb → package.text.erb} +0 -0
  211. /data/templates/default/proto_docs/{_proto_file.erb → _proto_file.text.erb} +0 -0
  212. /data/templates/default/proto_docs/{proto_file.erb → proto_file.text.erb} +0 -0
  213. /data/templates/default/proto_docs/{readme.erb → readme.text.erb} +0 -0
  214. /data/templates/default/service/{_helpers.erb → _helpers.text.erb} +0 -0
  215. /data/templates/default/service/client/{_credentials.erb → _credentials.text.erb} +0 -0
  216. /data/templates/default/service/client/{_paths.erb → _paths.text.erb} +0 -0
  217. /data/templates/default/service/client/{_requires.erb → _requires.text.erb} +0 -0
  218. /data/templates/default/service/client/{_resource.erb → _resource.text.erb} +0 -0
  219. /data/templates/default/service/client/{_self_configure.erb → _self_configure.text.erb} +0 -0
  220. /data/templates/default/service/client/method/def/{_request.erb → _request.text.erb} +0 -0
  221. /data/templates/default/service/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
  222. /data/templates/default/service/client/method/docs/{_error.erb → _error.text.erb} +0 -0
  223. /data/templates/default/service/client/method/docs/{_request.erb → _request.text.erb} +0 -0
  224. /data/templates/default/service/client/method/docs/{_request_field.erb → _request_field.text.erb} +0 -0
  225. /data/templates/default/service/client/method/docs/{_request_streaming.erb → _request_streaming.text.erb} +0 -0
  226. /data/templates/default/service/client/method/docs/{_response.erb → _response.text.erb} +0 -0
  227. /data/templates/default/service/client/method/docs/{_sample.erb → _sample.text.erb} +0 -0
  228. /data/templates/default/service/client/method/docs/{_sample_response.erb → _sample_response.text.erb} +0 -0
  229. /data/templates/default/service/client/method/docs/{_samples.erb → _samples.text.erb} +0 -0
  230. /data/templates/default/service/client/method/docs/request_field/{_arg.erb → _arg.text.erb} +0 -0
  231. /data/templates/default/service/client/method/docs/request_field/{_hash.erb → _hash.text.erb} +0 -0
  232. /data/templates/default/service/client/method/docs/sample_response/{_comment.erb → _comment.text.erb} +0 -0
  233. /data/templates/default/service/client/method/docs/sample_response/{_define.erb → _define.text.erb} +0 -0
  234. /data/templates/default/service/client/method/docs/sample_response/{_loop.erb → _loop.text.erb} +0 -0
  235. /data/templates/default/service/client/method/docs/sample_response/{_print.erb → _print.text.erb} +0 -0
  236. /data/templates/default/service/client/method/docs/sample_response/{_write_file.erb → _write_file.text.erb} +0 -0
  237. /data/templates/default/service/client/resource/{_doc.erb → _doc.text.erb} +0 -0
  238. /data/templates/default/service/client/resource/{_multi.erb → _multi.text.erb} +0 -0
  239. /data/templates/default/service/client/resource/{_single.erb → _single.text.erb} +0 -0
  240. /data/templates/default/service/{client.erb → client.text.erb} +0 -0
  241. /data/templates/default/service/{credentials.erb → credentials.text.erb} +0 -0
  242. /data/templates/default/service/{operations.erb → operations.text.erb} +0 -0
  243. /data/templates/default/service/{paths.erb → paths.text.erb} +0 -0
  244. /data/templates/default/service/rest/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
  245. /data/templates/default/service/rest/client/method/docs/{_error.erb → _error.text.erb} +0 -0
  246. /data/templates/default/service/rest/{client.erb → client.text.erb} +0 -0
  247. /data/templates/default/service/rest/{grpc_transcoding.erb → grpc_transcoding.text.erb} +0 -0
  248. /data/templates/default/service/rest/service_stub/grpc_transcoding_method/def/{_query_string_param.erb → _query_string_param.text.erb} +0 -0
  249. /data/templates/default/service/rest/service_stub/method/def/{_request.erb → _request.text.erb} +0 -0
  250. /data/templates/default/service/rest/{service_stub.erb → service_stub.text.erb} +0 -0
  251. /data/templates/default/service/{rest.erb → rest.text.erb} +0 -0
  252. /data/templates/default/service/test/{client_operations.erb → client_operations.text.erb} +0 -0
  253. /data/templates/default/service/test/{smoke.erb → smoke.text.erb} +0 -0
  254. /data/templates/default/{service.erb → service.text.erb} +0 -0
  255. /data/templates/default/shared/{_header.erb → _header.text.erb} +0 -0
  256. /data/templates/default/shared/{_license.erb → _license.text.erb} +0 -0
  257. /data/templates/default/shared/{_warning.erb → _warning.text.erb} +0 -0
@@ -17,6 +17,7 @@
17
17
  require "active_support/inflector"
18
18
  require "gapic/helpers/filepath_helper"
19
19
  require "gapic/helpers/namespace_helper"
20
+ require "forwardable"
20
21
 
21
22
  module Gapic
22
23
  module Presenters
@@ -27,6 +28,18 @@ module Gapic
27
28
  include Gapic::Helpers::FilepathHelper
28
29
  include Gapic::Helpers::NamespaceHelper
29
30
 
31
+ extend Forwardable
32
+ def_delegators :@main_service, :name, :helpers_file_name, :is_hosted_mixin?, :is_main_mixin_service?, :mixins?,
33
+ :mixin_binding_overrides?, :grpc_service_config, :grpc_service_config_presenter, :lro_service,
34
+ :lro_client_var, :nonstandard_lro_provider?, :credentials_class_xref, :client_name, :module_name,
35
+ :grpc_full_name, :client_suffix_for_default_transport, :client_endpoint_template
36
+
37
+ # The namespace of the service. (not the client)
38
+ # Intentionally does not include "Rest", since
39
+ # we do not want Rest service's configuration to
40
+ # default to GRPC configuration (right now).
41
+ def_delegators :@main_service, :namespace
42
+
30
43
  ##
31
44
  # @param main_service [Gapic::Presenters::ServicePresenter]
32
45
  # @param api [Gapic::Schema::Api]
@@ -34,15 +47,37 @@ module Gapic
34
47
  def initialize main_service, api
35
48
  @main_service = main_service
36
49
  @api = api
50
+ @type = "service"
37
51
  end
38
52
 
39
53
  ##
54
+ # Full Ruby name of this service
55
+ #
40
56
  # @return [String]
41
57
  #
42
58
  def service_name_full
43
59
  fix_namespace api, "#{main_service.service_name_full}::Rest"
44
60
  end
45
61
 
62
+ ##
63
+ # Require path for this service
64
+ #
65
+ # @return [String]
66
+ #
67
+ def service_require
68
+ ruby_file_path @api, service_name_full
69
+ end
70
+
71
+ ##
72
+ # Folder name for this service
73
+ # This is just "rest" for rest services
74
+ #
75
+ # @return [String]
76
+ #
77
+ def service_directory_name
78
+ "rest"
79
+ end
80
+
46
81
  ##
47
82
  # @return [String]
48
83
  #
@@ -71,13 +106,6 @@ module Gapic
71
106
  "#{service_stub_require}.rb"
72
107
  end
73
108
 
74
- ##
75
- # @return [String]
76
- #
77
- def client_name
78
- main_service.client_name
79
- end
80
-
81
109
  ##
82
110
  # @return [String]
83
111
  #
@@ -124,21 +152,187 @@ module Gapic
124
152
  # @return [String]
125
153
  #
126
154
  def test_client_file_path
127
- main_service.service_file_path.sub ".rb", "_test.rb"
155
+ main_service.service_file_path.sub ".rb", "_rest_test.rb"
128
156
  end
129
157
 
130
158
  ##
131
159
  # @return [String]
132
160
  #
133
- def credentials_class_xref
134
- main_service.credentials_class_xref
161
+ def configure_client_call
162
+ "#{client_name_full}.configure"
135
163
  end
136
164
 
137
165
  ##
166
+ # Name of the nonstandard LRO module
167
+ #
138
168
  # @return [String]
139
169
  #
140
- def configure_client_call
141
- "#{client_name_full}.configure"
170
+ def nonstandard_lro_name
171
+ "NonstandardLro"
172
+ end
173
+
174
+ ##
175
+ # Full name of the nonstandard LRO module
176
+ #
177
+ # @return [String]
178
+ #
179
+ def nonstandard_lro_name_full
180
+ fix_namespace @api, "#{service_name_full}::#{nonstandard_lro_name}"
181
+ end
182
+
183
+ ##
184
+ # Full file path to the nonstandard LRO module
185
+ #
186
+ # @return [String]
187
+ #
188
+ def nonstandard_lro_file_path
189
+ "#{nonstandard_lro_require}.rb"
190
+ end
191
+
192
+ ##
193
+ # File name of the nonstandard LRO module
194
+ #
195
+ # @return [String]
196
+ #
197
+ def nonstandard_lro_file_name
198
+ nonstandard_lro_file_path.split("/").last
199
+ end
200
+
201
+ ##
202
+ # The require string for the nonstandard LRO module
203
+ #
204
+ # @return [String]
205
+ #
206
+ def nonstandard_lro_require
207
+ ruby_file_path @api, "#{service_name_full}::#{nonstandard_lro_name}"
208
+ end
209
+
210
+ ##
211
+ # A presenter for the LRO subclient if needed
212
+ #
213
+ # @return [Gapic::Presenters::Service::LroClientPresenter, nil]
214
+ def lro_client_presenter
215
+ return nil unless lro?
216
+ Gapic::Presenters::Service::LroClientPresenter.new service: "google.longrunning.operations",
217
+ client_class_name: "Operations",
218
+ client_class_docname: operations_name_full,
219
+ client_var_name: lro_client_var,
220
+ require_str: operations_file_path,
221
+ service_description: "long-running operations"
222
+ end
223
+
224
+ ##
225
+ # Whether an AIP-151 LRO subclient needs to be generated for this service
226
+ #
227
+ # @return [Boolean]
228
+ def lro?
229
+ methods.find(&:lro?)
230
+ end
231
+
232
+ def operations_name
233
+ "Operations"
234
+ end
235
+
236
+ def operations_name_full
237
+ fix_namespace @api, "#{service_name_full}::#{operations_name}"
238
+ end
239
+
240
+ def operations_file_path
241
+ "#{operations_require}.rb"
242
+ end
243
+
244
+ def operations_file_name
245
+ operations_file_path.split("/").last
246
+ end
247
+
248
+ def operations_require
249
+ ruby_file_path @api, "#{service_name_full}::#{operations_name}"
250
+ end
251
+
252
+ def operations_stub_name
253
+ "OperationsServiceStub"
254
+ end
255
+
256
+ ##
257
+ # The client presenters of the nonstandard LROs that are used by the methods of this service
258
+ #
259
+ # @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter>]
260
+ def nonstandard_lros
261
+ return [] unless main_service.nonstandard_lro_consumer?
262
+ main_service.nonstandard_lros_models.map do |lro|
263
+ lro_wrapper = @api.lookup lro.service_full_name
264
+ lro_service = ServicePresenter.new(main_service.gem, @api, lro_wrapper).rest
265
+
266
+ service_description = "long-running operations via #{lro_service.name}"
267
+ client_var_name = ruby_file_path_for_namespace lro_service.name
268
+ Gapic::Presenters::Service::LroClientPresenter.new service: lro.service_full_name,
269
+ client_class_name: lro_service.client_name_full,
270
+ client_class_docname: lro_service.client_name_full,
271
+ client_var_name: client_var_name,
272
+ require_str: lro_service.service_require,
273
+ service_description: service_description,
274
+ helper_type: lro_service.nonstandard_lro_name_full
275
+ end
276
+ end
277
+
278
+ ##
279
+ # Whether config for this service should include the `bindings_override` field.
280
+ # This field is needed:
281
+ # * if a service is a mixin in it's own package, e.g. `google.Cloud.Location`
282
+ # * if a service hosts a mixin and has bindings overrides for it
283
+ # but the generated Operations clients should not have it since override for
284
+ # their bindings are generated instead of set during runtime.
285
+ #
286
+ def mixin_should_generate_override_config?
287
+ (is_main_mixin_service? || main_service.mixin_binding_overrides?) &&
288
+ main_service.grpc_full_name != "google.longrunning.Operations"
289
+ end
290
+
291
+ ##
292
+ # The client presenters of the mixin services that are used by the methods of this service
293
+ #
294
+ # @return [Enumerable<Gapic::Presenters::Service::MixinClientPresenter>]
295
+ def mixin_presenters
296
+ return [] unless main_service.mixins?
297
+ main_service.mixin_presenters.map do |grpc_presenter|
298
+ model = main_service.mixin_models.find { |mdl| mdl.service == grpc_presenter.service }
299
+ raise "Mismatch between model and presenters in service #{service_name_full}" unless model
300
+
301
+ Gapic::Presenters::Service::MixinClientPresenter.new service: model.service,
302
+ client_class_name: model.client_class_name_rest,
303
+ client_class_docname: model.client_class_docname_rest,
304
+ client_var_name: model.client_var_name,
305
+ require_str: model.require_str_rest,
306
+ service_description: model.service_description,
307
+ bindings_override: grpc_presenter.bindings_override
308
+ end
309
+ end
310
+
311
+ ##
312
+ # Whether there are any subclients to generate with this service.
313
+ # Subclients are the clients to other services (e.g. an LRO provider service).
314
+ #
315
+ # @return [Boolean]
316
+ def subclients?
317
+ subclients.any?
318
+ end
319
+
320
+ ##
321
+ # Subclients for this service
322
+ # Subclients are the clients to other services (e.g. an LRO provider service).
323
+ #
324
+ # The following is typically generated for a subclient:
325
+ # - a require statement for the subclient's class
326
+ # - a class-level variable in the host service's client
327
+ # - a code to initialize this variable with a subclient's class instance in the host service's constructor
328
+ #
329
+ # @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter, Gapic::Model::Mixins::Mixin>]
330
+ def subclients
331
+ [lro_client_presenter, mixin_presenters, nonstandard_lros].flatten.compact
332
+ end
333
+
334
+ def lro_subclients
335
+ [lro_client_presenter, nonstandard_lros].flatten.compact
142
336
  end
143
337
 
144
338
  ##
@@ -147,19 +341,59 @@ module Gapic
147
341
  # a gem config.
148
342
  #
149
343
  # @return [Gapic::Presenters::MethodRestPresenter] if there is a method
150
- # appropriatke for quick start
344
+ # appropriate for quick start
151
345
  # @return [nil] if there is no method appropriate for quick start
152
346
  #
153
347
  def quick_start_method
154
348
  main_service.quick_start_method&.rest
155
349
  end
156
350
 
351
+ ##
352
+ # Presenters for methods that can be generated in REST clients.
353
+ #
354
+ # @return [Enumerable<Gapic::Presenters::MethodPresenter>]
355
+ #
356
+ def methods
357
+ main_service.methods.select(&:can_generate_rest?)
358
+ end
359
+
360
+ ##
361
+ # Require string for the helpers file
362
+ #
363
+ # @return [String]
364
+ #
365
+ def helpers_require
366
+ ruby_file_path @api, "#{service_name_full}::Helpers"
367
+ end
368
+
369
+ ##
370
+ # Whether this rest service should send the numeric enums signal
371
+ # @return [Boolean]
372
+ #
373
+ def numeric_enums?
374
+ main_service.gem.rest_numeric_enums?
375
+ end
376
+
377
+ ##
378
+ # @return [Boolean] Whether the service is marked as deprecated.
379
+ #
380
+ def is_deprecated?
381
+ @main_service.is_deprecated?
382
+ end
383
+
384
+ # @return [String] The api_version for this service, or empty if not defined.
385
+ def api_version
386
+ @main_service.api_version.to_s
387
+ end
388
+
157
389
  private
158
390
 
159
391
  # @return [Gapic::Presenters::ServicePresenter]
160
392
  attr_reader :main_service
161
393
  # @return [Gapic::Schema::Api]
162
394
  attr_reader :api
395
+ # @return [String] String representation of this presenter type.
396
+ attr_reader :type
163
397
  end
164
398
  end
165
399
  end
@@ -0,0 +1,82 @@
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
+
18
+ module Gapic
19
+ module Presenters
20
+ class SnippetPresenter
21
+ ##
22
+ # Presentation information about client call invocation
23
+ #
24
+ class ClientCallPresenter
25
+ ##
26
+ # Create a client call presenter
27
+ #
28
+ # @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientCall]
29
+ # The protobuf representation
30
+ # @param json [String]
31
+ # The JSON representation
32
+ # @param method_name [String] The method name
33
+ # @param request_name [String] The request variable name
34
+ # @param response_name [String,nil] The response variable name, or nil for no response handling
35
+ # @param client_streaming [Boolean] True if the call is client streaming
36
+ # @param server_streaming [Boolean] True if the call is server streaming
37
+ # @param phase1 [Boolean] True if this is a phase 1 snippet without config
38
+ #
39
+ def initialize proto, json,
40
+ method_name:, request_name:, response_name:, client_streaming:, server_streaming:, phase1:
41
+ @render_lines = pre_call_lines proto, json, method_name, client_streaming, server_streaming, phase1
42
+ main_line = "client.#{method_name} #{request_name}"
43
+ main_line = "#{response_name} = #{main_line}" if response_name
44
+ @render_lines << main_line
45
+ @render = @render_lines.join "\n"
46
+ end
47
+
48
+ ##
49
+ # The lines of rendered code
50
+ # @return [Array<String>]
51
+ #
52
+ attr_reader :render_lines
53
+
54
+ ##
55
+ # The rendered code as a single string, possibly with line breaks
56
+ # @return [String]
57
+ #
58
+ attr_reader :render
59
+
60
+ private
61
+
62
+ def pre_call_lines proto, json, method_name, client_streaming, server_streaming, phase1
63
+ lines = []
64
+ if json&.key? "preCall"
65
+ proto.pre_call.each_with_index do |statement_proto, index|
66
+ statement = StatementPresenter.new statement_proto, json["preCall"][index]
67
+ lines += statement.render_lines
68
+ end
69
+ elsif phase1
70
+ lines <<
71
+ if client_streaming || server_streaming
72
+ "# Call the #{method_name} method to start streaming."
73
+ else
74
+ "# Call the #{method_name} method."
75
+ end
76
+ end
77
+ lines
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,87 @@
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
+
18
+ module Gapic
19
+ module Presenters
20
+ class SnippetPresenter
21
+ ##
22
+ # Presentation information about client object initialization
23
+ #
24
+ class ClientInitializationPresenter
25
+ ##
26
+ # Create an client init presenter.
27
+ #
28
+ # @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientInitialization]
29
+ # The protobuf representation
30
+ # @param json [String]
31
+ # The JSON representation
32
+ # @param phase1 [Boolean] Whether to inject phase 1 content
33
+ # @param client_type [String] The fully qualified class name of the client
34
+ #
35
+ def initialize proto, json, phase1:, client_type:
36
+ @render_lines = []
37
+ if json&.key? "preClientInitialization"
38
+ proto.pre_client_initialization.each_with_index do |stmt_proto, index|
39
+ statement = StatementPresenter.new stmt_proto, json["preClientInitialization"][index]
40
+ @render_lines += statement.render_lines
41
+ end
42
+ elsif phase1
43
+ @render_lines << "# Create a client object. The client can be reused for multiple calls."
44
+ end
45
+ @render_lines += build_create_code proto, client_type
46
+ @render = @render_lines.join "\n"
47
+ end
48
+
49
+ ##
50
+ # The lines of rendered code
51
+ # @return [Array<String>]
52
+ #
53
+ attr_reader :render_lines
54
+
55
+ ##
56
+ # The rendered code as a single string, possibly with line breaks
57
+ # @return [String]
58
+ #
59
+ attr_reader :render
60
+
61
+ private
62
+
63
+ def build_create_code proto, client_type
64
+ create_code = "client = #{client_type}.new"
65
+ if proto&.custom_service_endpoint
66
+ endpoint = build_endpoint proto.custom_service_endpoint
67
+ [
68
+ "#{create_code} do |config|",
69
+ " config.endpoint = #{endpoint.inspect}",
70
+ "end"
71
+ ]
72
+ else
73
+ [create_code]
74
+ end
75
+ end
76
+
77
+ def build_endpoint proto
78
+ init_module = Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientInitialization
79
+ schema = proto.schema == init_module::ServiceEndpoint::ServiceEndpointSchema::HTTP ? "http://" : "https://"
80
+ region = proto.region.to_s.empty? ? "" : "#{proto.region}-"
81
+ port = proto.port.zero? ? "" : ":#{proto.port}"
82
+ [schema, region, proto.host, port].join
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,91 @@
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
+
18
+ module Gapic
19
+ module Presenters
20
+ class SnippetPresenter
21
+ ##
22
+ # Presentation information about a declaration
23
+ #
24
+ class DeclarationPresenter
25
+ ##
26
+ # Create a declaration presenter.
27
+ #
28
+ # @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Statement::Declaration]
29
+ # The protobuf representation of the declaration
30
+ # @param json [String]
31
+ # The JSON representation of the declaration
32
+ #
33
+ def initialize proto, json
34
+ @render = @render_lines = @name = @description = @has_value = nil
35
+ return unless proto && json
36
+ @name = proto.name
37
+ @description = proto.description unless proto.description.empty?
38
+ @render_lines = @description ? ["# #{@description}"] : []
39
+ expr = ExpressionPresenter.new proto.value, json["value"]
40
+ @has_value = expr.exist?
41
+ if @has_value
42
+ expr_lines = expr.render_lines
43
+ expr_lines[0] = "#{proto.name} = #{expr_lines.first}"
44
+ @render_lines += expr_lines
45
+ end
46
+ @render = @render_lines.join "\n"
47
+ end
48
+
49
+ ##
50
+ # The name of the variable being declared
51
+ # @return [String]
52
+ #
53
+ attr_reader :name
54
+
55
+ ##
56
+ # The description, or nil if none
57
+ # @return [String,nil]
58
+ #
59
+ attr_reader :description
60
+
61
+ ##
62
+ # The lines of rendered code
63
+ # @return [Array<String>]
64
+ #
65
+ attr_reader :render_lines
66
+
67
+ ##
68
+ # The rendered code as a single string, possibly with line breaks
69
+ # @return [String]
70
+ #
71
+ attr_reader :render
72
+
73
+ ##
74
+ # Whether the declaration could be interpreted.
75
+ # @return [Boolean]
76
+ #
77
+ def exist?
78
+ !render_lines.nil?
79
+ end
80
+
81
+ ##
82
+ # Whether the declaration includes a value.
83
+ # @return [Boolean]
84
+ #
85
+ def value?
86
+ @has_value
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end