gapic-generator 0.11.0 → 0.45.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +299 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +71 -37
- data/bin/protoc-gen-ruby_gapic +2 -2
- data/lib/gapic/file_formatter.rb +23 -19
- data/lib/gapic/formatting_utils.rb +22 -9
- data/lib/gapic/gem_builder.rb +15 -17
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/base_generator.rb +6 -4
- data/lib/gapic/generators/default_generator.rb +70 -34
- data/lib/gapic/generators/default_generator_parameters.rb +9 -3
- data/lib/gapic/grpc_service_config/parser.rb +2 -2
- data/lib/gapic/model/api_metadata.rb +173 -0
- data/lib/gapic/model/method/http_annotation.rb +158 -60
- data/lib/gapic/model/method/lro.rb +8 -5
- data/lib/gapic/model/method/routing.rb +3 -18
- data/lib/gapic/model/mixins.rb +76 -10
- data/lib/gapic/model/service/nonstandard_lro_provider.rb +10 -11
- data/lib/gapic/package_snippets.rb +159 -0
- data/lib/gapic/path_pattern/parser.rb +11 -2
- data/lib/gapic/path_pattern/pattern.rb +18 -1
- data/lib/gapic/path_pattern/segment.rb +11 -4
- data/lib/gapic/presenters/enum_presenter.rb +14 -0
- data/lib/gapic/presenters/enum_value_presenter.rb +4 -1
- data/lib/gapic/presenters/field_presenter.rb +78 -21
- data/lib/gapic/presenters/gem_presenter.rb +109 -35
- data/lib/gapic/presenters/message_presenter.rb +15 -0
- data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
- data/lib/gapic/presenters/method/rest_pagination_info.rb +25 -16
- data/lib/gapic/presenters/method_presenter.rb +109 -35
- data/lib/gapic/presenters/method_rest_presenter.rb +70 -137
- data/lib/gapic/presenters/package_presenter.rb +63 -18
- data/lib/gapic/presenters/resource_presenter.rb +9 -3
- data/lib/gapic/presenters/service/lro_client_presenter.rb +14 -14
- data/lib/gapic/presenters/service/mixin_client_presenter.rb +89 -0
- data/lib/gapic/presenters/service/sub_client_presenter.rb +84 -0
- data/lib/gapic/presenters/service_presenter.rb +183 -31
- data/lib/gapic/presenters/service_rest_presenter.rb +180 -27
- data/lib/gapic/presenters/snippet/client_call_presenter.rb +82 -0
- data/lib/gapic/presenters/snippet/client_initialization_presenter.rb +87 -0
- data/lib/gapic/presenters/snippet/declaration_presenter.rb +91 -0
- data/lib/gapic/presenters/snippet/expression_presenter.rb +135 -0
- data/lib/gapic/presenters/snippet/iteration_presenter.rb +118 -0
- data/lib/gapic/presenters/snippet/parameter_presenter.rb +67 -0
- data/lib/gapic/presenters/snippet/request_initialization_presenters.rb +202 -0
- data/lib/gapic/presenters/snippet/response_handling_presenters.rb +329 -0
- data/lib/gapic/presenters/snippet/statement_presenter.rb +134 -0
- data/lib/gapic/presenters/snippet/type_presenter.rb +98 -0
- data/lib/gapic/presenters/snippet_presenter.rb +199 -10
- data/lib/gapic/presenters.rb +2 -0
- data/lib/gapic/runner.rb +1 -1
- data/lib/gapic/schema/api.rb +49 -3
- data/lib/gapic/schema/loader.rb +67 -22
- data/lib/gapic/schema/parameter_schema.rb +8 -8
- data/lib/gapic/schema/proto_tools.rb +193 -0
- data/lib/gapic/schema/request_param_parser.rb +5 -7
- data/lib/gapic/schema/service_config_parser.rb +38 -4
- data/lib/gapic/schema/wrappers.rb +192 -31
- data/lib/gapic/uri_template/parser.rb +15 -7
- data/lib/google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb.rb +104 -0
- data/lib/google/cloud/tools/snippetgen/snippetindex/v1/snippet_index_pb.rb +58 -0
- data/lib/google/protobuf/compiler/plugin_pb.rb +47 -0
- data/templates/default/binding_override.text.erb +6 -0
- data/templates/default/gem/gemfile.text.erb +12 -0
- data/templates/default/gem/{gemspec.erb → gemspec.text.erb} +3 -11
- data/templates/default/gem/{readme.erb → readme.text.erb} +10 -6
- data/templates/default/gem/{rubocop.erb → rubocop.text.erb} +3 -0
- data/templates/default/gem/{test_helper.erb → test_helper.text.erb} +4 -2
- data/templates/default/gem/toys.text.erb +12 -0
- data/templates/default/helpers/default_helper.rb +33 -1
- data/templates/default/lib/_binding_override.text.erb +49 -0
- data/templates/default/lib/{_package.erb → _package.text.erb} +6 -9
- data/templates/default/lib/_package_rest.text.erb +24 -0
- data/templates/default/lib/{_service.erb → _service.text.erb} +11 -23
- data/templates/default/lib/package/_self_configure.text.erb +16 -0
- data/templates/default/lib/package/_self_configure_defaults.text.erb +13 -0
- data/templates/default/lib/package/self_configure/_binding_default.text.erb +15 -0
- data/templates/default/lib/rest/_rest.text.erb +46 -0
- data/templates/default/package_rest.text.erb +6 -0
- data/templates/default/proto_docs/_deprecated.text.erb +9 -0
- data/templates/default/proto_docs/{_enum.erb → _enum.text.erb} +1 -0
- data/templates/default/proto_docs/{_message.erb → _message.text.erb} +2 -0
- data/templates/default/service/client/{_client.erb → _client.text.erb} +60 -12
- data/templates/default/service/client/{_config.erb → _config.text.erb} +39 -8
- data/templates/default/service/client/{_operations.erb → _operations.text.erb} +24 -3
- data/templates/default/service/client/method/{_def.erb → _def.text.erb} +2 -2
- data/templates/default/service/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +2 -1
- data/templates/default/service/client/method/def/_request_normal.text.erb +18 -0
- data/templates/default/service/client/method/def/_request_streaming.text.erb +23 -0
- data/templates/default/service/client/method/def/{_response.erb → _response.text.erb} +2 -0
- data/templates/default/service/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +1 -1
- data/templates/default/service/client/method/def/_response_normal.text.erb +4 -0
- data/templates/default/service/client/method/def/{_response_normal.erb → _response_normal_lro.text.erb} +1 -3
- data/templates/default/service/client/method/def/{_response_paged.erb → _response_paged.text.erb} +1 -1
- data/templates/default/service/client/method/docs/{_request_normal.erb → _request_normal.text.erb} +1 -1
- data/templates/default/service/client/method/docs/_snippets.text.erb +6 -0
- data/templates/default/service/client/resource/_def.text.erb +7 -0
- data/templates/default/service/nonstandard_lro.text.erb +6 -0
- data/templates/default/service/rest/client/{_client.erb → _client.text.erb} +82 -13
- data/templates/default/service/rest/client/_config.text.erb +178 -0
- data/templates/default/service/rest/client/_operations.text.erb +124 -0
- data/templates/default/service/rest/client/method/{_def.erb → _def.text.erb} +7 -1
- data/templates/default/service/rest/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +8 -3
- data/templates/default/service/rest/client/method/def/{_response.erb → _response.text.erb} +4 -0
- data/templates/default/service/rest/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +5 -4
- data/templates/default/service/rest/client/method/def/_response_normal.text.erb +5 -0
- data/templates/default/service/rest/client/method/def/_response_normal_lro.text.erb +7 -0
- data/templates/default/service/rest/client/method/def/_response_paged.text.erb +7 -0
- data/templates/default/service/rest/client/method/def/_response_server_streaming.text.erb +11 -0
- data/templates/default/service/rest/client/method/docs/{_request.erb → _request.text.erb} +1 -3
- data/templates/default/service/rest/client/method/docs/_result.text.erb +10 -0
- data/templates/default/service/rest/client/method/docs/_snippets.text.erb +6 -0
- data/templates/default/service/{nonstandard_lro.erb → rest/nonstandard_lro.text.erb} +1 -1
- data/templates/default/service/rest/operations.text.erb +6 -0
- data/templates/default/service/rest/service_stub/_service_stub.text.erb +63 -0
- data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.text.erb +37 -0
- data/templates/default/service/rest/service_stub/method/_def.text.erb +35 -0
- data/templates/default/service/rest/service_stub/method/def/_response.text.erb +37 -0
- data/templates/default/service/rest/test/{client.erb → client.text.erb} +3 -3
- data/templates/default/service/rest/test/method/_assert_response.text.erb +2 -0
- data/templates/default/service/rest/test/method/{_configure.erb → _configure.text.erb} +3 -2
- data/templates/default/service/rest/test/method/_normal.text.erb +60 -0
- data/templates/default/service/rest/test/method/_server.text.erb +60 -0
- data/templates/default/service/rest/test/method/{_setup.erb → _setup.text.erb} +26 -10
- data/templates/default/service/test/{_resource.erb → _resource.text.erb} +1 -1
- data/templates/default/service/test/{client.erb → client.text.erb} +3 -2
- data/templates/default/service/test/client_paths.text.erb +33 -0
- data/templates/default/service/test/method/{_bidi.erb → _bidi.text.erb} +1 -1
- data/templates/default/service/test/method/{_client.erb → _client.text.erb} +1 -1
- data/templates/default/service/test/method/{_configure.erb → _configure.text.erb} +2 -1
- data/templates/default/service/test/method/{_normal.erb → _normal.text.erb} +1 -1
- data/templates/default/service/test/method/{_server.erb → _server.text.erb} +1 -1
- data/templates/default/service/test/method/{_setup.erb → _setup.text.erb} +19 -2
- data/templates/default/snippets/{gemfile.erb → gemfile.text.erb} +2 -2
- data/templates/default/snippets/snippet/_body.text.erb +24 -0
- data/templates/default/snippets/snippet/_inline.text.erb +11 -0
- data/templates/default/snippets/snippet/_standalone.text.erb +25 -0
- data/templates/default/snippets/{standalone.erb → standalone.text.erb} +1 -1
- metadata +198 -273
- data/lib/google/api/annotations.pb.rb +0 -39
- data/lib/google/api/auth.pb.rb +0 -75
- data/lib/google/api/backend.pb.rb +0 -59
- data/lib/google/api/billing.pb.rb +0 -53
- data/lib/google/api/client.pb.rb +0 -43
- data/lib/google/api/context.pb.rb +0 -47
- data/lib/google/api/control.pb.rb +0 -38
- data/lib/google/api/documentation.pb.rb +0 -56
- data/lib/google/api/endpoint.pb.rb +0 -42
- data/lib/google/api/field_behavior.pb.rb +0 -51
- data/lib/google/api/http.pb.rb +0 -60
- data/lib/google/api/label.pb.rb +0 -49
- data/lib/google/api/launch_stage.pb.rb +0 -37
- data/lib/google/api/log.pb.rb +0 -47
- data/lib/google/api/logging.pb.rb +0 -48
- data/lib/google/api/metric.pb.rb +0 -90
- data/lib/google/api/monitored_resource.pb.rb +0 -68
- data/lib/google/api/monitoring.pb.rb +0 -48
- data/lib/google/api/quota.pb.rb +0 -63
- data/lib/google/api/resource.pb.rb +0 -80
- data/lib/google/api/routing.pb.rb +0 -58
- data/lib/google/api/service.pb.rb +0 -90
- data/lib/google/api/source_info.pb.rb +0 -44
- data/lib/google/api/system_parameter.pb.rb +0 -51
- data/lib/google/api/usage.pb.rb +0 -47
- data/lib/google/cloud/extended_operations.pb.rb +0 -57
- data/lib/google/longrunning/operations.pb.rb +0 -115
- data/lib/google/protobuf/any.pb.rb +0 -40
- data/lib/google/protobuf/api.pb.rb +0 -69
- data/lib/google/protobuf/compiler/plugin.pb.rb +0 -79
- data/lib/google/protobuf/descriptor.pb.rb +0 -360
- data/lib/google/protobuf/duration.pb.rb +0 -41
- data/lib/google/protobuf/empty.pb.rb +0 -36
- data/lib/google/protobuf/source_context.pb.rb +0 -39
- data/lib/google/protobuf/struct.pb.rb +0 -65
- data/lib/google/protobuf/type.pb.rb +0 -128
- data/lib/google/protobuf/wrappers.pb.rb +0 -80
- data/lib/google/rpc/status.pb.rb +0 -46
- data/templates/default/gem/gemfile.erb +0 -4
- data/templates/default/lib/rest/_rest.erb +0 -9
- data/templates/default/service/client/method/def/_request_normal.erb +0 -4
- data/templates/default/service/client/method/def/_request_streaming.erb +0 -9
- data/templates/default/service/client/method/docs/_deprecated.erb +0 -5
- data/templates/default/service/client/method/docs/_snippets.erb +0 -6
- data/templates/default/service/client/resource/_def.erb +0 -6
- data/templates/default/service/rest/client/_config.erb +0 -122
- data/templates/default/service/rest/client/method/def/_response_normal.erb +0 -6
- data/templates/default/service/rest/client/method/def/_response_paged.erb +0 -7
- data/templates/default/service/rest/client/method/docs/_result.erb +0 -6
- data/templates/default/service/rest/service_stub/_service_stub.erb +0 -25
- data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.erb +0 -24
- data/templates/default/service/rest/service_stub/method/_def.erb +0 -20
- data/templates/default/service/rest/service_stub/method/def/_response.erb +0 -17
- data/templates/default/service/rest/test/method/_assert_response.erb +0 -2
- data/templates/default/service/rest/test/method/_normal.erb +0 -71
- data/templates/default/service/test/client_paths.erb +0 -15
- data/templates/default/snippets/snippet/_structure.erb +0 -71
- /data/gem_templates/{binary.erb → binary.text.erb} +0 -0
- /data/gem_templates/{dockerfile.erb → dockerfile.text.erb} +0 -0
- /data/gem_templates/{entrypoint.erb → entrypoint.text.erb} +0 -0
- /data/gem_templates/{gapic_sh.erb → gapic_sh.text.erb} +0 -0
- /data/gem_templates/{gemfile.erb → gemfile.text.erb} +0 -0
- /data/gem_templates/{gemspec.erb → gemspec.text.erb} +0 -0
- /data/gem_templates/{generator.erb → generator.text.erb} +0 -0
- /data/gem_templates/{gitignore.erb → gitignore.text.erb} +0 -0
- /data/gem_templates/{rakefile.erb → rakefile.text.erb} +0 -0
- /data/gem_templates/{readme.erb → readme.text.erb} +0 -0
- /data/gem_templates/{rubocop.erb → rubocop.text.erb} +0 -0
- /data/gem_templates/shared/{_header.erb → _header.text.erb} +0 -0
- /data/gem_templates/shared/{_license.erb → _license.text.erb} +0 -0
- /data/gem_templates/shared/{_warning.erb → _warning.text.erb} +0 -0
- /data/gem_templates/{test_generator.erb → test_generator.text.erb} +0 -0
- /data/gem_templates/{test_helper.erb → test_helper.text.erb} +0 -0
- /data/gem_templates/{version.erb → version.text.erb} +0 -0
- /data/templates/default/gem/{_version.erb → _version.text.erb} +0 -0
- /data/templates/default/gem/{changelog.erb → changelog.text.erb} +0 -0
- /data/templates/default/gem/{entrypoint.erb → entrypoint.text.erb} +0 -0
- /data/templates/default/gem/{gapic_metadata_json.erb → gapic_metadata_json.text.erb} +0 -0
- /data/templates/default/gem/{gitignore.erb → gitignore.text.erb} +0 -0
- /data/templates/default/gem/{license.erb → license.text.erb} +0 -0
- /data/templates/default/gem/{rakefile.erb → rakefile.text.erb} +0 -0
- /data/templates/default/gem/{version.erb → version.text.erb} +0 -0
- /data/templates/default/gem/{yardopts.erb → yardopts.text.erb} +0 -0
- /data/templates/default/layouts/{_ruby.erb → _ruby.text.erb} +0 -0
- /data/templates/default/{package.erb → package.text.erb} +0 -0
- /data/templates/default/proto_docs/{_proto_file.erb → _proto_file.text.erb} +0 -0
- /data/templates/default/proto_docs/{proto_file.erb → proto_file.text.erb} +0 -0
- /data/templates/default/proto_docs/{readme.erb → readme.text.erb} +0 -0
- /data/templates/default/service/{_helpers.erb → _helpers.text.erb} +0 -0
- /data/templates/default/service/client/{_credentials.erb → _credentials.text.erb} +0 -0
- /data/templates/default/service/client/{_nonstandard_lro.erb → _nonstandard_lro.text.erb} +0 -0
- /data/templates/default/service/client/{_paths.erb → _paths.text.erb} +0 -0
- /data/templates/default/service/client/{_requires.erb → _requires.text.erb} +0 -0
- /data/templates/default/service/client/{_resource.erb → _resource.text.erb} +0 -0
- /data/templates/default/service/client/{_self_configure.erb → _self_configure.text.erb} +0 -0
- /data/templates/default/service/client/{_self_configure_defaults.erb → _self_configure_defaults.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_routing_params.erb → _routing_params.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_error.erb → _error.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request_field.erb → _request_field.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request_streaming.erb → _request_streaming.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_response.erb → _response.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_sample.erb → _sample.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_sample_response.erb → _sample_response.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_samples.erb → _samples.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/request_field/{_arg.erb → _arg.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/request_field/{_hash.erb → _hash.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_comment.erb → _comment.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_define.erb → _define.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_loop.erb → _loop.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_print.erb → _print.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_write_file.erb → _write_file.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_doc.erb → _doc.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_multi.erb → _multi.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_single.erb → _single.text.erb} +0 -0
- /data/templates/default/service/{client.erb → client.text.erb} +0 -0
- /data/templates/default/service/{credentials.erb → credentials.text.erb} +0 -0
- /data/templates/default/service/{operations.erb → operations.text.erb} +0 -0
- /data/templates/default/service/{paths.erb → paths.text.erb} +0 -0
- /data/templates/default/service/rest/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
- /data/templates/default/service/rest/client/method/docs/{_error.erb → _error.text.erb} +0 -0
- /data/templates/default/service/rest/{client.erb → client.text.erb} +0 -0
- /data/templates/default/service/rest/{grpc_transcoding.erb → grpc_transcoding.text.erb} +0 -0
- /data/templates/default/service/rest/service_stub/grpc_transcoding_method/def/{_query_string_param.erb → _query_string_param.text.erb} +0 -0
- /data/templates/default/service/rest/service_stub/method/def/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/rest/{service_stub.erb → service_stub.text.erb} +0 -0
- /data/templates/default/service/{rest.erb → rest.text.erb} +0 -0
- /data/templates/default/service/test/{client_operations.erb → client_operations.text.erb} +0 -0
- /data/templates/default/service/test/method/{_assert_response.erb → _assert_response.text.erb} +0 -0
- /data/templates/default/service/test/{smoke.erb → smoke.text.erb} +0 -0
- /data/templates/default/{service.erb → service.text.erb} +0 -0
- /data/templates/default/shared/{_header.erb → _header.text.erb} +0 -0
- /data/templates/default/shared/{_license.erb → _license.text.erb} +0 -0
- /data/templates/default/shared/{_warning.erb → _warning.text.erb} +0 -0
@@ -0,0 +1,329 @@
|
|
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
|
+
# Some common private methods for response handling presenters
|
23
|
+
#
|
24
|
+
module ResponseHandlingPresenterCommon
|
25
|
+
private
|
26
|
+
|
27
|
+
def compute_response_name proto, phase1
|
28
|
+
return "result" if phase1
|
29
|
+
return nil if proto&.response_name.to_s.empty?
|
30
|
+
proto.response_name
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Presentation information about simple response handling
|
36
|
+
#
|
37
|
+
class SimpleResponseHandlingPresenter
|
38
|
+
include ResponseHandlingPresenterCommon
|
39
|
+
|
40
|
+
##
|
41
|
+
# Create a simple response handling presenter
|
42
|
+
#
|
43
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::SimpleResponseHandling]
|
44
|
+
# The protobuf representation
|
45
|
+
# @param json [String]
|
46
|
+
# The JSON representation
|
47
|
+
# @param response_type [String] The fully qualified response message class
|
48
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
49
|
+
#
|
50
|
+
def initialize proto, _json, response_type:, phase1:
|
51
|
+
@response_name = compute_response_name proto, phase1
|
52
|
+
@render_lines =
|
53
|
+
if @response_name && phase1
|
54
|
+
[
|
55
|
+
"# The returned object is of type #{response_type}.",
|
56
|
+
"p #{@response_name}"
|
57
|
+
]
|
58
|
+
else
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
@render = @render_lines.join "\n"
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# The lines of rendered code
|
66
|
+
# @return [Array<String>]
|
67
|
+
#
|
68
|
+
attr_reader :render_lines
|
69
|
+
|
70
|
+
##
|
71
|
+
# The rendered code as a single string, possibly with line breaks
|
72
|
+
# @return [String]
|
73
|
+
#
|
74
|
+
attr_reader :render
|
75
|
+
|
76
|
+
##
|
77
|
+
# The name of the response variable, or nil for no response handling
|
78
|
+
# @return [String,nil]
|
79
|
+
#
|
80
|
+
attr_reader :response_name
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# Presentation information about LRO response handling
|
85
|
+
#
|
86
|
+
class LroResponseHandlingPresenter
|
87
|
+
include ResponseHandlingPresenterCommon
|
88
|
+
|
89
|
+
##
|
90
|
+
# Create an LRO response handling presenter
|
91
|
+
#
|
92
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::LroResponseHandling]
|
93
|
+
# The protobuf representation
|
94
|
+
# @param json [String]
|
95
|
+
# The JSON representation
|
96
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
97
|
+
#
|
98
|
+
def initialize proto, _json, phase1:
|
99
|
+
@response_name = compute_response_name proto, phase1
|
100
|
+
@render_lines = []
|
101
|
+
if @response_name
|
102
|
+
if phase1
|
103
|
+
@render_lines << "# The returned object is of type Gapic::Operation. You can use it to"
|
104
|
+
@render_lines << "# check the status of an operation, cancel it, or wait for results."
|
105
|
+
end
|
106
|
+
case proto&.polling_type
|
107
|
+
when :NONE
|
108
|
+
# Do nothing
|
109
|
+
when :ONCE
|
110
|
+
@render_lines += check_once_lines phase1
|
111
|
+
else
|
112
|
+
@render_lines += wait_response_lines phase1
|
113
|
+
end
|
114
|
+
end
|
115
|
+
@render = @render_lines.join "\n"
|
116
|
+
end
|
117
|
+
|
118
|
+
##
|
119
|
+
# The lines of rendered code
|
120
|
+
# @return [Array<String>]
|
121
|
+
#
|
122
|
+
attr_reader :render_lines
|
123
|
+
|
124
|
+
##
|
125
|
+
# The rendered code as a single string, possibly with line breaks
|
126
|
+
# @return [String]
|
127
|
+
#
|
128
|
+
attr_reader :render
|
129
|
+
|
130
|
+
##
|
131
|
+
# The name of the response variable, or nil for no response handling
|
132
|
+
# @return [String,nil]
|
133
|
+
#
|
134
|
+
attr_reader :response_name
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
def check_once_lines phase1
|
139
|
+
lines = []
|
140
|
+
lines << "# Here is how to check once for a response." if phase1
|
141
|
+
lines + [
|
142
|
+
"if #{@response_name}.response?",
|
143
|
+
" p #{@response_name}.response",
|
144
|
+
"else",
|
145
|
+
' puts "Response not yet arrived."',
|
146
|
+
"end"
|
147
|
+
]
|
148
|
+
end
|
149
|
+
|
150
|
+
def wait_response_lines phase1
|
151
|
+
lines = []
|
152
|
+
lines << "# Here is how to wait for a response." if phase1
|
153
|
+
lines + [
|
154
|
+
"#{@response_name}.wait_until_done! timeout: 60",
|
155
|
+
"if #{@response_name}.response?",
|
156
|
+
" p #{@response_name}.response",
|
157
|
+
"else",
|
158
|
+
' puts "No response received."',
|
159
|
+
"end"
|
160
|
+
]
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
##
|
165
|
+
# Presentation information about server-streaming response handling
|
166
|
+
#
|
167
|
+
class StreamingResponseHandlingPresenter
|
168
|
+
##
|
169
|
+
# Create a server-streaming response handling presenter
|
170
|
+
#
|
171
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::StreamingResponseHandling]
|
172
|
+
# The protobuf representation
|
173
|
+
# @param json [String]
|
174
|
+
# The JSON representation
|
175
|
+
# @param response_name [String] The name of the stream variable
|
176
|
+
# @param base_response_type [String] The fully qualified message class
|
177
|
+
# for individual responses
|
178
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
179
|
+
#
|
180
|
+
def initialize proto, json, response_name:, base_response_type:, phase1:
|
181
|
+
@response_name = response_name
|
182
|
+
@render_lines = []
|
183
|
+
if response_name
|
184
|
+
if phase1 && base_response_type
|
185
|
+
@render_lines << "# The returned object is a streamed enumerable yielding elements of type"
|
186
|
+
@render_lines << "# #{base_response_type}"
|
187
|
+
end
|
188
|
+
@render_lines += per_stream_response_lines proto, json, response_name, phase1
|
189
|
+
end
|
190
|
+
@render = @render_lines.join "\n"
|
191
|
+
end
|
192
|
+
|
193
|
+
##
|
194
|
+
# The lines of rendered code
|
195
|
+
# @return [Array<String>]
|
196
|
+
#
|
197
|
+
attr_reader :render_lines
|
198
|
+
|
199
|
+
##
|
200
|
+
# The rendered code as a single string, possibly with line breaks
|
201
|
+
# @return [String]
|
202
|
+
#
|
203
|
+
attr_reader :render
|
204
|
+
|
205
|
+
##
|
206
|
+
# The name of the response variable, or nil for no response handling
|
207
|
+
# @return [String,nil]
|
208
|
+
#
|
209
|
+
attr_reader :response_name
|
210
|
+
|
211
|
+
private
|
212
|
+
|
213
|
+
def per_stream_response_lines proto, json, response_name, phase1
|
214
|
+
lines = []
|
215
|
+
item_name = phase1 ? "current_response" : proto.current_response_name
|
216
|
+
lines << "#{response_name}.each do |#{item_name}|"
|
217
|
+
if json&.key? "perStreamResponseStatements"
|
218
|
+
proto.per_stream_response_statements&.each_with_index do |statement_proto, index|
|
219
|
+
statement = StatementPresenter.new statement_proto, json["perStreamResponseStatements"][index]
|
220
|
+
lines += statement.render_lines.map { |line| " #{line}" }
|
221
|
+
end
|
222
|
+
else
|
223
|
+
lines << " p #{item_name}"
|
224
|
+
end
|
225
|
+
lines << "end"
|
226
|
+
lines
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
##
|
231
|
+
# Presentation information about paginated response handling
|
232
|
+
#
|
233
|
+
class PaginatedResponseHandlingPresenter
|
234
|
+
include ResponseHandlingPresenterCommon
|
235
|
+
|
236
|
+
##
|
237
|
+
# Create a paginated response handling presenter
|
238
|
+
#
|
239
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::PaginatedResponseHandling]
|
240
|
+
# The protobuf representation
|
241
|
+
# @param json [String]
|
242
|
+
# The JSON representation
|
243
|
+
# @param paged_response_type [String] The fully qualified message class
|
244
|
+
# for individual responses
|
245
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
246
|
+
#
|
247
|
+
def initialize proto, json, paged_response_type:, phase1:
|
248
|
+
@response_name = compute_response_name proto, phase1
|
249
|
+
@render_lines = []
|
250
|
+
if @response_name
|
251
|
+
if phase1
|
252
|
+
@render_lines << "# The returned object is of type Gapic::PagedEnumerable. You can iterate"
|
253
|
+
@render_lines << "# over elements, and API calls will be issued to fetch pages as needed."
|
254
|
+
end
|
255
|
+
@render_lines +=
|
256
|
+
if proto&.by_page
|
257
|
+
by_page_lines proto, json, @response_name, paged_response_type, phase1
|
258
|
+
elsif proto&.next_page_token
|
259
|
+
next_page_token_lines proto, json
|
260
|
+
else
|
261
|
+
by_item_lines proto, json, @response_name, paged_response_type, phase1
|
262
|
+
end
|
263
|
+
end
|
264
|
+
@render = @render_lines.join "\n"
|
265
|
+
end
|
266
|
+
|
267
|
+
##
|
268
|
+
# The lines of rendered code
|
269
|
+
# @return [Array<String>]
|
270
|
+
#
|
271
|
+
attr_reader :render_lines
|
272
|
+
|
273
|
+
##
|
274
|
+
# The rendered code as a single string, possibly with line breaks
|
275
|
+
# @return [String]
|
276
|
+
#
|
277
|
+
attr_reader :render
|
278
|
+
|
279
|
+
##
|
280
|
+
# The name of the response variable, or nil for no response handling
|
281
|
+
# @return [String,nil]
|
282
|
+
#
|
283
|
+
attr_reader :response_name
|
284
|
+
|
285
|
+
private
|
286
|
+
|
287
|
+
def by_item_lines proto, json, collection_name, paged_response_type, phase1
|
288
|
+
lines = []
|
289
|
+
proto = proto&.by_item
|
290
|
+
json = json&.fetch "byItem", nil
|
291
|
+
item_name = phase1 ? "item" : proto.item_name
|
292
|
+
lines << "#{collection_name}.each do |#{item_name}|"
|
293
|
+
if json&.key? "perItemStatements"
|
294
|
+
proto.per_item_statements&.each_with_index do |item_proto, index|
|
295
|
+
statement = StatementPresenter.new item_proto, json["perItemStatements"][index]
|
296
|
+
lines += statement.render_lines.map { |line| " #{line}" }
|
297
|
+
end
|
298
|
+
else
|
299
|
+
lines << " # Each element is of type #{paged_response_type}." if phase1
|
300
|
+
lines << " p #{item_name}"
|
301
|
+
end
|
302
|
+
lines << "end"
|
303
|
+
lines
|
304
|
+
end
|
305
|
+
|
306
|
+
def by_page_lines proto, json, response_name, paged_response_type, phase1
|
307
|
+
lines = []
|
308
|
+
proto = proto.by_page
|
309
|
+
json = json["byPage"]
|
310
|
+
page_name = phase1 ? "page" : proto.page_name
|
311
|
+
lines << "#{response_name}.each_page do |#{page_name}|"
|
312
|
+
if json&.key? "perPageStatements"
|
313
|
+
proto.per_page_statements&.each_with_index do |page_proto, index|
|
314
|
+
statement = StatementPresenter.new page_proto, json["perPageStatements"][index]
|
315
|
+
lines += statement.render_lines.map { |line| " #{line}" }
|
316
|
+
end
|
317
|
+
end
|
318
|
+
iteration_lines = by_item_lines proto, json, page_name, paged_response_type, phase1
|
319
|
+
lines + iteration_lines.map { |line| " #{line}" } + ["end"]
|
320
|
+
end
|
321
|
+
|
322
|
+
def next_page_token_lines _proto, _json
|
323
|
+
# TODO
|
324
|
+
[]
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
@@ -0,0 +1,134 @@
|
|
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 statement
|
23
|
+
#
|
24
|
+
class StatementPresenter
|
25
|
+
##
|
26
|
+
# Create a statement presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Statement]
|
29
|
+
# The protobuf representation of the statement
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the statement
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@render_lines =
|
35
|
+
if json&.key? "declaration"
|
36
|
+
declaration_lines proto.declaration, json["declaration"]
|
37
|
+
elsif json&.key? "standardOutput"
|
38
|
+
output_lines proto.standard_output, json["standardOutput"]
|
39
|
+
elsif json&.key? "return"
|
40
|
+
return_lines proto.return, json["return"]
|
41
|
+
elsif json&.key? "conditional"
|
42
|
+
conditional_lines proto.conditional, json["conditional"]
|
43
|
+
elsif json&.key? "iteration"
|
44
|
+
iteration_lines proto.iteration, json["iteration"]
|
45
|
+
else
|
46
|
+
["# Unknown statement omitted here."]
|
47
|
+
end
|
48
|
+
@render = @render_lines.join "\n"
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# The lines of rendered code
|
53
|
+
# @return [Array<String>]
|
54
|
+
#
|
55
|
+
attr_reader :render_lines
|
56
|
+
|
57
|
+
##
|
58
|
+
# The rendered code as a single string, possibly with line breaks
|
59
|
+
# @return [String]
|
60
|
+
#
|
61
|
+
attr_reader :render
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def declaration_lines proto, json
|
66
|
+
declaration = DeclarationPresenter.new proto, json
|
67
|
+
if declaration.exist?
|
68
|
+
declaration.render_lines
|
69
|
+
else
|
70
|
+
["# Unknown declaration statement omitted here."]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def output_lines proto, json
|
75
|
+
expr = ExpressionPresenter.new proto.value, json["value"]
|
76
|
+
return ["# Unknown output statement omitted here."] unless expr.exist?
|
77
|
+
lines = expr.render_lines
|
78
|
+
if lines.size == 1
|
79
|
+
["puts(#{lines.first})"]
|
80
|
+
else
|
81
|
+
["puts("] + lines.map { |line| " #{line}" } + [")"]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def return_lines proto, json
|
86
|
+
expr = ExpressionPresenter.new proto.result, json["result"]
|
87
|
+
return ["# Unknown return statement omitted here."] unless expr.exist?
|
88
|
+
lines = expr.render_lines
|
89
|
+
lines[0] = "return #{lines.first}"
|
90
|
+
lines
|
91
|
+
end
|
92
|
+
|
93
|
+
def conditional_lines proto, json
|
94
|
+
expr = ExpressionPresenter.new proto.condition, json["condition"]
|
95
|
+
return ["# Unknown conditional statement omitted here."] unless expr.exist?
|
96
|
+
|
97
|
+
if json.key? "onTrue"
|
98
|
+
conditional_lines_inner "if", expr, proto.on_true, json["onTrue"], proto.on_false, json["onFalse"]
|
99
|
+
elsif json.key? "onFalse"
|
100
|
+
conditional_lines_inner "unless", expr, proto.on_false, json["onFalse"], nil, nil
|
101
|
+
else
|
102
|
+
["# Do nothing"]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def conditional_lines_inner keyword, expr, if_protos, if_json, else_protos, else_json
|
107
|
+
lines = ["#{keyword} #{expr.render}"]
|
108
|
+
if_protos.each_with_index do |statement_proto, index|
|
109
|
+
statement = StatementPresenter.new statement_proto, if_json[index]
|
110
|
+
lines += statement.render_lines.map { |line| " #{line}" }
|
111
|
+
end
|
112
|
+
if else_json
|
113
|
+
lines << "else"
|
114
|
+
else_protos.each_with_index do |statement_proto, index|
|
115
|
+
statement = StatementPresenter.new statement_proto, else_json[index]
|
116
|
+
lines += statement.render_lines.map { |line| " #{line}" }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
lines << "end"
|
120
|
+
lines
|
121
|
+
end
|
122
|
+
|
123
|
+
def iteration_lines proto, json
|
124
|
+
iteration = IterationPresenter.new proto, json
|
125
|
+
if iteration.exist?
|
126
|
+
iteration.render_lines
|
127
|
+
else
|
128
|
+
["# Unknown iteration statement omitted here."]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2022 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "active_support/inflector"
|
18
|
+
|
19
|
+
module Gapic
|
20
|
+
module Presenters
|
21
|
+
class SnippetPresenter
|
22
|
+
##
|
23
|
+
# Presentation information about a type
|
24
|
+
#
|
25
|
+
class TypePresenter
|
26
|
+
##
|
27
|
+
# Create a type presenter.
|
28
|
+
#
|
29
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Type]
|
30
|
+
# The protobuf representation of the type
|
31
|
+
# @param json [String]
|
32
|
+
# The JSON representation of the type
|
33
|
+
#
|
34
|
+
def initialize proto, json
|
35
|
+
@render =
|
36
|
+
if json&.key? "scalarType"
|
37
|
+
SCALAR_TYPE_MAPPING[proto.scalar_type] || "Object"
|
38
|
+
elsif json&.key? "bytesType"
|
39
|
+
"String"
|
40
|
+
elsif json&.key? "messageType"
|
41
|
+
proto_to_ruby proto.message_type.message_full_name
|
42
|
+
elsif json&.key? "enumType"
|
43
|
+
proto_to_ruby proto.enum_type.enum_full_name
|
44
|
+
elsif json&.key? "repeatedType"
|
45
|
+
repeated_render proto, json
|
46
|
+
elsif json&.key? "mapType"
|
47
|
+
map_render proto, json
|
48
|
+
else
|
49
|
+
"Object"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# The rendered type string.
|
55
|
+
# @return [String]
|
56
|
+
#
|
57
|
+
attr_reader :render
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def proto_to_ruby name
|
62
|
+
name.split(".").map { |str| ActiveSupport::Inflector.upcase_first str }.join "::"
|
63
|
+
end
|
64
|
+
|
65
|
+
def repeated_render proto, json
|
66
|
+
inner_type = TypePresenter.new proto.repeated_type.element_type, json["repeatedType"]["elementType"]
|
67
|
+
"Array<#{inner_type.render}>"
|
68
|
+
end
|
69
|
+
|
70
|
+
def map_render proto, json
|
71
|
+
proto = proto.map_type
|
72
|
+
json = json["mapType"]
|
73
|
+
key_type = TypePresenter.new proto.key_type, json["keyType"]
|
74
|
+
value_type = TypePresenter.new proto.value_type, json["valueType"]
|
75
|
+
"Hash{#{key_type.render}=>#{value_type.render}}"
|
76
|
+
end
|
77
|
+
|
78
|
+
SCALAR_TYPE_MAPPING = {
|
79
|
+
TYPE_DOUBLE: "Float",
|
80
|
+
TYPE_FLOAT: "Float",
|
81
|
+
TYPE_INT64: "Integer",
|
82
|
+
TYPE_UINT64: "Integer",
|
83
|
+
TYPE_INT32: "Integer",
|
84
|
+
TYPE_FIXED64: "Integer",
|
85
|
+
TYPE_FIXED32: "Integer",
|
86
|
+
TYPE_BOOL: "boolean",
|
87
|
+
TYPE_STRING: "String",
|
88
|
+
TYPE_UINT32: "Integer",
|
89
|
+
TYPE_SFIXED32: "Integer",
|
90
|
+
TYPE_SFIXED64: "Integer",
|
91
|
+
TYPE_SINT32: "Integer",
|
92
|
+
TYPE_SINT64: "Integer"
|
93
|
+
}.freeze
|
94
|
+
private_constant :SCALAR_TYPE_MAPPING
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|