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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +333 -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 -32
- data/lib/gapic/generators/default_generator_parameters.rb +11 -3
- data/lib/gapic/grpc_service_config/{service_config.rb → config.rb} +2 -2
- data/lib/gapic/grpc_service_config/parser.rb +10 -10
- data/lib/gapic/model/api_metadata.rb +173 -0
- data/lib/gapic/model/method/http_annotation.rb +221 -0
- data/lib/gapic/model/method/lro.rb +163 -0
- data/lib/gapic/model/method/routing.rb +248 -0
- data/lib/gapic/model/mixins.rb +247 -0
- data/lib/gapic/model/model_error.rb +26 -0
- data/lib/gapic/model/service/nonstandard_lro_provider.rb +292 -0
- data/lib/gapic/model.rb +22 -0
- data/lib/gapic/package_snippets.rb +159 -0
- data/lib/gapic/path_pattern/parser.rb +11 -2
- data/lib/gapic/path_pattern/pattern.rb +64 -1
- data/lib/gapic/path_pattern/segment.rb +108 -13
- 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 +140 -34
- data/lib/gapic/presenters/{service_config_presenter.rb → grpc_service_config_presenter.rb} +1 -1
- 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 +149 -35
- data/lib/gapic/presenters/method_rest_presenter.rb +79 -168
- 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 +90 -0
- 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 +361 -27
- data/lib/gapic/presenters/service_rest_presenter.rb +247 -13
- 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 -9
- data/lib/gapic/presenters.rb +5 -1
- data/lib/gapic/runner.rb +1 -1
- data/lib/gapic/schema/api.rb +105 -5
- data/lib/gapic/schema/loader.rb +69 -21
- 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 +152 -0
- data/lib/gapic/schema/wrappers.rb +309 -25
- 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/gem/{yardopts.erb → yardopts.text.erb} +1 -1
- 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} +7 -6
- data/templates/default/lib/_package_rest.text.erb +24 -0
- data/templates/default/lib/{_service.erb → _service.text.erb} +14 -20
- 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} +77 -17
- data/templates/default/service/client/{_config.erb → _config.text.erb} +39 -8
- data/templates/default/service/client/_nonstandard_lro.text.erb +57 -0
- data/templates/default/service/client/{_operations.erb → _operations.text.erb} +24 -3
- data/templates/default/service/client/{_self_configure_defaults.erb → _self_configure_defaults.text.erb} +2 -2
- 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} +3 -9
- 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.text.erb +10 -0
- data/templates/default/service/client/method/def/_response_nonstandard_lro.text.erb +23 -0
- 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/def/_routing_params.text.erb +36 -0
- 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.text.erb +202 -0
- 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.text.erb +12 -0
- data/templates/default/service/rest/client/method/def/_response_nonstandard_lro.text.erb +24 -0
- 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/rest/nonstandard_lro.text.erb +6 -0
- 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/{_assert_response.erb → _assert_response.text.erb} +3 -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 +209 -230
- data/lib/google/api/annotations.pb.rb +0 -39
- data/lib/google/api/client.pb.rb +0 -43
- data/lib/google/api/field_behavior.pb.rb +0 -51
- data/lib/google/api/http.pb.rb +0 -60
- data/lib/google/api/resource.pb.rb +0 -80
- data/lib/google/longrunning/operations.pb.rb +0 -115
- data/lib/google/protobuf/any.pb.rb +0 -40
- data/lib/google/protobuf/compiler/plugin.pb.rb +0 -79
- data/lib/google/protobuf/descriptor.pb.rb +0 -360
- data/lib/google/protobuf/empty.pb.rb +0 -36
- 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/def/_response.erb +0 -6
- 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/_client.erb +0 -106
- data/templates/default/service/rest/client/_config.erb +0 -122
- data/templates/default/service/rest/client/method/def/_response.erb +0 -8
- data/templates/default/service/rest/client/method/def/_response_lro.erb +0 -7
- 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/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/{_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/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/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/{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
@@ -30,12 +30,23 @@ 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
|
36
45
|
@service = service
|
37
46
|
@parent_service = parent_service
|
38
47
|
@rest = ServiceRestPresenter.new self, api
|
48
|
+
@nonstandard_lro = api.nonstandard_lro_model_for service.full_name
|
49
|
+
@type = "service"
|
39
50
|
end
|
40
51
|
|
41
52
|
def gem
|
@@ -50,8 +61,12 @@ module Gapic
|
|
50
61
|
PackagePresenter.new @gem_presenter, @api, @service.parent.package
|
51
62
|
end
|
52
63
|
|
64
|
+
def special_compute_behavior?
|
65
|
+
address[0] == "google" && address[1] == "cloud" && address[2] == "compute" && !address[3].to_s.empty?
|
66
|
+
end
|
67
|
+
|
53
68
|
##
|
54
|
-
# @return [Boolean]
|
69
|
+
# @return [Boolean] Whether the service is marked as deprecated.
|
55
70
|
#
|
56
71
|
def is_deprecated?
|
57
72
|
@service.is_deprecated?
|
@@ -64,6 +79,17 @@ module Gapic
|
|
64
79
|
@methods ||= @service.methods.map { |m| MethodPresenter.new self, @api, m }
|
65
80
|
end
|
66
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>]
|
67
93
|
def address
|
68
94
|
@service.address
|
69
95
|
end
|
@@ -97,8 +123,15 @@ module Gapic
|
|
97
123
|
ActiveSupport::Inflector.camelize @service.address[-2]
|
98
124
|
end
|
99
125
|
|
100
|
-
|
101
|
-
|
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
|
102
135
|
end
|
103
136
|
|
104
137
|
def name
|
@@ -208,15 +241,36 @@ module Gapic
|
|
208
241
|
"localhost"
|
209
242
|
end
|
210
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
|
+
|
211
254
|
def generic_endpoint?
|
212
255
|
gem.generic_endpoint?
|
213
256
|
end
|
214
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
|
+
|
215
263
|
def client_scopes
|
216
|
-
common_service_delegate&.client_scopes
|
217
|
-
|
218
|
-
|
219
|
-
|
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
|
+
[]
|
220
274
|
end
|
221
275
|
|
222
276
|
def credentials_name
|
@@ -311,14 +365,36 @@ module Gapic
|
|
311
365
|
ruby_file_path @api, "#{service_name_full}::#{paths_name}"
|
312
366
|
end
|
313
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
|
+
#
|
314
372
|
def generate_rest_clients?
|
315
|
-
@api.generate_rest_clients?
|
373
|
+
@api.generate_rest_clients? && methods_rest_bindings?
|
316
374
|
end
|
317
375
|
|
376
|
+
##
|
377
|
+
# @return [Boolean] Whether the generation of gRPC clients is requested
|
378
|
+
#
|
318
379
|
def generate_grpc_clients?
|
319
380
|
@api.generate_grpc_clients?
|
320
381
|
end
|
321
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
|
+
|
322
398
|
##
|
323
399
|
# @return [Boolean] whether this service contains any methods with REST bindings
|
324
400
|
#
|
@@ -328,10 +404,10 @@ module Gapic
|
|
328
404
|
|
329
405
|
##
|
330
406
|
# @return [Enumerable<Gapic::Presenters::MethodPresenter>]
|
331
|
-
# List of
|
407
|
+
# List of methods for which REST bindings are present and REST methods can be generated
|
332
408
|
#
|
333
409
|
def methods_rest_bindings
|
334
|
-
methods.select
|
410
|
+
methods.select(&:can_generate_rest?)
|
335
411
|
end
|
336
412
|
|
337
413
|
def test_client_file_path
|
@@ -350,18 +426,44 @@ module Gapic
|
|
350
426
|
"#{ActiveSupport::Inflector.underscore name}_stub"
|
351
427
|
end
|
352
428
|
|
429
|
+
##
|
430
|
+
# Whether an AIP-151 LRO subclient needs to be generated for this service
|
431
|
+
#
|
432
|
+
# @return [Boolean]
|
353
433
|
def lro?
|
354
434
|
methods.find(&:lro?)
|
355
435
|
end
|
356
436
|
|
437
|
+
##
|
438
|
+
# A variable name used for the AIP-151 LRO subclients
|
439
|
+
#
|
440
|
+
# @return [String]
|
357
441
|
def lro_client_var
|
358
442
|
"operations_client"
|
359
443
|
end
|
360
444
|
|
445
|
+
##
|
446
|
+
# An instance variable name used for the AIP-151 LRO subclients
|
447
|
+
#
|
448
|
+
# @return [String]
|
361
449
|
def lro_client_ivar
|
362
450
|
"@#{lro_client_var}"
|
363
451
|
end
|
364
452
|
|
453
|
+
##
|
454
|
+
# A presenter for the LRO subclient if needed
|
455
|
+
#
|
456
|
+
# @return [Gapic::Presenters::Service::LroClientPresenter, nil]
|
457
|
+
def lro_client_presenter
|
458
|
+
return nil unless lro?
|
459
|
+
Gapic::Presenters::Service::LroClientPresenter.new service: "google.longrunning.operations",
|
460
|
+
client_class_name: "Operations",
|
461
|
+
client_class_docname: operations_name_full,
|
462
|
+
client_var_name: lro_client_var,
|
463
|
+
require_str: operations_file_path,
|
464
|
+
service_description: "long-running operations"
|
465
|
+
end
|
466
|
+
|
365
467
|
def operations_name
|
366
468
|
"Operations"
|
367
469
|
end
|
@@ -384,7 +486,7 @@ module Gapic
|
|
384
486
|
|
385
487
|
def lro_service
|
386
488
|
lro = @service.parent.parent.files.find { |file| file.name == "google/longrunning/operations.proto" }
|
387
|
-
|
489
|
+
ServicePresenter.new @gem_presenter, @api, lro.services.first, parent_service: self unless lro.nil?
|
388
490
|
end
|
389
491
|
|
390
492
|
def config_channel_args
|
@@ -396,8 +498,8 @@ module Gapic
|
|
396
498
|
@api.grpc_service_config.service_level_configs[grpc_full_name]
|
397
499
|
end
|
398
500
|
|
399
|
-
def
|
400
|
-
|
501
|
+
def grpc_service_config_presenter
|
502
|
+
GrpcServiceConfigPresenter.new grpc_service_config
|
401
503
|
end
|
402
504
|
|
403
505
|
##
|
@@ -408,8 +510,12 @@ module Gapic
|
|
408
510
|
@service.name
|
409
511
|
end
|
410
512
|
|
513
|
+
##
|
514
|
+
# The full proto name for this service
|
515
|
+
#
|
516
|
+
# @return [String]
|
411
517
|
def grpc_full_name
|
412
|
-
@service.
|
518
|
+
@service.full_name
|
413
519
|
end
|
414
520
|
|
415
521
|
##
|
@@ -428,22 +534,12 @@ module Gapic
|
|
428
534
|
# their names are returned together in an array.
|
429
535
|
# For Ruby currently we have 1:1 proto to code
|
430
536
|
# correspondence for methods, so our generation is easier
|
431
|
-
rpcs: methods.
|
537
|
+
rpcs: methods.to_h { |m| [m.grpc_method_name, m.drift_manifest] }
|
432
538
|
}
|
433
539
|
}
|
434
540
|
}
|
435
541
|
end
|
436
542
|
|
437
|
-
##
|
438
|
-
# How comments in the generated libraries refer to the GRPC client
|
439
|
-
# if no REST code is generated, this should just be "client",
|
440
|
-
# if REST code is generated, this should be disambiguated into the "GRPC client"
|
441
|
-
#
|
442
|
-
# @return [String]
|
443
|
-
def grpc_client_designation
|
444
|
-
generate_rest_clients? ? "GRPC client" : "client"
|
445
|
-
end
|
446
|
-
|
447
543
|
##
|
448
544
|
# The method to use for quick start samples. Normally this is simply the
|
449
545
|
# first non-client-streaming method defined, but it can be overridden via
|
@@ -467,13 +563,251 @@ module Gapic
|
|
467
563
|
# @return [ServicePresenter,ServiceRestPresenter,nil]
|
468
564
|
#
|
469
565
|
def usable_service_presenter
|
470
|
-
if
|
566
|
+
if generate_grpc_clients?
|
471
567
|
self
|
472
|
-
elsif
|
568
|
+
elsif generate_rest_clients?
|
473
569
|
rest
|
474
570
|
end
|
475
571
|
end
|
476
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
|
+
|
594
|
+
##
|
595
|
+
# Whether there are mixin services that should be referenced
|
596
|
+
# in the client for this service
|
597
|
+
#
|
598
|
+
# @return [Boolean]
|
599
|
+
#
|
600
|
+
def mixins?
|
601
|
+
@gem_presenter.mixins?
|
602
|
+
end
|
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
|
+
|
636
|
+
##
|
637
|
+
# The mixin services that should be referenced
|
638
|
+
# in the client for this service
|
639
|
+
#
|
640
|
+
# @return [Enumerable<Gapic::Presenters::Service::MixinClientPresenter>]
|
641
|
+
#
|
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
|
672
|
+
end
|
673
|
+
|
674
|
+
##
|
675
|
+
# Name of the nonstandard LRO module
|
676
|
+
#
|
677
|
+
# @return [String]
|
678
|
+
#
|
679
|
+
def nonstandard_lro_name
|
680
|
+
"NonstandardLro"
|
681
|
+
end
|
682
|
+
|
683
|
+
##
|
684
|
+
# Full name of the nonstandard LRO module
|
685
|
+
#
|
686
|
+
# @return [String]
|
687
|
+
#
|
688
|
+
def nonstandard_lro_name_full
|
689
|
+
fix_namespace @api, "#{service_name_full}::#{nonstandard_lro_name}"
|
690
|
+
end
|
691
|
+
|
692
|
+
##
|
693
|
+
# Full file path to the nonstandard LRO module
|
694
|
+
#
|
695
|
+
# @return [String]
|
696
|
+
#
|
697
|
+
def nonstandard_lro_file_path
|
698
|
+
"#{nonstandard_lro_require}.rb"
|
699
|
+
end
|
700
|
+
|
701
|
+
##
|
702
|
+
# File name of the nonstandard LRO module
|
703
|
+
#
|
704
|
+
# @return [String]
|
705
|
+
#
|
706
|
+
def nonstandard_lro_file_name
|
707
|
+
nonstandard_lro_file_path.split("/").last
|
708
|
+
end
|
709
|
+
|
710
|
+
##
|
711
|
+
# The require string for the nonstandard LRO module
|
712
|
+
#
|
713
|
+
# @return [String]
|
714
|
+
#
|
715
|
+
def nonstandard_lro_require
|
716
|
+
ruby_file_path @api, "#{service_name_full}::#{nonstandard_lro_name}"
|
717
|
+
end
|
718
|
+
|
719
|
+
##
|
720
|
+
# Nonstandard lro model for this service
|
721
|
+
#
|
722
|
+
# @return [Gapic::Model::Service::NonstandardLro, Gapic::Model::Service::NoLro]
|
723
|
+
def nonstandard_lro
|
724
|
+
@nonstandard_lro
|
725
|
+
end
|
726
|
+
|
727
|
+
##
|
728
|
+
# The Ruby name for the polling method of the nonstandard LRO provided by this service
|
729
|
+
#
|
730
|
+
# @return [String]
|
731
|
+
def nonstandard_lro_polling_method_name
|
732
|
+
return unless nonstandard_lro_provider?
|
733
|
+
methods.find { |m| m.grpc_method_name == nonstandard_lro.polling_method_name }.name
|
734
|
+
end
|
735
|
+
|
736
|
+
##
|
737
|
+
# Whether this service is a provider of the nonstandard LRO functionality
|
738
|
+
#
|
739
|
+
# @return [Boolean]
|
740
|
+
def nonstandard_lro_provider?
|
741
|
+
@nonstandard_lro.nonstandard_lro?
|
742
|
+
end
|
743
|
+
|
744
|
+
##
|
745
|
+
# Whether one or more methods of this service use the nonstandard LRO functionality
|
746
|
+
#
|
747
|
+
# @return [Boolean]
|
748
|
+
def nonstandard_lro_consumer?
|
749
|
+
methods.find(&:nonstandard_lro?) || false
|
750
|
+
end
|
751
|
+
|
752
|
+
##
|
753
|
+
# The client presenters of the nonstandard LROs that are used by the methods of this service
|
754
|
+
#
|
755
|
+
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter>]
|
756
|
+
def nonstandard_lros
|
757
|
+
return [] unless nonstandard_lro_consumer?
|
758
|
+
nonstandard_lros_models.map do |lro|
|
759
|
+
lro_wrapper = @api.lookup lro.service_full_name
|
760
|
+
lro_service = ServicePresenter.new @gem_presenter, @api, lro_wrapper
|
761
|
+
|
762
|
+
service_description = "long-running operations via #{lro_service.name}"
|
763
|
+
client_var_name = ruby_file_path_for_namespace lro_service.name
|
764
|
+
Gapic::Presenters::Service::LroClientPresenter.new service: lro.service_full_name,
|
765
|
+
client_class_name: lro_service.client_name_full,
|
766
|
+
client_class_docname: lro_service.client_name_full,
|
767
|
+
client_var_name: client_var_name,
|
768
|
+
require_str: lro_service.service_require,
|
769
|
+
service_description: service_description,
|
770
|
+
helper_type: lro_service.nonstandard_lro_name_full
|
771
|
+
end
|
772
|
+
end
|
773
|
+
|
774
|
+
##
|
775
|
+
# Whether there are any subclients to generate with this service.
|
776
|
+
# Subclients are the clients to other services (e.g. an LRO provider service).
|
777
|
+
#
|
778
|
+
# @return [Boolean]
|
779
|
+
def subclients?
|
780
|
+
subclients.any?
|
781
|
+
end
|
782
|
+
|
783
|
+
##
|
784
|
+
# Subclients for this service
|
785
|
+
# Subclients are the clients to other services (e.g. an LRO provider service).
|
786
|
+
#
|
787
|
+
# The following is typically generated for a subclient:
|
788
|
+
# - a require statement for the subclient's class
|
789
|
+
# - a class-level variable in the host service's client
|
790
|
+
# - a code to initialize this variable with a subclient's class instance in the host service's constructor
|
791
|
+
#
|
792
|
+
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter, Gapic::Model::Mixins::Mixin>]
|
793
|
+
def subclients
|
794
|
+
[lro_client_presenter, mixin_presenters, nonstandard_lros].flatten.compact
|
795
|
+
end
|
796
|
+
|
797
|
+
def lro_subclients
|
798
|
+
[lro_client_presenter, nonstandard_lros].flatten.compact
|
799
|
+
end
|
800
|
+
|
801
|
+
##
|
802
|
+
# @private
|
803
|
+
# The nonstandard LRO models for the nonstandard LROs that are used by the methods of this service
|
804
|
+
#
|
805
|
+
# @return [Enumerable<Gapic::Model::Method::Lro>]
|
806
|
+
def nonstandard_lros_models
|
807
|
+
return [] unless nonstandard_lro_consumer?
|
808
|
+
methods.select(&:nonstandard_lro?).map(&:lro).uniq(&:service_full_name)
|
809
|
+
end
|
810
|
+
|
477
811
|
private
|
478
812
|
|
479
813
|
def default_config key
|