gapic-generator 0.11.0 → 0.45.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +299 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +71 -37
- data/bin/protoc-gen-ruby_gapic +2 -2
- data/lib/gapic/file_formatter.rb +23 -19
- data/lib/gapic/formatting_utils.rb +22 -9
- data/lib/gapic/gem_builder.rb +15 -17
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/base_generator.rb +6 -4
- data/lib/gapic/generators/default_generator.rb +70 -34
- data/lib/gapic/generators/default_generator_parameters.rb +9 -3
- data/lib/gapic/grpc_service_config/parser.rb +2 -2
- data/lib/gapic/model/api_metadata.rb +173 -0
- data/lib/gapic/model/method/http_annotation.rb +158 -60
- data/lib/gapic/model/method/lro.rb +8 -5
- data/lib/gapic/model/method/routing.rb +3 -18
- data/lib/gapic/model/mixins.rb +76 -10
- data/lib/gapic/model/service/nonstandard_lro_provider.rb +10 -11
- data/lib/gapic/package_snippets.rb +159 -0
- data/lib/gapic/path_pattern/parser.rb +11 -2
- data/lib/gapic/path_pattern/pattern.rb +18 -1
- data/lib/gapic/path_pattern/segment.rb +11 -4
- data/lib/gapic/presenters/enum_presenter.rb +14 -0
- data/lib/gapic/presenters/enum_value_presenter.rb +4 -1
- data/lib/gapic/presenters/field_presenter.rb +78 -21
- data/lib/gapic/presenters/gem_presenter.rb +109 -35
- data/lib/gapic/presenters/message_presenter.rb +15 -0
- data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
- data/lib/gapic/presenters/method/rest_pagination_info.rb +25 -16
- data/lib/gapic/presenters/method_presenter.rb +109 -35
- data/lib/gapic/presenters/method_rest_presenter.rb +70 -137
- data/lib/gapic/presenters/package_presenter.rb +63 -18
- data/lib/gapic/presenters/resource_presenter.rb +9 -3
- data/lib/gapic/presenters/service/lro_client_presenter.rb +14 -14
- data/lib/gapic/presenters/service/mixin_client_presenter.rb +89 -0
- data/lib/gapic/presenters/service/sub_client_presenter.rb +84 -0
- data/lib/gapic/presenters/service_presenter.rb +183 -31
- data/lib/gapic/presenters/service_rest_presenter.rb +180 -27
- data/lib/gapic/presenters/snippet/client_call_presenter.rb +82 -0
- data/lib/gapic/presenters/snippet/client_initialization_presenter.rb +87 -0
- data/lib/gapic/presenters/snippet/declaration_presenter.rb +91 -0
- data/lib/gapic/presenters/snippet/expression_presenter.rb +135 -0
- data/lib/gapic/presenters/snippet/iteration_presenter.rb +118 -0
- data/lib/gapic/presenters/snippet/parameter_presenter.rb +67 -0
- data/lib/gapic/presenters/snippet/request_initialization_presenters.rb +202 -0
- data/lib/gapic/presenters/snippet/response_handling_presenters.rb +329 -0
- data/lib/gapic/presenters/snippet/statement_presenter.rb +134 -0
- data/lib/gapic/presenters/snippet/type_presenter.rb +98 -0
- data/lib/gapic/presenters/snippet_presenter.rb +199 -10
- data/lib/gapic/presenters.rb +2 -0
- data/lib/gapic/runner.rb +1 -1
- data/lib/gapic/schema/api.rb +49 -3
- data/lib/gapic/schema/loader.rb +67 -22
- data/lib/gapic/schema/parameter_schema.rb +8 -8
- data/lib/gapic/schema/proto_tools.rb +193 -0
- data/lib/gapic/schema/request_param_parser.rb +5 -7
- data/lib/gapic/schema/service_config_parser.rb +38 -4
- data/lib/gapic/schema/wrappers.rb +192 -31
- data/lib/gapic/uri_template/parser.rb +15 -7
- data/lib/google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb.rb +104 -0
- data/lib/google/cloud/tools/snippetgen/snippetindex/v1/snippet_index_pb.rb +58 -0
- data/lib/google/protobuf/compiler/plugin_pb.rb +47 -0
- data/templates/default/binding_override.text.erb +6 -0
- data/templates/default/gem/gemfile.text.erb +12 -0
- data/templates/default/gem/{gemspec.erb → gemspec.text.erb} +3 -11
- data/templates/default/gem/{readme.erb → readme.text.erb} +10 -6
- data/templates/default/gem/{rubocop.erb → rubocop.text.erb} +3 -0
- data/templates/default/gem/{test_helper.erb → test_helper.text.erb} +4 -2
- data/templates/default/gem/toys.text.erb +12 -0
- data/templates/default/helpers/default_helper.rb +33 -1
- data/templates/default/lib/_binding_override.text.erb +49 -0
- data/templates/default/lib/{_package.erb → _package.text.erb} +6 -9
- data/templates/default/lib/_package_rest.text.erb +24 -0
- data/templates/default/lib/{_service.erb → _service.text.erb} +11 -23
- data/templates/default/lib/package/_self_configure.text.erb +16 -0
- data/templates/default/lib/package/_self_configure_defaults.text.erb +13 -0
- data/templates/default/lib/package/self_configure/_binding_default.text.erb +15 -0
- data/templates/default/lib/rest/_rest.text.erb +46 -0
- data/templates/default/package_rest.text.erb +6 -0
- data/templates/default/proto_docs/_deprecated.text.erb +9 -0
- data/templates/default/proto_docs/{_enum.erb → _enum.text.erb} +1 -0
- data/templates/default/proto_docs/{_message.erb → _message.text.erb} +2 -0
- data/templates/default/service/client/{_client.erb → _client.text.erb} +60 -12
- data/templates/default/service/client/{_config.erb → _config.text.erb} +39 -8
- data/templates/default/service/client/{_operations.erb → _operations.text.erb} +24 -3
- data/templates/default/service/client/method/{_def.erb → _def.text.erb} +2 -2
- data/templates/default/service/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +2 -1
- data/templates/default/service/client/method/def/_request_normal.text.erb +18 -0
- data/templates/default/service/client/method/def/_request_streaming.text.erb +23 -0
- data/templates/default/service/client/method/def/{_response.erb → _response.text.erb} +2 -0
- data/templates/default/service/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +1 -1
- data/templates/default/service/client/method/def/_response_normal.text.erb +4 -0
- data/templates/default/service/client/method/def/{_response_normal.erb → _response_normal_lro.text.erb} +1 -3
- data/templates/default/service/client/method/def/{_response_paged.erb → _response_paged.text.erb} +1 -1
- data/templates/default/service/client/method/docs/{_request_normal.erb → _request_normal.text.erb} +1 -1
- data/templates/default/service/client/method/docs/_snippets.text.erb +6 -0
- data/templates/default/service/client/resource/_def.text.erb +7 -0
- data/templates/default/service/nonstandard_lro.text.erb +6 -0
- data/templates/default/service/rest/client/{_client.erb → _client.text.erb} +82 -13
- data/templates/default/service/rest/client/_config.text.erb +178 -0
- data/templates/default/service/rest/client/_operations.text.erb +124 -0
- data/templates/default/service/rest/client/method/{_def.erb → _def.text.erb} +7 -1
- data/templates/default/service/rest/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +8 -3
- data/templates/default/service/rest/client/method/def/{_response.erb → _response.text.erb} +4 -0
- data/templates/default/service/rest/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +5 -4
- data/templates/default/service/rest/client/method/def/_response_normal.text.erb +5 -0
- data/templates/default/service/rest/client/method/def/_response_normal_lro.text.erb +7 -0
- data/templates/default/service/rest/client/method/def/_response_paged.text.erb +7 -0
- data/templates/default/service/rest/client/method/def/_response_server_streaming.text.erb +11 -0
- data/templates/default/service/rest/client/method/docs/{_request.erb → _request.text.erb} +1 -3
- data/templates/default/service/rest/client/method/docs/_result.text.erb +10 -0
- data/templates/default/service/rest/client/method/docs/_snippets.text.erb +6 -0
- data/templates/default/service/{nonstandard_lro.erb → rest/nonstandard_lro.text.erb} +1 -1
- data/templates/default/service/rest/operations.text.erb +6 -0
- data/templates/default/service/rest/service_stub/_service_stub.text.erb +63 -0
- data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.text.erb +37 -0
- data/templates/default/service/rest/service_stub/method/_def.text.erb +35 -0
- data/templates/default/service/rest/service_stub/method/def/_response.text.erb +37 -0
- data/templates/default/service/rest/test/{client.erb → client.text.erb} +3 -3
- data/templates/default/service/rest/test/method/_assert_response.text.erb +2 -0
- data/templates/default/service/rest/test/method/{_configure.erb → _configure.text.erb} +3 -2
- data/templates/default/service/rest/test/method/_normal.text.erb +60 -0
- data/templates/default/service/rest/test/method/_server.text.erb +60 -0
- data/templates/default/service/rest/test/method/{_setup.erb → _setup.text.erb} +26 -10
- data/templates/default/service/test/{_resource.erb → _resource.text.erb} +1 -1
- data/templates/default/service/test/{client.erb → client.text.erb} +3 -2
- data/templates/default/service/test/client_paths.text.erb +33 -0
- data/templates/default/service/test/method/{_bidi.erb → _bidi.text.erb} +1 -1
- data/templates/default/service/test/method/{_client.erb → _client.text.erb} +1 -1
- data/templates/default/service/test/method/{_configure.erb → _configure.text.erb} +2 -1
- data/templates/default/service/test/method/{_normal.erb → _normal.text.erb} +1 -1
- data/templates/default/service/test/method/{_server.erb → _server.text.erb} +1 -1
- data/templates/default/service/test/method/{_setup.erb → _setup.text.erb} +19 -2
- data/templates/default/snippets/{gemfile.erb → gemfile.text.erb} +2 -2
- data/templates/default/snippets/snippet/_body.text.erb +24 -0
- data/templates/default/snippets/snippet/_inline.text.erb +11 -0
- data/templates/default/snippets/snippet/_standalone.text.erb +25 -0
- data/templates/default/snippets/{standalone.erb → standalone.text.erb} +1 -1
- metadata +198 -273
- data/lib/google/api/annotations.pb.rb +0 -39
- data/lib/google/api/auth.pb.rb +0 -75
- data/lib/google/api/backend.pb.rb +0 -59
- data/lib/google/api/billing.pb.rb +0 -53
- data/lib/google/api/client.pb.rb +0 -43
- data/lib/google/api/context.pb.rb +0 -47
- data/lib/google/api/control.pb.rb +0 -38
- data/lib/google/api/documentation.pb.rb +0 -56
- data/lib/google/api/endpoint.pb.rb +0 -42
- data/lib/google/api/field_behavior.pb.rb +0 -51
- data/lib/google/api/http.pb.rb +0 -60
- data/lib/google/api/label.pb.rb +0 -49
- data/lib/google/api/launch_stage.pb.rb +0 -37
- data/lib/google/api/log.pb.rb +0 -47
- data/lib/google/api/logging.pb.rb +0 -48
- data/lib/google/api/metric.pb.rb +0 -90
- data/lib/google/api/monitored_resource.pb.rb +0 -68
- data/lib/google/api/monitoring.pb.rb +0 -48
- data/lib/google/api/quota.pb.rb +0 -63
- data/lib/google/api/resource.pb.rb +0 -80
- data/lib/google/api/routing.pb.rb +0 -58
- data/lib/google/api/service.pb.rb +0 -90
- data/lib/google/api/source_info.pb.rb +0 -44
- data/lib/google/api/system_parameter.pb.rb +0 -51
- data/lib/google/api/usage.pb.rb +0 -47
- data/lib/google/cloud/extended_operations.pb.rb +0 -57
- data/lib/google/longrunning/operations.pb.rb +0 -115
- data/lib/google/protobuf/any.pb.rb +0 -40
- data/lib/google/protobuf/api.pb.rb +0 -69
- data/lib/google/protobuf/compiler/plugin.pb.rb +0 -79
- data/lib/google/protobuf/descriptor.pb.rb +0 -360
- data/lib/google/protobuf/duration.pb.rb +0 -41
- data/lib/google/protobuf/empty.pb.rb +0 -36
- data/lib/google/protobuf/source_context.pb.rb +0 -39
- data/lib/google/protobuf/struct.pb.rb +0 -65
- data/lib/google/protobuf/type.pb.rb +0 -128
- data/lib/google/protobuf/wrappers.pb.rb +0 -80
- data/lib/google/rpc/status.pb.rb +0 -46
- data/templates/default/gem/gemfile.erb +0 -4
- data/templates/default/lib/rest/_rest.erb +0 -9
- data/templates/default/service/client/method/def/_request_normal.erb +0 -4
- data/templates/default/service/client/method/def/_request_streaming.erb +0 -9
- data/templates/default/service/client/method/docs/_deprecated.erb +0 -5
- data/templates/default/service/client/method/docs/_snippets.erb +0 -6
- data/templates/default/service/client/resource/_def.erb +0 -6
- data/templates/default/service/rest/client/_config.erb +0 -122
- data/templates/default/service/rest/client/method/def/_response_normal.erb +0 -6
- data/templates/default/service/rest/client/method/def/_response_paged.erb +0 -7
- data/templates/default/service/rest/client/method/docs/_result.erb +0 -6
- data/templates/default/service/rest/service_stub/_service_stub.erb +0 -25
- data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.erb +0 -24
- data/templates/default/service/rest/service_stub/method/_def.erb +0 -20
- data/templates/default/service/rest/service_stub/method/def/_response.erb +0 -17
- data/templates/default/service/rest/test/method/_assert_response.erb +0 -2
- data/templates/default/service/rest/test/method/_normal.erb +0 -71
- data/templates/default/service/test/client_paths.erb +0 -15
- data/templates/default/snippets/snippet/_structure.erb +0 -71
- /data/gem_templates/{binary.erb → binary.text.erb} +0 -0
- /data/gem_templates/{dockerfile.erb → dockerfile.text.erb} +0 -0
- /data/gem_templates/{entrypoint.erb → entrypoint.text.erb} +0 -0
- /data/gem_templates/{gapic_sh.erb → gapic_sh.text.erb} +0 -0
- /data/gem_templates/{gemfile.erb → gemfile.text.erb} +0 -0
- /data/gem_templates/{gemspec.erb → gemspec.text.erb} +0 -0
- /data/gem_templates/{generator.erb → generator.text.erb} +0 -0
- /data/gem_templates/{gitignore.erb → gitignore.text.erb} +0 -0
- /data/gem_templates/{rakefile.erb → rakefile.text.erb} +0 -0
- /data/gem_templates/{readme.erb → readme.text.erb} +0 -0
- /data/gem_templates/{rubocop.erb → rubocop.text.erb} +0 -0
- /data/gem_templates/shared/{_header.erb → _header.text.erb} +0 -0
- /data/gem_templates/shared/{_license.erb → _license.text.erb} +0 -0
- /data/gem_templates/shared/{_warning.erb → _warning.text.erb} +0 -0
- /data/gem_templates/{test_generator.erb → test_generator.text.erb} +0 -0
- /data/gem_templates/{test_helper.erb → test_helper.text.erb} +0 -0
- /data/gem_templates/{version.erb → version.text.erb} +0 -0
- /data/templates/default/gem/{_version.erb → _version.text.erb} +0 -0
- /data/templates/default/gem/{changelog.erb → changelog.text.erb} +0 -0
- /data/templates/default/gem/{entrypoint.erb → entrypoint.text.erb} +0 -0
- /data/templates/default/gem/{gapic_metadata_json.erb → gapic_metadata_json.text.erb} +0 -0
- /data/templates/default/gem/{gitignore.erb → gitignore.text.erb} +0 -0
- /data/templates/default/gem/{license.erb → license.text.erb} +0 -0
- /data/templates/default/gem/{rakefile.erb → rakefile.text.erb} +0 -0
- /data/templates/default/gem/{version.erb → version.text.erb} +0 -0
- /data/templates/default/gem/{yardopts.erb → yardopts.text.erb} +0 -0
- /data/templates/default/layouts/{_ruby.erb → _ruby.text.erb} +0 -0
- /data/templates/default/{package.erb → package.text.erb} +0 -0
- /data/templates/default/proto_docs/{_proto_file.erb → _proto_file.text.erb} +0 -0
- /data/templates/default/proto_docs/{proto_file.erb → proto_file.text.erb} +0 -0
- /data/templates/default/proto_docs/{readme.erb → readme.text.erb} +0 -0
- /data/templates/default/service/{_helpers.erb → _helpers.text.erb} +0 -0
- /data/templates/default/service/client/{_credentials.erb → _credentials.text.erb} +0 -0
- /data/templates/default/service/client/{_nonstandard_lro.erb → _nonstandard_lro.text.erb} +0 -0
- /data/templates/default/service/client/{_paths.erb → _paths.text.erb} +0 -0
- /data/templates/default/service/client/{_requires.erb → _requires.text.erb} +0 -0
- /data/templates/default/service/client/{_resource.erb → _resource.text.erb} +0 -0
- /data/templates/default/service/client/{_self_configure.erb → _self_configure.text.erb} +0 -0
- /data/templates/default/service/client/{_self_configure_defaults.erb → _self_configure_defaults.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_routing_params.erb → _routing_params.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_error.erb → _error.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request_field.erb → _request_field.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request_streaming.erb → _request_streaming.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_response.erb → _response.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_sample.erb → _sample.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_sample_response.erb → _sample_response.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_samples.erb → _samples.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/request_field/{_arg.erb → _arg.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/request_field/{_hash.erb → _hash.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_comment.erb → _comment.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_define.erb → _define.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_loop.erb → _loop.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_print.erb → _print.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_write_file.erb → _write_file.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_doc.erb → _doc.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_multi.erb → _multi.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_single.erb → _single.text.erb} +0 -0
- /data/templates/default/service/{client.erb → client.text.erb} +0 -0
- /data/templates/default/service/{credentials.erb → credentials.text.erb} +0 -0
- /data/templates/default/service/{operations.erb → operations.text.erb} +0 -0
- /data/templates/default/service/{paths.erb → paths.text.erb} +0 -0
- /data/templates/default/service/rest/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
- /data/templates/default/service/rest/client/method/docs/{_error.erb → _error.text.erb} +0 -0
- /data/templates/default/service/rest/{client.erb → client.text.erb} +0 -0
- /data/templates/default/service/rest/{grpc_transcoding.erb → grpc_transcoding.text.erb} +0 -0
- /data/templates/default/service/rest/service_stub/grpc_transcoding_method/def/{_query_string_param.erb → _query_string_param.text.erb} +0 -0
- /data/templates/default/service/rest/service_stub/method/def/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/rest/{service_stub.erb → service_stub.text.erb} +0 -0
- /data/templates/default/service/{rest.erb → rest.text.erb} +0 -0
- /data/templates/default/service/test/{client_operations.erb → client_operations.text.erb} +0 -0
- /data/templates/default/service/test/method/{_assert_response.erb → _assert_response.text.erb} +0 -0
- /data/templates/default/service/test/{smoke.erb → smoke.text.erb} +0 -0
- /data/templates/default/{service.erb → service.text.erb} +0 -0
- /data/templates/default/shared/{_header.erb → _header.text.erb} +0 -0
- /data/templates/default/shared/{_license.erb → _license.text.erb} +0 -0
- /data/templates/default/shared/{_warning.erb → _warning.text.erb} +0 -0
@@ -14,11 +14,15 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require "gapic/presenters/service/sub_client_presenter"
|
18
|
+
|
17
19
|
module Gapic
|
18
20
|
module Presenters
|
19
21
|
module Service
|
20
22
|
##
|
21
|
-
#
|
23
|
+
# @private
|
24
|
+
# Presenter for the generation of the sub-client for LRO
|
25
|
+
# inside a host service's client class
|
22
26
|
#
|
23
27
|
# @!attribute [r] service
|
24
28
|
# Full name of the service providing the nonstandard LRO functionality
|
@@ -43,13 +47,7 @@ module Gapic
|
|
43
47
|
# The type of a helper generated for this service if any
|
44
48
|
# @return [String. nil]
|
45
49
|
#
|
46
|
-
class LroClientPresenter
|
47
|
-
attr_reader :service
|
48
|
-
attr_reader :client_class_name
|
49
|
-
attr_reader :client_class_docname
|
50
|
-
attr_reader :client_var_name
|
51
|
-
attr_reader :require_str
|
52
|
-
attr_reader :service_description
|
50
|
+
class LroClientPresenter < SubClientPresenter
|
53
51
|
attr_reader :helper_type
|
54
52
|
|
55
53
|
##
|
@@ -76,12 +74,14 @@ module Gapic
|
|
76
74
|
require_str:,
|
77
75
|
service_description:,
|
78
76
|
helper_type: nil
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
77
|
+
super(service: service,
|
78
|
+
client_class_name: client_class_name,
|
79
|
+
client_class_docname: client_class_docname,
|
80
|
+
client_var_name: client_var_name,
|
81
|
+
require_str: require_str,
|
82
|
+
service_description: service_description
|
83
|
+
)
|
84
|
+
|
85
85
|
@helper_type = helper_type
|
86
86
|
end
|
87
87
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2022 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "gapic/presenters/service/sub_client_presenter"
|
18
|
+
|
19
|
+
module Gapic
|
20
|
+
module Presenters
|
21
|
+
module Service
|
22
|
+
##
|
23
|
+
# @private
|
24
|
+
# Presenter for the generation of the sub-client for mixins
|
25
|
+
# inside a host service's client class
|
26
|
+
#
|
27
|
+
# @!attribute [r] service
|
28
|
+
# Full name of the service providing the nonstandard LRO functionality
|
29
|
+
# @return [String]
|
30
|
+
# @!attribute [r] client_class_name
|
31
|
+
# Full name of the class of the client of the service
|
32
|
+
# @return [String]
|
33
|
+
# @!attribute [r] client_class_docname
|
34
|
+
# Name of the class as it should appear in the documentation
|
35
|
+
# @return [String]
|
36
|
+
# @!attribute [r] client_var_name
|
37
|
+
# Name for the variable for the client of the service
|
38
|
+
# @return [String]
|
39
|
+
# @!attribute [r] require_str
|
40
|
+
# Path to `require` the client of the service
|
41
|
+
# @return [String]
|
42
|
+
# @!attribute [r] service_description
|
43
|
+
# The description to place in the comments to this client's
|
44
|
+
# attribute in the library services's client class
|
45
|
+
# @return [String]
|
46
|
+
# @!attribute [r] bindings_override
|
47
|
+
# Override of Http bindings for the methods of the mixin service
|
48
|
+
# methods are specified by their full name, e.g. `google.cloud.location.Locations.ListLocations`
|
49
|
+
# @return [Hash{String, Array<::Gapic::Model::Method::HttpAnnotation::HttpBinding>}]
|
50
|
+
#
|
51
|
+
class MixinClientPresenter < SubClientPresenter
|
52
|
+
attr_reader :bindings_override
|
53
|
+
|
54
|
+
##
|
55
|
+
# @param service [String]
|
56
|
+
# Full name of the service providing the nonstandard LRO functionality
|
57
|
+
# @param client_class_name [String]
|
58
|
+
# Full name of the class of the client of the service
|
59
|
+
# @param client_class_docname [String]
|
60
|
+
# Name of the class as it should appear in the documentation
|
61
|
+
# @param client_var_name [String]
|
62
|
+
# Name for the variable for the client of the service
|
63
|
+
# @param require_str [String]
|
64
|
+
# Path to `require` the client of the service
|
65
|
+
# @param service_description [String]
|
66
|
+
# The description to place in the comments to this client's
|
67
|
+
# attribute in the library services's client class
|
68
|
+
#
|
69
|
+
def initialize service:,
|
70
|
+
client_class_name:,
|
71
|
+
client_class_docname:,
|
72
|
+
client_var_name:,
|
73
|
+
require_str:,
|
74
|
+
service_description:,
|
75
|
+
bindings_override:
|
76
|
+
super(service: service,
|
77
|
+
client_class_name: client_class_name,
|
78
|
+
client_class_docname: client_class_docname,
|
79
|
+
client_var_name: client_var_name,
|
80
|
+
require_str: require_str,
|
81
|
+
service_description: service_description
|
82
|
+
)
|
83
|
+
|
84
|
+
@bindings_override = bindings_override
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2022 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
module Gapic
|
18
|
+
module Presenters
|
19
|
+
module Service
|
20
|
+
##
|
21
|
+
# @private
|
22
|
+
# Base class for the presenter for the generation of the clients
|
23
|
+
# for sub-services (mixins, lros) inside a host service's client class
|
24
|
+
#
|
25
|
+
# @!attribute [r] service
|
26
|
+
# Full name of the service providing the nonstandard LRO functionality
|
27
|
+
# @return [String]
|
28
|
+
# @!attribute [r] client_class_name
|
29
|
+
# Full name of the class of the client of the service
|
30
|
+
# @return [String]
|
31
|
+
# @!attribute [r] client_class_docname
|
32
|
+
# Name of the class as it should appear in the documentation
|
33
|
+
# @return [String]
|
34
|
+
# @!attribute [r] client_var_name
|
35
|
+
# Name for the variable for the client of the service
|
36
|
+
# @return [String]
|
37
|
+
# @!attribute [r] require_str
|
38
|
+
# Path to `require` the client of the service
|
39
|
+
# @return [String]
|
40
|
+
# @!attribute [r] service_description
|
41
|
+
# The description to place in the comments to this client's
|
42
|
+
# attribute in the library services's client class
|
43
|
+
# @return [String]
|
44
|
+
#
|
45
|
+
class SubClientPresenter
|
46
|
+
attr_reader :service
|
47
|
+
attr_reader :client_class_name
|
48
|
+
attr_reader :client_class_docname
|
49
|
+
attr_reader :client_var_name
|
50
|
+
attr_reader :require_str
|
51
|
+
attr_reader :service_description
|
52
|
+
|
53
|
+
##
|
54
|
+
# @param service [String]
|
55
|
+
# Full name of the service providing the nonstandard LRO functionality
|
56
|
+
# @param client_class_name [String]
|
57
|
+
# Full name of the class of the client of the service
|
58
|
+
# @param client_class_docname [String]
|
59
|
+
# Name of the class as it should appear in the documentation
|
60
|
+
# @param client_var_name [String]
|
61
|
+
# Name for the variable for the client of the service
|
62
|
+
# @param require_str [String]
|
63
|
+
# Path to `require` the client of the service
|
64
|
+
# @param service_description [String]
|
65
|
+
# The description to place in the comments to this client's
|
66
|
+
# attribute in the library services's client class
|
67
|
+
#
|
68
|
+
def initialize service:,
|
69
|
+
client_class_name:,
|
70
|
+
client_class_docname:,
|
71
|
+
client_var_name:,
|
72
|
+
require_str:,
|
73
|
+
service_description:
|
74
|
+
@service = service
|
75
|
+
@client_class_name = client_class_name
|
76
|
+
@client_class_docname = client_class_docname
|
77
|
+
@client_var_name = client_var_name
|
78
|
+
@require_str = require_str
|
79
|
+
@service_description = service_description
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -30,6 +30,15 @@ module Gapic
|
|
30
30
|
# @return [Gapic::Presenters::ServiceRestPresenter]
|
31
31
|
attr_reader :rest
|
32
32
|
|
33
|
+
# @return [String] String representation of this presenter type.
|
34
|
+
attr_reader :type
|
35
|
+
|
36
|
+
##
|
37
|
+
# @param gem_presenter [Gapic::Presenters::GemPresenter]
|
38
|
+
# @param api [Gapic::Schema::Api]
|
39
|
+
# @param service [Gapic::Presenters::ServicePresenter]
|
40
|
+
# @param parent_service [Gapic::Presenters::ServicePresenter]
|
41
|
+
#
|
33
42
|
def initialize gem_presenter, api, service, parent_service: nil
|
34
43
|
@gem_presenter = gem_presenter
|
35
44
|
@api = api
|
@@ -37,6 +46,7 @@ module Gapic
|
|
37
46
|
@parent_service = parent_service
|
38
47
|
@rest = ServiceRestPresenter.new self, api
|
39
48
|
@nonstandard_lro = api.nonstandard_lro_model_for service.full_name
|
49
|
+
@type = "service"
|
40
50
|
end
|
41
51
|
|
42
52
|
def gem
|
@@ -51,8 +61,12 @@ module Gapic
|
|
51
61
|
PackagePresenter.new @gem_presenter, @api, @service.parent.package
|
52
62
|
end
|
53
63
|
|
64
|
+
def special_compute_behavior?
|
65
|
+
address[0] == "google" && address[1] == "cloud" && address[2] == "compute" && !address[3].to_s.empty?
|
66
|
+
end
|
67
|
+
|
54
68
|
##
|
55
|
-
# @return [Boolean]
|
69
|
+
# @return [Boolean] Whether the service is marked as deprecated.
|
56
70
|
#
|
57
71
|
def is_deprecated?
|
58
72
|
@service.is_deprecated?
|
@@ -65,6 +79,17 @@ module Gapic
|
|
65
79
|
@methods ||= @service.methods.map { |m| MethodPresenter.new self, @api, m }
|
66
80
|
end
|
67
81
|
|
82
|
+
##
|
83
|
+
# @return [Boolean] Whether this service autogenerates UUID fields.
|
84
|
+
#
|
85
|
+
def autogenerates_uuid?
|
86
|
+
@methods.any? { |method| method.auto_populated_fields.length.positive? }
|
87
|
+
end
|
88
|
+
|
89
|
+
##
|
90
|
+
# The address of this service split into an array
|
91
|
+
#
|
92
|
+
# @return [Array<String>]
|
68
93
|
def address
|
69
94
|
@service.address
|
70
95
|
end
|
@@ -98,8 +123,15 @@ module Gapic
|
|
98
123
|
ActiveSupport::Inflector.camelize @service.address[-2]
|
99
124
|
end
|
100
125
|
|
101
|
-
|
102
|
-
|
126
|
+
##
|
127
|
+
# The description as it should appear in YARD docs.
|
128
|
+
#
|
129
|
+
# @param transport [:grpc,:rest] Whether xref links should go to REST or
|
130
|
+
# gRPC client classes. Uses the default transport if not provided.
|
131
|
+
# @return [String]
|
132
|
+
#
|
133
|
+
def doc_description disable_xrefs: false, transport: nil
|
134
|
+
@service.docs_leading_comments disable_xrefs: disable_xrefs, transport: transport
|
103
135
|
end
|
104
136
|
|
105
137
|
def name
|
@@ -209,15 +241,36 @@ module Gapic
|
|
209
241
|
"localhost"
|
210
242
|
end
|
211
243
|
|
244
|
+
##
|
245
|
+
# Returns a template for the endpoint, with the universe domain component
|
246
|
+
# of the url replaced with the string `$UNIVERSE_DOMAIN$`.
|
247
|
+
#
|
248
|
+
# @return [String]
|
249
|
+
#
|
250
|
+
def client_endpoint_template
|
251
|
+
client_endpoint&.sub(/.googleapis.com$/, ".$UNIVERSE_DOMAIN$")
|
252
|
+
end
|
253
|
+
|
212
254
|
def generic_endpoint?
|
213
255
|
gem.generic_endpoint?
|
214
256
|
end
|
215
257
|
|
258
|
+
# @return [String] The api_version for this service, or empty if not defined.
|
259
|
+
def api_version
|
260
|
+
@service.api_version.to_s
|
261
|
+
end
|
262
|
+
|
216
263
|
def client_scopes
|
217
|
-
common_service_delegate&.client_scopes
|
218
|
-
|
219
|
-
|
220
|
-
|
264
|
+
scopes = Array(common_service_delegate&.client_scopes)
|
265
|
+
return scopes unless scopes.empty?
|
266
|
+
|
267
|
+
scopes = Array(@service.scopes)
|
268
|
+
return scopes unless scopes.empty?
|
269
|
+
|
270
|
+
scopes = Array(default_config(:oauth_scopes))
|
271
|
+
return scopes unless scopes.empty?
|
272
|
+
|
273
|
+
[]
|
221
274
|
end
|
222
275
|
|
223
276
|
def credentials_name
|
@@ -312,14 +365,36 @@ module Gapic
|
|
312
365
|
ruby_file_path @api, "#{service_name_full}::#{paths_name}"
|
313
366
|
end
|
314
367
|
|
368
|
+
##
|
369
|
+
# @return [Boolean] Whether the generation of REST clients is requested
|
370
|
+
# and can be done because at least one method has rest bindings.
|
371
|
+
#
|
315
372
|
def generate_rest_clients?
|
316
|
-
@api.generate_rest_clients?
|
373
|
+
@api.generate_rest_clients? && methods_rest_bindings?
|
317
374
|
end
|
318
375
|
|
376
|
+
##
|
377
|
+
# @return [Boolean] Whether the generation of gRPC clients is requested
|
378
|
+
#
|
319
379
|
def generate_grpc_clients?
|
320
380
|
@api.generate_grpc_clients?
|
321
381
|
end
|
322
382
|
|
383
|
+
##
|
384
|
+
# @return [Boolean]
|
385
|
+
#
|
386
|
+
def supports_multiple_transports?
|
387
|
+
generate_rest_clients? && generate_grpc_clients?
|
388
|
+
end
|
389
|
+
|
390
|
+
def client_suffix_for_default_transport
|
391
|
+
if @api.default_transport == :grpc
|
392
|
+
"#{module_name}::#{client_name}"
|
393
|
+
else
|
394
|
+
"#{module_name}::Rest::#{client_name}"
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
323
398
|
##
|
324
399
|
# @return [Boolean] whether this service contains any methods with REST bindings
|
325
400
|
#
|
@@ -329,10 +404,10 @@ module Gapic
|
|
329
404
|
|
330
405
|
##
|
331
406
|
# @return [Enumerable<Gapic::Presenters::MethodPresenter>]
|
332
|
-
# List of
|
407
|
+
# List of methods for which REST bindings are present and REST methods can be generated
|
333
408
|
#
|
334
409
|
def methods_rest_bindings
|
335
|
-
methods.select
|
410
|
+
methods.select(&:can_generate_rest?)
|
336
411
|
end
|
337
412
|
|
338
413
|
def test_client_file_path
|
@@ -411,7 +486,7 @@ module Gapic
|
|
411
486
|
|
412
487
|
def lro_service
|
413
488
|
lro = @service.parent.parent.files.find { |file| file.name == "google/longrunning/operations.proto" }
|
414
|
-
|
489
|
+
ServicePresenter.new @gem_presenter, @api, lro.services.first, parent_service: self unless lro.nil?
|
415
490
|
end
|
416
491
|
|
417
492
|
def config_channel_args
|
@@ -459,22 +534,12 @@ module Gapic
|
|
459
534
|
# their names are returned together in an array.
|
460
535
|
# For Ruby currently we have 1:1 proto to code
|
461
536
|
# correspondence for methods, so our generation is easier
|
462
|
-
rpcs: methods.
|
537
|
+
rpcs: methods.to_h { |m| [m.grpc_method_name, m.drift_manifest] }
|
463
538
|
}
|
464
539
|
}
|
465
540
|
}
|
466
541
|
end
|
467
542
|
|
468
|
-
##
|
469
|
-
# How comments in the generated libraries refer to the GRPC client
|
470
|
-
# if no REST code is generated, this should just be "client",
|
471
|
-
# if REST code is generated, this should be disambiguated into the "GRPC client"
|
472
|
-
#
|
473
|
-
# @return [String]
|
474
|
-
def grpc_client_designation
|
475
|
-
generate_rest_clients? ? "GRPC client" : "client"
|
476
|
-
end
|
477
|
-
|
478
543
|
##
|
479
544
|
# The method to use for quick start samples. Normally this is simply the
|
480
545
|
# first non-client-streaming method defined, but it can be overridden via
|
@@ -498,13 +563,34 @@ module Gapic
|
|
498
563
|
# @return [ServicePresenter,ServiceRestPresenter,nil]
|
499
564
|
#
|
500
565
|
def usable_service_presenter
|
501
|
-
if
|
566
|
+
if generate_grpc_clients?
|
502
567
|
self
|
503
|
-
elsif
|
568
|
+
elsif generate_rest_clients?
|
504
569
|
rest
|
505
570
|
end
|
506
571
|
end
|
507
572
|
|
573
|
+
##
|
574
|
+
# Whether this service presenter is a mixin inside a host service's gem
|
575
|
+
# (and not in its own gem)
|
576
|
+
#
|
577
|
+
# @return [Boolean]
|
578
|
+
#
|
579
|
+
def is_hosted_mixin?
|
580
|
+
Gapic::Model::Mixins.mixin_service_address? address, gem_name: @gem_presenter.name
|
581
|
+
end
|
582
|
+
|
583
|
+
##
|
584
|
+
# Whether this service presenter is a mixin inside it's own gem
|
585
|
+
# (and not in another service's gem)
|
586
|
+
#
|
587
|
+
# @return [Boolean]
|
588
|
+
#
|
589
|
+
def is_main_mixin_service?
|
590
|
+
Gapic::Model::Mixins.mixin_service_address?(address) &&
|
591
|
+
!Gapic::Model::Mixins.mixin_service_address?(address, gem_name: @gem_presenter.name)
|
592
|
+
end
|
593
|
+
|
508
594
|
##
|
509
595
|
# Whether there are mixin services that should be referenced
|
510
596
|
# in the client for this service
|
@@ -515,14 +601,74 @@ module Gapic
|
|
515
601
|
@gem_presenter.mixins?
|
516
602
|
end
|
517
603
|
|
604
|
+
##
|
605
|
+
# The models for the mixins
|
606
|
+
#
|
607
|
+
# @return [Enumerable<::Gapic::Model::Mixins::Mixin>]
|
608
|
+
#
|
609
|
+
def mixin_models
|
610
|
+
@gem_presenter.mixins_model.mixins
|
611
|
+
end
|
612
|
+
|
613
|
+
##
|
614
|
+
# Whether there are mixin services that this package has http binding overrides for.
|
615
|
+
#
|
616
|
+
# @return [Boolean]
|
617
|
+
#
|
618
|
+
def mixin_binding_overrides?
|
619
|
+
mixin_presenters.any? { |mixin| !mixin.bindings_override.empty? }
|
620
|
+
end
|
621
|
+
|
622
|
+
##
|
623
|
+
# Whether config for this service should include the `bindings_override` field.
|
624
|
+
# This field is needed:
|
625
|
+
# * if a service is a mixin in it's own package, e.g. `google.Cloud.Location`
|
626
|
+
# * if a service hosts a mixin and has bindings overrides for it
|
627
|
+
# but the generated Operations clients should not have it since override for
|
628
|
+
# their bindings are generated instead of set during runtime.
|
629
|
+
#
|
630
|
+
# GRPC clients should not have this for now, since the overrides are not currently used.
|
631
|
+
#
|
632
|
+
def mixin_should_generate_override_config?
|
633
|
+
false
|
634
|
+
end
|
635
|
+
|
518
636
|
##
|
519
637
|
# The mixin services that should be referenced
|
520
638
|
# in the client for this service
|
521
639
|
#
|
522
|
-
# @return [Enumerable<Gapic::
|
640
|
+
# @return [Enumerable<Gapic::Presenters::Service::MixinClientPresenter>]
|
523
641
|
#
|
524
|
-
def
|
525
|
-
|
642
|
+
def mixin_presenters
|
643
|
+
return [] unless mixins?
|
644
|
+
mixin_models.map do |model|
|
645
|
+
# we don't have mixin's descriptors loaded, so instead of starting with descriptor's methods
|
646
|
+
# and looking up the override, we'll start with overrides and see if any fit the mixin's namespace
|
647
|
+
bindings_override = begin
|
648
|
+
if @api.service_config&.http.nil?
|
649
|
+
{}
|
650
|
+
else
|
651
|
+
service_http_rules = @api.service_config.http.rules.select do |http_rule|
|
652
|
+
http_rule.selector.include? model.service
|
653
|
+
end
|
654
|
+
|
655
|
+
service_http_rules.to_h do |http_rule|
|
656
|
+
bindings = Gapic::Model::Method::HttpAnnotation.new(http_rule).bindings.map do |binding|
|
657
|
+
Gapic::Presenters::Method::HttpBindingPresenter.new binding
|
658
|
+
end
|
659
|
+
[http_rule.selector, bindings]
|
660
|
+
end
|
661
|
+
end
|
662
|
+
end
|
663
|
+
|
664
|
+
Gapic::Presenters::Service::MixinClientPresenter.new service: model.service,
|
665
|
+
client_class_name: model.client_class_name,
|
666
|
+
client_class_docname: model.client_class_docname,
|
667
|
+
client_var_name: model.client_var_name,
|
668
|
+
require_str: model.require_str,
|
669
|
+
service_description: model.service_description,
|
670
|
+
bindings_override: bindings_override
|
671
|
+
end
|
526
672
|
end
|
527
673
|
|
528
674
|
##
|
@@ -611,13 +757,14 @@ module Gapic
|
|
611
757
|
return [] unless nonstandard_lro_consumer?
|
612
758
|
nonstandard_lros_models.map do |lro|
|
613
759
|
lro_wrapper = @api.lookup lro.service_full_name
|
614
|
-
lro_service = ServicePresenter.new
|
760
|
+
lro_service = ServicePresenter.new @gem_presenter, @api, lro_wrapper
|
615
761
|
|
616
762
|
service_description = "long-running operations via #{lro_service.name}"
|
763
|
+
client_var_name = ruby_file_path_for_namespace lro_service.name
|
617
764
|
Gapic::Presenters::Service::LroClientPresenter.new service: lro.service_full_name,
|
618
765
|
client_class_name: lro_service.client_name_full,
|
619
766
|
client_class_docname: lro_service.client_name_full,
|
620
|
-
client_var_name:
|
767
|
+
client_var_name: client_var_name,
|
621
768
|
require_str: lro_service.service_require,
|
622
769
|
service_description: service_description,
|
623
770
|
helper_type: lro_service.nonstandard_lro_name_full
|
@@ -644,12 +791,15 @@ module Gapic
|
|
644
791
|
#
|
645
792
|
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter, Gapic::Model::Mixins::Mixin>]
|
646
793
|
def subclients
|
647
|
-
|
794
|
+
[lro_client_presenter, mixin_presenters, nonstandard_lros].flatten.compact
|
648
795
|
end
|
649
796
|
|
650
|
-
|
797
|
+
def lro_subclients
|
798
|
+
[lro_client_presenter, nonstandard_lros].flatten.compact
|
799
|
+
end
|
651
800
|
|
652
801
|
##
|
802
|
+
# @private
|
653
803
|
# The nonstandard LRO models for the nonstandard LROs that are used by the methods of this service
|
654
804
|
#
|
655
805
|
# @return [Enumerable<Gapic::Model::Method::Lro>]
|
@@ -658,6 +808,8 @@ module Gapic
|
|
658
808
|
methods.select(&:nonstandard_lro?).map(&:lro).uniq(&:service_full_name)
|
659
809
|
end
|
660
810
|
|
811
|
+
private
|
812
|
+
|
661
813
|
def default_config key
|
662
814
|
return unless @service.parent.parent.configuration[:defaults]
|
663
815
|
return unless @service.parent.parent.configuration[:defaults][:service]
|