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
@@ -32,15 +32,45 @@ module Gapic
|
|
32
32
|
# @return [Gapic::Presenters::MethodRestPresenter]
|
33
33
|
attr_accessor :rest
|
34
34
|
|
35
|
+
# @return [Gapic::Model::Method::Routing]
|
36
|
+
attr_accessor :routing
|
37
|
+
|
38
|
+
# @return [Gapic::Model::Method::HttpAnnotation]
|
39
|
+
attr_accessor :http
|
40
|
+
|
41
|
+
# @return [Array<Gapic::Presenters::Method::HttpBindingsPresenter>]
|
42
|
+
attr_accessor :http_bindings
|
43
|
+
|
44
|
+
# @return [Gapic::Model::Method::AipLro, Gapic::Model::Method::NonStandardLro, Gapic::Model::Method::NoLro]
|
45
|
+
attr_accessor :lro
|
46
|
+
|
47
|
+
# @return [String] String representation of this presenter type.
|
48
|
+
attr_reader :type
|
49
|
+
|
35
50
|
##
|
36
51
|
# @param service_presenter [Gapic::Presenters::ServicePresenter]
|
37
52
|
# @param api [Gapic::Schema::Api]
|
38
53
|
# @param method [Gapic::Schema::Method]
|
54
|
+
#
|
39
55
|
def initialize service_presenter, api, method
|
40
56
|
@service_presenter = service_presenter
|
41
57
|
@api = api
|
42
58
|
@method = method
|
43
|
-
@
|
59
|
+
@type = "method"
|
60
|
+
|
61
|
+
# Service config override should only happen for Operations.
|
62
|
+
# For the main services we expect service config overrides to be rolled into the protos by the publisher.
|
63
|
+
# For all other mixins, since we do not generate them for the service,
|
64
|
+
# the overrides should get configured separately.
|
65
|
+
is_lro = @service_presenter.address.join(".") == Gapic::Model::Mixins::LRO_SERVICE
|
66
|
+
service_config_override_http = is_lro ? @api.service_config : nil
|
67
|
+
@http = Gapic::Model::Method::HttpAnnotation.create_with_override @method, service_config_override_http
|
68
|
+
|
69
|
+
@http_bindings = @http.bindings.map { |binding| Gapic::Presenters::Method::HttpBindingPresenter.new binding }
|
70
|
+
@routing = Gapic::Model::Method::Routing.new @method.routing, @http
|
71
|
+
@lro = Gapic::Model::Method.parse_lro @method, @api
|
72
|
+
|
73
|
+
@rest = MethodRestPresenter.new self, @api
|
44
74
|
end
|
45
75
|
|
46
76
|
##
|
@@ -50,8 +80,22 @@ module Gapic
|
|
50
80
|
@service_presenter
|
51
81
|
end
|
52
82
|
|
53
|
-
|
54
|
-
|
83
|
+
##
|
84
|
+
# Return the "primary" snippet for this method. This should be used for
|
85
|
+
# inline snippets.
|
86
|
+
# @return [Gapic::Presenters::SnippetPresenter]
|
87
|
+
#
|
88
|
+
def snippet transport: nil
|
89
|
+
configs = @api.snippet_configs_for @method.full_name
|
90
|
+
SnippetPresenter.new self, @api, config: configs.first, transport: transport
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# @return [Array<Gapic::Presenters::SnippetPresenter>]
|
95
|
+
#
|
96
|
+
def all_snippets transport: nil
|
97
|
+
configs = @api.snippet_configs_for(@method.full_name) + [nil]
|
98
|
+
configs.map { |config| SnippetPresenter.new self, @api, config: config, transport: transport }
|
55
99
|
end
|
56
100
|
|
57
101
|
def generate_yardoc_snippets?
|
@@ -66,6 +110,18 @@ module Gapic
|
|
66
110
|
end
|
67
111
|
end
|
68
112
|
|
113
|
+
# Proto name of the method (PascalCase)
|
114
|
+
# @return [String]
|
115
|
+
def grpc_name
|
116
|
+
@method.name
|
117
|
+
end
|
118
|
+
|
119
|
+
# Fully qualified proto name of the method (namespace.PascalCase)
|
120
|
+
# @return [String]
|
121
|
+
def grpc_full_name
|
122
|
+
@method.full_name
|
123
|
+
end
|
124
|
+
|
69
125
|
def kind
|
70
126
|
if client_streaming?
|
71
127
|
if server_streaming?
|
@@ -80,8 +136,15 @@ module Gapic
|
|
80
136
|
end
|
81
137
|
end
|
82
138
|
|
83
|
-
|
84
|
-
|
139
|
+
##
|
140
|
+
# The description as it should appear in YARD docs.
|
141
|
+
#
|
142
|
+
# @param transport [:grpc,:rest] Whether xref links should go to REST or
|
143
|
+
# gRPC client classes. Uses the default transport if not provided.
|
144
|
+
# @return [String]
|
145
|
+
#
|
146
|
+
def doc_description transport: nil
|
147
|
+
@method.docs_leading_comments transport: transport
|
85
148
|
end
|
86
149
|
|
87
150
|
def doc_response_type
|
@@ -98,7 +161,7 @@ module Gapic
|
|
98
161
|
end
|
99
162
|
|
100
163
|
##
|
101
|
-
# @return [Boolean]
|
164
|
+
# @return [Boolean] Whether the method is marked as deprecated.
|
102
165
|
#
|
103
166
|
def is_deprecated?
|
104
167
|
@method.is_deprecated?
|
@@ -109,6 +172,14 @@ module Gapic
|
|
109
172
|
arguments.map { |arg| FieldPresenter.new @api, @method.input, arg }
|
110
173
|
end
|
111
174
|
|
175
|
+
# @return [Array<Gapic::Presenters::FieldPresenter>] List of auto populated fields.
|
176
|
+
def auto_populated_fields
|
177
|
+
field_names_to_filter = @api.api_metadata.auto_populated_fields_by_method_name[name] || []
|
178
|
+
@method.input.fields.filter_map do |field|
|
179
|
+
FieldPresenter.new @api, @method.input, field if field_names_to_filter.include? field.name
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
112
183
|
def fields
|
113
184
|
@method.input.fields.map { |field| FieldPresenter.new @api, @method.input, field }
|
114
185
|
end
|
@@ -152,25 +223,20 @@ module Gapic
|
|
152
223
|
"Access the result along with the RPC operation"
|
153
224
|
end
|
154
225
|
|
226
|
+
# Type for MethodPresenter#yield_params
|
227
|
+
YieldParams = Struct.new :name, :doc_types
|
228
|
+
|
155
229
|
def yield_params
|
156
230
|
if lro?
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
231
|
+
[
|
232
|
+
YieldParams.new("operation", "::Gapic::Operation")
|
233
|
+
]
|
234
|
+
else
|
235
|
+
[
|
236
|
+
YieldParams.new("result", return_type),
|
237
|
+
YieldParams.new("operation", "::GRPC::ActiveCall::Operation")
|
162
238
|
]
|
163
239
|
end
|
164
|
-
[
|
165
|
-
OpenStruct.new(
|
166
|
-
name: "result",
|
167
|
-
doc_types: return_type
|
168
|
-
),
|
169
|
-
OpenStruct.new(
|
170
|
-
name: "operation",
|
171
|
-
doc_types: "::GRPC::ActiveCall::Operation"
|
172
|
-
)
|
173
|
-
]
|
174
240
|
end
|
175
241
|
|
176
242
|
# @api.incode samples and sample_configs are yaml configuration files such as
|
@@ -183,12 +249,36 @@ module Gapic
|
|
183
249
|
sample_configs.map { |sample_config| SamplePresenter.new @api, sample_config }
|
184
250
|
end
|
185
251
|
|
252
|
+
##
|
253
|
+
# Whether this method uses standard (AIP-151) LROs
|
254
|
+
#
|
255
|
+
# @return [Boolean]
|
256
|
+
#
|
186
257
|
def lro?
|
187
258
|
return paged_response_type == "::Google::Longrunning::Operation" if paged?
|
188
259
|
|
189
260
|
return_type == "::Google::Longrunning::Operation"
|
190
261
|
end
|
191
262
|
|
263
|
+
##
|
264
|
+
# Whether this method uses nonstandard LROs
|
265
|
+
#
|
266
|
+
# @return [Boolean]
|
267
|
+
#
|
268
|
+
def nonstandard_lro?
|
269
|
+
@lro.nonstandard_lro?
|
270
|
+
end
|
271
|
+
|
272
|
+
##
|
273
|
+
# The presenter for the nonstandard LRO client of the kind this method uses
|
274
|
+
#
|
275
|
+
# @return [Gapic::Presenters::Service::LroClientPresenter, nil]
|
276
|
+
#
|
277
|
+
def nonstandard_lro_client
|
278
|
+
return unless nonstandard_lro?
|
279
|
+
service.nonstandard_lros.find { |model| model.service == @lro.service_full_name }
|
280
|
+
end
|
281
|
+
|
192
282
|
def client_streaming?
|
193
283
|
@method.client_streaming
|
194
284
|
end
|
@@ -216,24 +306,35 @@ module Gapic
|
|
216
306
|
return nil unless paged_response? @method.output
|
217
307
|
|
218
308
|
repeated_field = @method.output.fields.find do |f|
|
219
|
-
f.label ==
|
220
|
-
f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_MESSAGE
|
309
|
+
f.label == :LABEL_REPEATED && f.type == :TYPE_MESSAGE
|
221
310
|
end
|
222
311
|
message_ruby_type repeated_field.message
|
223
312
|
end
|
224
313
|
|
314
|
+
##
|
315
|
+
# @return [String] The name of the repeated field in paginated responses
|
316
|
+
#
|
317
|
+
def paged_response_repeated_field_name
|
318
|
+
return nil unless paged_response? @method.output
|
319
|
+
|
320
|
+
repeated_field = @method.output.fields.find do |f|
|
321
|
+
f.label == :LABEL_REPEATED && f.type == :TYPE_MESSAGE
|
322
|
+
end
|
323
|
+
repeated_field.name
|
324
|
+
end
|
325
|
+
|
225
326
|
##
|
226
327
|
# @return [Array<String>] The segment key names.
|
227
328
|
#
|
228
329
|
def routing_params
|
229
|
-
|
330
|
+
@http.routing_params
|
230
331
|
end
|
231
332
|
|
232
333
|
##
|
233
334
|
# @return [Boolean] Whether any routing params are present
|
234
335
|
#
|
235
336
|
def routing_params?
|
236
|
-
|
337
|
+
@routing.routing_params?
|
237
338
|
end
|
238
339
|
|
239
340
|
def grpc_service_config
|
@@ -243,8 +344,8 @@ module Gapic
|
|
243
344
|
end
|
244
345
|
end
|
245
346
|
|
246
|
-
def
|
247
|
-
|
347
|
+
def grpc_service_config_presenter
|
348
|
+
GrpcServiceConfigPresenter.new grpc_service_config
|
248
349
|
end
|
249
350
|
|
250
351
|
def grpc_method_name
|
@@ -264,12 +365,25 @@ module Gapic
|
|
264
365
|
{ methods: [name] }
|
265
366
|
end
|
266
367
|
|
368
|
+
##
|
369
|
+
# Whether this method can be generated in REST clients
|
370
|
+
# Only methods with http bindings can be generated, and
|
371
|
+
# additionally only unary methods are currently supported.
|
372
|
+
#
|
373
|
+
# @return [Boolean]
|
374
|
+
#
|
375
|
+
def can_generate_rest?
|
376
|
+
rest.can_generate_rest?
|
377
|
+
end
|
378
|
+
|
267
379
|
protected
|
268
380
|
|
269
381
|
def message_ruby_type message
|
270
382
|
ruby_namespace @api, message.address.join(".")
|
271
383
|
end
|
272
384
|
|
385
|
+
# @private
|
386
|
+
# BUG: This code seems to be dead
|
273
387
|
def doc_types_for arg
|
274
388
|
if arg.message?
|
275
389
|
"#{message_ruby_type arg.message}, Hash"
|
@@ -288,12 +402,16 @@ module Gapic
|
|
288
402
|
end
|
289
403
|
end
|
290
404
|
|
405
|
+
# @private
|
406
|
+
# BUG: This code seems to be dead
|
291
407
|
def doc_desc_for arg
|
292
408
|
return nil if arg.docs.leading_comments.empty?
|
293
409
|
|
294
410
|
arg.docs.leading_comments
|
295
411
|
end
|
296
412
|
|
413
|
+
# @private
|
414
|
+
# BUG: This code seems to be dead
|
297
415
|
def default_value_for arg
|
298
416
|
if arg.message?
|
299
417
|
"{}"
|
@@ -315,14 +433,11 @@ module Gapic
|
|
315
433
|
|
316
434
|
def paged_request? request
|
317
435
|
page_token = request.fields.find do |f|
|
318
|
-
f.name == "page_token" && f.type ==
|
436
|
+
f.name == "page_token" && f.type == :TYPE_STRING
|
319
437
|
end
|
320
438
|
return false if page_token.nil?
|
321
439
|
|
322
|
-
page_size_types = [
|
323
|
-
Google::Protobuf::FieldDescriptorProto::Type::TYPE_INT32,
|
324
|
-
Google::Protobuf::FieldDescriptorProto::Type::TYPE_INT64
|
325
|
-
]
|
440
|
+
page_size_types = [:TYPE_INT32, :TYPE_INT64]
|
326
441
|
page_size = request.fields.find do |f|
|
327
442
|
f.name == "page_size" && page_size_types.include?(f.type)
|
328
443
|
end
|
@@ -333,13 +448,12 @@ module Gapic
|
|
333
448
|
|
334
449
|
def paged_response? response
|
335
450
|
next_page_token = response.fields.find do |f|
|
336
|
-
f.name == "next_page_token" && f.type ==
|
451
|
+
f.name == "next_page_token" && f.type == :TYPE_STRING
|
337
452
|
end
|
338
453
|
return false if next_page_token.nil?
|
339
454
|
|
340
455
|
repeated_field = response.fields.find do |f|
|
341
|
-
f.label ==
|
342
|
-
f.type == Google::Protobuf::FieldDescriptorProto::Type::TYPE_MESSAGE
|
456
|
+
f.label == :LABEL_REPEATED && f.type == :TYPE_MESSAGE
|
343
457
|
end
|
344
458
|
return false if repeated_field.nil?
|
345
459
|
|
@@ -15,7 +15,6 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "gapic/presenters/method/rest_pagination_info"
|
18
|
-
require "gapic/uri_template"
|
19
18
|
|
20
19
|
module Gapic
|
21
20
|
module Presenters
|
@@ -24,243 +23,155 @@ module Gapic
|
|
24
23
|
#
|
25
24
|
class MethodRestPresenter
|
26
25
|
# @return [Gapic::Presenters::Method::RestPaginationInfo]
|
27
|
-
attr_reader :
|
26
|
+
attr_reader :compute_pagination
|
27
|
+
|
28
|
+
attr_reader :http_bindings
|
29
|
+
|
30
|
+
# @return [String] String representation of this presenter type.
|
31
|
+
attr_reader :type
|
28
32
|
|
29
33
|
##
|
30
34
|
# @param main_method [Gapic::Presenters::MethodPresenter] the main presenter for this method.
|
31
35
|
# @param api [Gapic::Schema::Api]
|
32
36
|
#
|
33
37
|
def initialize main_method, api
|
34
|
-
@api = api
|
35
38
|
@main_method = main_method
|
36
|
-
@
|
37
|
-
|
38
|
-
|
39
|
+
@http_bindings = main_method.http_bindings
|
40
|
+
@compute_pagination =
|
41
|
+
if @main_method.service.special_compute_behavior?
|
42
|
+
Gapic::Presenters::Method::RestPaginationInfo.new main_method.method, api
|
43
|
+
end
|
44
|
+
@type = "method"
|
39
45
|
end
|
40
46
|
|
41
47
|
##
|
42
|
-
#
|
48
|
+
# Name for the GRPC transcoding helper method
|
43
49
|
#
|
44
|
-
|
45
|
-
!verb.nil?
|
46
|
-
end
|
47
|
-
|
48
|
-
##
|
49
|
-
# @return [Symbol] a http verb for this method
|
50
|
+
# @return [String]
|
50
51
|
#
|
51
|
-
def
|
52
|
-
|
53
|
-
|
54
|
-
method = {
|
55
|
-
get: @proto_method.http.get,
|
56
|
-
post: @proto_method.http.post,
|
57
|
-
put: @proto_method.http.put,
|
58
|
-
patch: @proto_method.http.patch,
|
59
|
-
delete: @proto_method.http.delete
|
60
|
-
}.find { |_, value| !value.empty? }
|
61
|
-
|
62
|
-
method[0] unless method.nil?
|
52
|
+
def transcoding_helper_name
|
53
|
+
"transcode_#{name}_request"
|
63
54
|
end
|
64
55
|
|
65
56
|
##
|
66
|
-
#
|
57
|
+
# Method name
|
67
58
|
#
|
68
|
-
|
69
|
-
!path.empty?
|
70
|
-
end
|
71
|
-
|
72
|
-
##
|
73
|
-
# @return [String] A method path or an empty string if not present
|
59
|
+
# @return [String]
|
74
60
|
#
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
verb_path = [
|
79
|
-
@proto_method.http.get, @proto_method.http.post, @proto_method.http.put,
|
80
|
-
@proto_method.http.patch, @proto_method.http.delete
|
81
|
-
].find { |x| !x.empty? }
|
82
|
-
|
83
|
-
verb_path || @proto_method.http.custom&.path || ""
|
61
|
+
def name
|
62
|
+
@main_method.name
|
84
63
|
end
|
85
64
|
|
86
|
-
|
87
|
-
# @return [
|
88
|
-
|
89
|
-
|
90
|
-
routing_params.any?
|
65
|
+
# Fully qualified proto name of the method (namespace.PascalCase)
|
66
|
+
# @return [String]
|
67
|
+
def grpc_full_name
|
68
|
+
@main_method.grpc.full_name
|
91
69
|
end
|
92
70
|
|
93
71
|
##
|
94
|
-
#
|
72
|
+
# Full class name of the request type
|
95
73
|
#
|
96
|
-
|
97
|
-
Gapic::UriTemplate.parse_arguments path
|
98
|
-
end
|
99
|
-
|
100
|
-
##
|
101
|
-
# Performs a limited version of grpc transcoding to create a string that will interpolate
|
102
|
-
# the values from the request object to create a request URI at runtime.
|
103
|
-
# Currently only supports "value" into "request_object.value"
|
104
|
-
# @param [String] request_obj_name the name of the request object for the interpolation
|
105
|
-
# defaults to "request_pb"
|
106
|
-
# @return [String] A string to interpolate values from the request object into URI
|
74
|
+
# @return [String]
|
107
75
|
#
|
108
|
-
def
|
109
|
-
|
110
|
-
|
111
|
-
routing_params.reduce path do |uri, param|
|
112
|
-
param_esc = Regexp.escape param
|
113
|
-
uri.gsub(/{#{param_esc}[^}]*}/, "\#{#{request_obj_name}.#{param}}")
|
114
|
-
end
|
76
|
+
def request_type
|
77
|
+
@main_method.request_type
|
115
78
|
end
|
116
79
|
|
117
80
|
##
|
118
|
-
#
|
81
|
+
# Full class name of the raw return type of the RPC
|
119
82
|
#
|
120
|
-
def body?
|
121
|
-
return false if @proto_method.http.nil?
|
122
|
-
|
123
|
-
!@proto_method.http.body.empty?
|
124
|
-
end
|
125
|
-
|
126
|
-
##
|
127
|
-
# Name of the variable to use for storing the body result of the transcoding call
|
128
|
-
# Normally "body" but use "_body" for discarding the result for
|
129
|
-
# the calls that do not send body
|
130
83
|
# @return [String]
|
131
|
-
def body_var_name
|
132
|
-
body? ? "body" : "_body"
|
133
|
-
end
|
134
|
-
|
135
|
-
##
|
136
|
-
# @return [String] A body specified for the given method in proto or an empty string if not specified
|
137
|
-
#
|
138
|
-
def body
|
139
|
-
@proto_method.http&.body || ""
|
140
|
-
end
|
141
|
-
|
142
|
-
##
|
143
|
-
# @return [Boolean] True if body contains full request object (`*` in the annotation), false otherwise
|
144
84
|
#
|
145
|
-
def
|
146
|
-
|
85
|
+
def return_type
|
86
|
+
@main_method.return_type
|
147
87
|
end
|
148
88
|
|
149
89
|
##
|
150
|
-
#
|
151
|
-
#
|
152
|
-
# Currently only supports either "*" for "the whole request object" or
|
153
|
-
# "value" for "request_object.value"
|
154
|
-
#
|
155
|
-
# @param [String] request_obj_name the name of the request object for the interpolation
|
156
|
-
# defaults to "request_pb"
|
90
|
+
# Full class name of the return type of the method
|
91
|
+
# (including LRO and Paged cases)
|
157
92
|
#
|
158
|
-
# @return [String]
|
93
|
+
# @return [String]
|
159
94
|
#
|
160
|
-
def
|
161
|
-
return "
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
95
|
+
def doc_response_type
|
96
|
+
return "::Gapic::Operation" if lro?
|
97
|
+
if paged?
|
98
|
+
elem_type = compute_pagination&.paged_element_doc_type || @main_method.paged_response_type
|
99
|
+
return "::Gapic::Rest::PagedEnumerable<#{elem_type}>"
|
100
|
+
end
|
101
|
+
return "::Gapic::GenericLRO::Operation" if nonstandard_lro?
|
102
|
+
return_type
|
166
103
|
end
|
167
104
|
|
168
105
|
##
|
169
|
-
# @return [
|
106
|
+
# @return [String] The name of the repeated field in paginated responses
|
170
107
|
#
|
171
|
-
def
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
return [] if body_is_request_object?
|
178
|
-
|
179
|
-
routing_params_set = routing_params.to_set
|
180
|
-
@main_method.arguments
|
181
|
-
.reject { |arg| routing_params_set.include? arg.name }
|
182
|
-
.reject { |arg| body == arg.name }
|
183
|
-
.reject(&:message?)
|
184
|
-
.reject { |arg| arg.default_value_for_type.nil? }
|
185
|
-
end
|
186
|
-
|
187
|
-
##
|
188
|
-
# Name of the variable to use for storing the query_string_params result of the transcoding call
|
189
|
-
# Normally "query_string_params" but use "_query_string_params" for discarding the result for
|
190
|
-
# the calls that do not sent query_string_params
|
191
|
-
# @return [String]
|
192
|
-
def query_string_params_var_name
|
193
|
-
query_string_params? ? "query_string_params" : "_query_string_params"
|
108
|
+
def paged_response_repeated_field_name
|
109
|
+
if compute_pagination
|
110
|
+
compute_pagination.response_repeated_field_name
|
111
|
+
else
|
112
|
+
@main_method.paged_response_repeated_field_name
|
113
|
+
end
|
194
114
|
end
|
195
115
|
|
196
116
|
##
|
197
|
-
#
|
117
|
+
# Whether the REGAPIC method should be rendered as paged
|
198
118
|
#
|
199
|
-
# @return [
|
200
|
-
|
201
|
-
|
119
|
+
# @return [Boolean]
|
120
|
+
#
|
121
|
+
def paged?
|
122
|
+
compute_pagination ? compute_pagination.paged? : @main_method.paged?
|
202
123
|
end
|
203
124
|
|
204
|
-
|
205
|
-
|
206
|
-
#
|
207
|
-
# @return [String]
|
208
|
-
#
|
209
|
-
def name
|
210
|
-
@main_method.name
|
125
|
+
def lro?
|
126
|
+
@main_method.lro?
|
211
127
|
end
|
212
128
|
|
213
129
|
##
|
214
|
-
#
|
130
|
+
# Whether this method uses nonstandard LROs
|
215
131
|
#
|
216
|
-
# @return [
|
132
|
+
# @return [Boolean]
|
217
133
|
#
|
218
|
-
def
|
219
|
-
@main_method.
|
134
|
+
def nonstandard_lro?
|
135
|
+
@main_method.nonstandard_lro?
|
220
136
|
end
|
221
137
|
|
222
138
|
##
|
223
|
-
#
|
139
|
+
# The presenter for the nonstandard LRO client of the kind this method uses
|
224
140
|
#
|
225
|
-
# @return [
|
141
|
+
# @return [Gapic::Presenters::Service::LroClientPresenter, nil]
|
226
142
|
#
|
227
|
-
def
|
228
|
-
|
143
|
+
def nonstandard_lro_client
|
144
|
+
return unless nonstandard_lro?
|
145
|
+
@main_method.service.rest.nonstandard_lros.find { |model| model.service == @main_method.lro.service_full_name }
|
229
146
|
end
|
230
147
|
|
231
148
|
##
|
232
|
-
#
|
233
|
-
#
|
149
|
+
# Whether this method can be generated in REST clients
|
150
|
+
# Only methods with http bindings can be generated, and
|
151
|
+
# additionally only unary methods are currently supported.
|
234
152
|
#
|
235
|
-
# @return [
|
153
|
+
# @return [Boolean]
|
236
154
|
#
|
237
|
-
def
|
238
|
-
|
239
|
-
|
240
|
-
|
155
|
+
def can_generate_rest?
|
156
|
+
[:normal, :server].include?(@main_method.kind) &&
|
157
|
+
http_bindings.first&.verb? &&
|
158
|
+
http_bindings.first&.path?
|
241
159
|
end
|
242
160
|
|
243
161
|
##
|
244
|
-
# Whether
|
162
|
+
# Whether this method is a server-streaming method
|
245
163
|
#
|
246
164
|
# @return [Boolean]
|
247
165
|
#
|
248
|
-
def
|
249
|
-
@
|
166
|
+
def server_streaming?
|
167
|
+
@main_method.server_streaming?
|
250
168
|
end
|
251
169
|
|
252
170
|
##
|
253
|
-
# Whether the
|
254
|
-
# [TODO (virost, 2021-08) Update this when DiReGapic LRO annotations are added to the Compute protos]
|
171
|
+
# @return [Boolean] Whether the method is marked as deprecated.
|
255
172
|
#
|
256
|
-
|
257
|
-
|
258
|
-
def lro?
|
259
|
-
return_type == "::Google::Cloud::Compute::V1::Operation" &&
|
260
|
-
@main_method.service.name != "ZoneOperations" &&
|
261
|
-
@main_method.service.name != "RegionOperations" &&
|
262
|
-
@main_method.service.name != "GlobalOperations" &&
|
263
|
-
@main_method.service.name != "GlobalOrganizationOperations"
|
173
|
+
def is_deprecated?
|
174
|
+
@main_method.is_deprecated?
|
264
175
|
end
|
265
176
|
end
|
266
177
|
end
|