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
@@ -17,6 +17,7 @@
|
|
17
17
|
require "active_support/inflector"
|
18
18
|
require "gapic/helpers/filepath_helper"
|
19
19
|
require "gapic/helpers/namespace_helper"
|
20
|
+
require "forwardable"
|
20
21
|
|
21
22
|
module Gapic
|
22
23
|
module Presenters
|
@@ -27,6 +28,18 @@ module Gapic
|
|
27
28
|
include Gapic::Helpers::FilepathHelper
|
28
29
|
include Gapic::Helpers::NamespaceHelper
|
29
30
|
|
31
|
+
extend Forwardable
|
32
|
+
def_delegators :@main_service, :name, :helpers_file_name, :is_hosted_mixin?, :is_main_mixin_service?, :mixins?,
|
33
|
+
:mixin_binding_overrides?, :grpc_service_config, :grpc_service_config_presenter, :lro_service,
|
34
|
+
:lro_client_var, :nonstandard_lro_provider?, :credentials_class_xref, :client_name, :module_name,
|
35
|
+
:grpc_full_name, :client_suffix_for_default_transport, :client_endpoint_template
|
36
|
+
|
37
|
+
# The namespace of the service. (not the client)
|
38
|
+
# Intentionally does not include "Rest", since
|
39
|
+
# we do not want Rest service's configuration to
|
40
|
+
# default to GRPC configuration (right now).
|
41
|
+
def_delegators :@main_service, :namespace
|
42
|
+
|
30
43
|
##
|
31
44
|
# @param main_service [Gapic::Presenters::ServicePresenter]
|
32
45
|
# @param api [Gapic::Schema::Api]
|
@@ -34,15 +47,37 @@ module Gapic
|
|
34
47
|
def initialize main_service, api
|
35
48
|
@main_service = main_service
|
36
49
|
@api = api
|
50
|
+
@type = "service"
|
37
51
|
end
|
38
52
|
|
39
53
|
##
|
54
|
+
# Full Ruby name of this service
|
55
|
+
#
|
40
56
|
# @return [String]
|
41
57
|
#
|
42
58
|
def service_name_full
|
43
59
|
fix_namespace api, "#{main_service.service_name_full}::Rest"
|
44
60
|
end
|
45
61
|
|
62
|
+
##
|
63
|
+
# Require path for this service
|
64
|
+
#
|
65
|
+
# @return [String]
|
66
|
+
#
|
67
|
+
def service_require
|
68
|
+
ruby_file_path @api, service_name_full
|
69
|
+
end
|
70
|
+
|
71
|
+
##
|
72
|
+
# Folder name for this service
|
73
|
+
# This is just "rest" for rest services
|
74
|
+
#
|
75
|
+
# @return [String]
|
76
|
+
#
|
77
|
+
def service_directory_name
|
78
|
+
"rest"
|
79
|
+
end
|
80
|
+
|
46
81
|
##
|
47
82
|
# @return [String]
|
48
83
|
#
|
@@ -71,13 +106,6 @@ module Gapic
|
|
71
106
|
"#{service_stub_require}.rb"
|
72
107
|
end
|
73
108
|
|
74
|
-
##
|
75
|
-
# @return [String]
|
76
|
-
#
|
77
|
-
def client_name
|
78
|
-
main_service.client_name
|
79
|
-
end
|
80
|
-
|
81
109
|
##
|
82
110
|
# @return [String]
|
83
111
|
#
|
@@ -124,21 +152,187 @@ module Gapic
|
|
124
152
|
# @return [String]
|
125
153
|
#
|
126
154
|
def test_client_file_path
|
127
|
-
main_service.service_file_path.sub ".rb", "
|
155
|
+
main_service.service_file_path.sub ".rb", "_rest_test.rb"
|
128
156
|
end
|
129
157
|
|
130
158
|
##
|
131
159
|
# @return [String]
|
132
160
|
#
|
133
|
-
def
|
134
|
-
|
161
|
+
def configure_client_call
|
162
|
+
"#{client_name_full}.configure"
|
135
163
|
end
|
136
164
|
|
137
165
|
##
|
166
|
+
# Name of the nonstandard LRO module
|
167
|
+
#
|
138
168
|
# @return [String]
|
139
169
|
#
|
140
|
-
def
|
141
|
-
"
|
170
|
+
def nonstandard_lro_name
|
171
|
+
"NonstandardLro"
|
172
|
+
end
|
173
|
+
|
174
|
+
##
|
175
|
+
# Full name of the nonstandard LRO module
|
176
|
+
#
|
177
|
+
# @return [String]
|
178
|
+
#
|
179
|
+
def nonstandard_lro_name_full
|
180
|
+
fix_namespace @api, "#{service_name_full}::#{nonstandard_lro_name}"
|
181
|
+
end
|
182
|
+
|
183
|
+
##
|
184
|
+
# Full file path to the nonstandard LRO module
|
185
|
+
#
|
186
|
+
# @return [String]
|
187
|
+
#
|
188
|
+
def nonstandard_lro_file_path
|
189
|
+
"#{nonstandard_lro_require}.rb"
|
190
|
+
end
|
191
|
+
|
192
|
+
##
|
193
|
+
# File name of the nonstandard LRO module
|
194
|
+
#
|
195
|
+
# @return [String]
|
196
|
+
#
|
197
|
+
def nonstandard_lro_file_name
|
198
|
+
nonstandard_lro_file_path.split("/").last
|
199
|
+
end
|
200
|
+
|
201
|
+
##
|
202
|
+
# The require string for the nonstandard LRO module
|
203
|
+
#
|
204
|
+
# @return [String]
|
205
|
+
#
|
206
|
+
def nonstandard_lro_require
|
207
|
+
ruby_file_path @api, "#{service_name_full}::#{nonstandard_lro_name}"
|
208
|
+
end
|
209
|
+
|
210
|
+
##
|
211
|
+
# A presenter for the LRO subclient if needed
|
212
|
+
#
|
213
|
+
# @return [Gapic::Presenters::Service::LroClientPresenter, nil]
|
214
|
+
def lro_client_presenter
|
215
|
+
return nil unless lro?
|
216
|
+
Gapic::Presenters::Service::LroClientPresenter.new service: "google.longrunning.operations",
|
217
|
+
client_class_name: "Operations",
|
218
|
+
client_class_docname: operations_name_full,
|
219
|
+
client_var_name: lro_client_var,
|
220
|
+
require_str: operations_file_path,
|
221
|
+
service_description: "long-running operations"
|
222
|
+
end
|
223
|
+
|
224
|
+
##
|
225
|
+
# Whether an AIP-151 LRO subclient needs to be generated for this service
|
226
|
+
#
|
227
|
+
# @return [Boolean]
|
228
|
+
def lro?
|
229
|
+
methods.find(&:lro?)
|
230
|
+
end
|
231
|
+
|
232
|
+
def operations_name
|
233
|
+
"Operations"
|
234
|
+
end
|
235
|
+
|
236
|
+
def operations_name_full
|
237
|
+
fix_namespace @api, "#{service_name_full}::#{operations_name}"
|
238
|
+
end
|
239
|
+
|
240
|
+
def operations_file_path
|
241
|
+
"#{operations_require}.rb"
|
242
|
+
end
|
243
|
+
|
244
|
+
def operations_file_name
|
245
|
+
operations_file_path.split("/").last
|
246
|
+
end
|
247
|
+
|
248
|
+
def operations_require
|
249
|
+
ruby_file_path @api, "#{service_name_full}::#{operations_name}"
|
250
|
+
end
|
251
|
+
|
252
|
+
def operations_stub_name
|
253
|
+
"OperationsServiceStub"
|
254
|
+
end
|
255
|
+
|
256
|
+
##
|
257
|
+
# The client presenters of the nonstandard LROs that are used by the methods of this service
|
258
|
+
#
|
259
|
+
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter>]
|
260
|
+
def nonstandard_lros
|
261
|
+
return [] unless main_service.nonstandard_lro_consumer?
|
262
|
+
main_service.nonstandard_lros_models.map do |lro|
|
263
|
+
lro_wrapper = @api.lookup lro.service_full_name
|
264
|
+
lro_service = ServicePresenter.new(main_service.gem, @api, lro_wrapper).rest
|
265
|
+
|
266
|
+
service_description = "long-running operations via #{lro_service.name}"
|
267
|
+
client_var_name = ruby_file_path_for_namespace lro_service.name
|
268
|
+
Gapic::Presenters::Service::LroClientPresenter.new service: lro.service_full_name,
|
269
|
+
client_class_name: lro_service.client_name_full,
|
270
|
+
client_class_docname: lro_service.client_name_full,
|
271
|
+
client_var_name: client_var_name,
|
272
|
+
require_str: lro_service.service_require,
|
273
|
+
service_description: service_description,
|
274
|
+
helper_type: lro_service.nonstandard_lro_name_full
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
##
|
279
|
+
# Whether config for this service should include the `bindings_override` field.
|
280
|
+
# This field is needed:
|
281
|
+
# * if a service is a mixin in it's own package, e.g. `google.Cloud.Location`
|
282
|
+
# * if a service hosts a mixin and has bindings overrides for it
|
283
|
+
# but the generated Operations clients should not have it since override for
|
284
|
+
# their bindings are generated instead of set during runtime.
|
285
|
+
#
|
286
|
+
def mixin_should_generate_override_config?
|
287
|
+
(is_main_mixin_service? || main_service.mixin_binding_overrides?) &&
|
288
|
+
main_service.grpc_full_name != "google.longrunning.Operations"
|
289
|
+
end
|
290
|
+
|
291
|
+
##
|
292
|
+
# The client presenters of the mixin services that are used by the methods of this service
|
293
|
+
#
|
294
|
+
# @return [Enumerable<Gapic::Presenters::Service::MixinClientPresenter>]
|
295
|
+
def mixin_presenters
|
296
|
+
return [] unless main_service.mixins?
|
297
|
+
main_service.mixin_presenters.map do |grpc_presenter|
|
298
|
+
model = main_service.mixin_models.find { |mdl| mdl.service == grpc_presenter.service }
|
299
|
+
raise "Mismatch between model and presenters in service #{service_name_full}" unless model
|
300
|
+
|
301
|
+
Gapic::Presenters::Service::MixinClientPresenter.new service: model.service,
|
302
|
+
client_class_name: model.client_class_name_rest,
|
303
|
+
client_class_docname: model.client_class_docname_rest,
|
304
|
+
client_var_name: model.client_var_name,
|
305
|
+
require_str: model.require_str_rest,
|
306
|
+
service_description: model.service_description,
|
307
|
+
bindings_override: grpc_presenter.bindings_override
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
##
|
312
|
+
# Whether there are any subclients to generate with this service.
|
313
|
+
# Subclients are the clients to other services (e.g. an LRO provider service).
|
314
|
+
#
|
315
|
+
# @return [Boolean]
|
316
|
+
def subclients?
|
317
|
+
subclients.any?
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# Subclients for this service
|
322
|
+
# Subclients are the clients to other services (e.g. an LRO provider service).
|
323
|
+
#
|
324
|
+
# The following is typically generated for a subclient:
|
325
|
+
# - a require statement for the subclient's class
|
326
|
+
# - a class-level variable in the host service's client
|
327
|
+
# - a code to initialize this variable with a subclient's class instance in the host service's constructor
|
328
|
+
#
|
329
|
+
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter, Gapic::Model::Mixins::Mixin>]
|
330
|
+
def subclients
|
331
|
+
[lro_client_presenter, mixin_presenters, nonstandard_lros].flatten.compact
|
332
|
+
end
|
333
|
+
|
334
|
+
def lro_subclients
|
335
|
+
[lro_client_presenter, nonstandard_lros].flatten.compact
|
142
336
|
end
|
143
337
|
|
144
338
|
##
|
@@ -147,19 +341,59 @@ module Gapic
|
|
147
341
|
# a gem config.
|
148
342
|
#
|
149
343
|
# @return [Gapic::Presenters::MethodRestPresenter] if there is a method
|
150
|
-
#
|
344
|
+
# appropriate for quick start
|
151
345
|
# @return [nil] if there is no method appropriate for quick start
|
152
346
|
#
|
153
347
|
def quick_start_method
|
154
348
|
main_service.quick_start_method&.rest
|
155
349
|
end
|
156
350
|
|
351
|
+
##
|
352
|
+
# Presenters for methods that can be generated in REST clients.
|
353
|
+
#
|
354
|
+
# @return [Enumerable<Gapic::Presenters::MethodPresenter>]
|
355
|
+
#
|
356
|
+
def methods
|
357
|
+
main_service.methods.select(&:can_generate_rest?)
|
358
|
+
end
|
359
|
+
|
360
|
+
##
|
361
|
+
# Require string for the helpers file
|
362
|
+
#
|
363
|
+
# @return [String]
|
364
|
+
#
|
365
|
+
def helpers_require
|
366
|
+
ruby_file_path @api, "#{service_name_full}::Helpers"
|
367
|
+
end
|
368
|
+
|
369
|
+
##
|
370
|
+
# Whether this rest service should send the numeric enums signal
|
371
|
+
# @return [Boolean]
|
372
|
+
#
|
373
|
+
def numeric_enums?
|
374
|
+
main_service.gem.rest_numeric_enums?
|
375
|
+
end
|
376
|
+
|
377
|
+
##
|
378
|
+
# @return [Boolean] Whether the service is marked as deprecated.
|
379
|
+
#
|
380
|
+
def is_deprecated?
|
381
|
+
@main_service.is_deprecated?
|
382
|
+
end
|
383
|
+
|
384
|
+
# @return [String] The api_version for this service, or empty if not defined.
|
385
|
+
def api_version
|
386
|
+
@main_service.api_version.to_s
|
387
|
+
end
|
388
|
+
|
157
389
|
private
|
158
390
|
|
159
391
|
# @return [Gapic::Presenters::ServicePresenter]
|
160
392
|
attr_reader :main_service
|
161
393
|
# @return [Gapic::Schema::Api]
|
162
394
|
attr_reader :api
|
395
|
+
# @return [String] String representation of this presenter type.
|
396
|
+
attr_reader :type
|
163
397
|
end
|
164
398
|
end
|
165
399
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2022 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about client call invocation
|
23
|
+
#
|
24
|
+
class ClientCallPresenter
|
25
|
+
##
|
26
|
+
# Create a client call presenter
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientCall]
|
29
|
+
# The protobuf representation
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation
|
32
|
+
# @param method_name [String] The method name
|
33
|
+
# @param request_name [String] The request variable name
|
34
|
+
# @param response_name [String,nil] The response variable name, or nil for no response handling
|
35
|
+
# @param client_streaming [Boolean] True if the call is client streaming
|
36
|
+
# @param server_streaming [Boolean] True if the call is server streaming
|
37
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
38
|
+
#
|
39
|
+
def initialize proto, json,
|
40
|
+
method_name:, request_name:, response_name:, client_streaming:, server_streaming:, phase1:
|
41
|
+
@render_lines = pre_call_lines proto, json, method_name, client_streaming, server_streaming, phase1
|
42
|
+
main_line = "client.#{method_name} #{request_name}"
|
43
|
+
main_line = "#{response_name} = #{main_line}" if response_name
|
44
|
+
@render_lines << main_line
|
45
|
+
@render = @render_lines.join "\n"
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# The lines of rendered code
|
50
|
+
# @return [Array<String>]
|
51
|
+
#
|
52
|
+
attr_reader :render_lines
|
53
|
+
|
54
|
+
##
|
55
|
+
# The rendered code as a single string, possibly with line breaks
|
56
|
+
# @return [String]
|
57
|
+
#
|
58
|
+
attr_reader :render
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def pre_call_lines proto, json, method_name, client_streaming, server_streaming, phase1
|
63
|
+
lines = []
|
64
|
+
if json&.key? "preCall"
|
65
|
+
proto.pre_call.each_with_index do |statement_proto, index|
|
66
|
+
statement = StatementPresenter.new statement_proto, json["preCall"][index]
|
67
|
+
lines += statement.render_lines
|
68
|
+
end
|
69
|
+
elsif phase1
|
70
|
+
lines <<
|
71
|
+
if client_streaming || server_streaming
|
72
|
+
"# Call the #{method_name} method to start streaming."
|
73
|
+
else
|
74
|
+
"# Call the #{method_name} method."
|
75
|
+
end
|
76
|
+
end
|
77
|
+
lines
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2022 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about client object initialization
|
23
|
+
#
|
24
|
+
class ClientInitializationPresenter
|
25
|
+
##
|
26
|
+
# Create an client init presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientInitialization]
|
29
|
+
# The protobuf representation
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation
|
32
|
+
# @param phase1 [Boolean] Whether to inject phase 1 content
|
33
|
+
# @param client_type [String] The fully qualified class name of the client
|
34
|
+
#
|
35
|
+
def initialize proto, json, phase1:, client_type:
|
36
|
+
@render_lines = []
|
37
|
+
if json&.key? "preClientInitialization"
|
38
|
+
proto.pre_client_initialization.each_with_index do |stmt_proto, index|
|
39
|
+
statement = StatementPresenter.new stmt_proto, json["preClientInitialization"][index]
|
40
|
+
@render_lines += statement.render_lines
|
41
|
+
end
|
42
|
+
elsif phase1
|
43
|
+
@render_lines << "# Create a client object. The client can be reused for multiple calls."
|
44
|
+
end
|
45
|
+
@render_lines += build_create_code proto, client_type
|
46
|
+
@render = @render_lines.join "\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# The lines of rendered code
|
51
|
+
# @return [Array<String>]
|
52
|
+
#
|
53
|
+
attr_reader :render_lines
|
54
|
+
|
55
|
+
##
|
56
|
+
# The rendered code as a single string, possibly with line breaks
|
57
|
+
# @return [String]
|
58
|
+
#
|
59
|
+
attr_reader :render
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def build_create_code proto, client_type
|
64
|
+
create_code = "client = #{client_type}.new"
|
65
|
+
if proto&.custom_service_endpoint
|
66
|
+
endpoint = build_endpoint proto.custom_service_endpoint
|
67
|
+
[
|
68
|
+
"#{create_code} do |config|",
|
69
|
+
" config.endpoint = #{endpoint.inspect}",
|
70
|
+
"end"
|
71
|
+
]
|
72
|
+
else
|
73
|
+
[create_code]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def build_endpoint proto
|
78
|
+
init_module = Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientInitialization
|
79
|
+
schema = proto.schema == init_module::ServiceEndpoint::ServiceEndpointSchema::HTTP ? "http://" : "https://"
|
80
|
+
region = proto.region.to_s.empty? ? "" : "#{proto.region}-"
|
81
|
+
port = proto.port.zero? ? "" : ":#{proto.port}"
|
82
|
+
[schema, region, proto.host, port].join
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2022 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about a declaration
|
23
|
+
#
|
24
|
+
class DeclarationPresenter
|
25
|
+
##
|
26
|
+
# Create a declaration presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Statement::Declaration]
|
29
|
+
# The protobuf representation of the declaration
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the declaration
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@render = @render_lines = @name = @description = @has_value = nil
|
35
|
+
return unless proto && json
|
36
|
+
@name = proto.name
|
37
|
+
@description = proto.description unless proto.description.empty?
|
38
|
+
@render_lines = @description ? ["# #{@description}"] : []
|
39
|
+
expr = ExpressionPresenter.new proto.value, json["value"]
|
40
|
+
@has_value = expr.exist?
|
41
|
+
if @has_value
|
42
|
+
expr_lines = expr.render_lines
|
43
|
+
expr_lines[0] = "#{proto.name} = #{expr_lines.first}"
|
44
|
+
@render_lines += expr_lines
|
45
|
+
end
|
46
|
+
@render = @render_lines.join "\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# The name of the variable being declared
|
51
|
+
# @return [String]
|
52
|
+
#
|
53
|
+
attr_reader :name
|
54
|
+
|
55
|
+
##
|
56
|
+
# The description, or nil if none
|
57
|
+
# @return [String,nil]
|
58
|
+
#
|
59
|
+
attr_reader :description
|
60
|
+
|
61
|
+
##
|
62
|
+
# The lines of rendered code
|
63
|
+
# @return [Array<String>]
|
64
|
+
#
|
65
|
+
attr_reader :render_lines
|
66
|
+
|
67
|
+
##
|
68
|
+
# The rendered code as a single string, possibly with line breaks
|
69
|
+
# @return [String]
|
70
|
+
#
|
71
|
+
attr_reader :render
|
72
|
+
|
73
|
+
##
|
74
|
+
# Whether the declaration could be interpreted.
|
75
|
+
# @return [Boolean]
|
76
|
+
#
|
77
|
+
def exist?
|
78
|
+
!render_lines.nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
# Whether the declaration includes a value.
|
83
|
+
# @return [Boolean]
|
84
|
+
#
|
85
|
+
def value?
|
86
|
+
@has_value
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|