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
@@ -61,16 +61,68 @@ module Gapic
61
61
  def services
62
62
  @services ||= begin
63
63
  files = @api.generate_files.select { |f| f.package == @package }
64
- services = files.map(&:services).flatten
64
+ service_list = files.map(&:services).flatten
65
+ mixin_service_names = gem.mixins_model.mixin_services
66
+ service_list.delete_if { |s| mixin_service_names.include? s.full_name }
65
67
  # Omit common services in this package. Common service clients do not
66
68
  # go into their own package.
67
- normal_services = services.select { |s| @api.delegate_service_for(s).nil? }
69
+ normal_services = service_list.select { |s| @api.delegate_service_for(s).nil? }
68
70
  # But include common services that delegate to normal services in this package.
69
71
  common_services = normal_services.flat_map { |s| @api.common_services_for s }
70
72
  (normal_services + common_services).map { |s| ServicePresenter.new @gem_presenter, @api, s }
71
73
  end
72
74
  end
73
75
 
76
+ ##
77
+ # @return [Boolean] Whether the generation of REST clients is requested
78
+ # and can be done because at least one method has rest bindings.
79
+ #
80
+ def generate_rest_clients?
81
+ @api.generate_rest_clients? && !first_service_with_rest.nil?
82
+ end
83
+
84
+ ##
85
+ # @return [Boolean] Whether the generation of gRPC clients is requested
86
+ #
87
+ def generate_grpc_clients?
88
+ @api.generate_grpc_clients?
89
+ end
90
+
91
+ ##
92
+ # First service with REST bindings.
93
+ # @return [Gapic::Presenters::ServicePresenter, nil]
94
+ #
95
+ def first_service_with_rest
96
+ services.find(&:methods_rest_bindings?)
97
+ end
98
+
99
+ ##
100
+ # Whether there are mixin services that this package has http binding overrides for.
101
+ #
102
+ # @return [Boolean]
103
+ #
104
+ def mixin_binding_overrides?
105
+ first_service_with_rest&.rest&.mixin_binding_overrides? || false
106
+ end
107
+
108
+ ##
109
+ # Requires path for the mixin binding overrides file
110
+ #
111
+ # @return [String]
112
+ #
113
+ def mixin_binding_overrides_require
114
+ "#{ruby_file_path @api, namespace}/bindings_override"
115
+ end
116
+
117
+ ##
118
+ # File path for the mixin binding overrides file
119
+ #
120
+ # @return [String]
121
+ #
122
+ def mixin_binding_overrides_file_path
123
+ "#{mixin_binding_overrides_require}.rb"
124
+ end
125
+
74
126
  def address
75
127
  @package.split "."
76
128
  end
@@ -79,10 +131,18 @@ module Gapic
79
131
  ruby_file_path @api, namespace
80
132
  end
81
133
 
134
+ def package_rest_require
135
+ "#{ruby_file_path @api, namespace}/rest"
136
+ end
137
+
82
138
  def package_file_path
83
139
  "#{package_require}.rb"
84
140
  end
85
141
 
142
+ def package_rest_file_path
143
+ "#{package_rest_require}.rb"
144
+ end
145
+
86
146
  def package_directory_name
87
147
  package_require.split("/").last
88
148
  end
@@ -117,24 +177,9 @@ module Gapic
117
177
  language: "ruby",
118
178
  protoPackage: name,
119
179
  libraryPackage: namespace,
120
- services: services.map { |s| [s.grpc_service_name, s.drift_manifest] }.to_h
180
+ services: services.to_h { |s| [s.grpc_service_name, s.drift_manifest] }
121
181
  }
122
182
  end
123
-
124
- ##
125
- # How comments in the generated libraries refer to the GRPC client
126
- # if no REST code is generated, this should just be "client",
127
- # if REST code is generated, this should be disambiguated into the "GRPC client"
128
- #
129
- # Since we are using first service for an indication of whether package generates
130
- # REST code, it's OK to defer this to the first service as well.
131
- # For packages with no services the value of this does not really matter as
132
- # no client generation docs will be generated.
133
- #
134
- # @return [String]
135
- def grpc_client_designation
136
- services.first&.grpc_client_designation || ""
137
- end
138
183
  end
139
184
  end
140
185
  end
@@ -15,7 +15,6 @@
15
15
  # limitations under the License.
16
16
 
17
17
  require "gapic/path_pattern"
18
- require "active_support/inflector"
19
18
 
20
19
  module Gapic
21
20
  module Presenters
@@ -58,12 +57,10 @@ module Gapic
58
57
  #
59
58
  class PatternPresenter
60
59
  def initialize pattern_string
61
- @pattern = pattern_string
62
60
  @parsed_pattern = Gapic::PathPattern.parse pattern_string
63
61
  @path_string = build_path_string
64
62
  end
65
63
 
66
- attr_reader :pattern
67
64
  attr_reader :path_string
68
65
 
69
66
  def pattern_template
@@ -78,6 +75,11 @@ module Gapic
78
75
  @parsed_pattern.arguments
79
76
  end
80
77
 
78
+ # @return [String] The conflicting argument name escaped with local binding.
79
+ def escape_argument arg
80
+ Gapic::RubyInfo.keywords.include?(arg) ? "binding.local_variable_get(:#{arg})" : arg
81
+ end
82
+
81
83
  def formal_arguments
82
84
  @parsed_pattern.arguments.map { |name| "#{name}:" }.join ", "
83
85
  end
@@ -103,6 +105,10 @@ module Gapic
103
105
  end.join "/"
104
106
  end
105
107
 
108
+ def pattern
109
+ @parsed_pattern.path_pattern
110
+ end
111
+
106
112
  private
107
113
 
108
114
  def build_path_string
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2021 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ 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 LRO
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] helper_type
47
+ # The type of a helper generated for this service if any
48
+ # @return [String. nil]
49
+ #
50
+ class LroClientPresenter < SubClientPresenter
51
+ attr_reader :helper_type
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
+ # @param helper_type [String, nil]
68
+ # The type of a helper generated for this service if any
69
+ #
70
+ def initialize service:,
71
+ client_class_name:,
72
+ client_class_docname:,
73
+ client_var_name:,
74
+ require_str:,
75
+ service_description:,
76
+ helper_type: nil
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
+ @helper_type = helper_type
86
+ end
87
+ end
88
+ end
89
+ end
90
+ 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