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,118 @@
|
|
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 an iteration
|
23
|
+
#
|
24
|
+
class IterationPresenter
|
25
|
+
##
|
26
|
+
# Create an iteration presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Statement::Iteration]
|
29
|
+
# The protobuf representation of the iteration
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the iteration
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@prelude_render_lines, @postlude_render_lines =
|
35
|
+
if json&.key? "repeatedIteration"
|
36
|
+
parse_repeated_iteration proto.repeated_iteration, json["repeatedIteration"]
|
37
|
+
elsif json&.key? "mapIteration"
|
38
|
+
parse_map_iteration proto.map_iteration, json["mapIteration"]
|
39
|
+
else
|
40
|
+
# TODO: numeric sequence and bytes iteration
|
41
|
+
[[], []]
|
42
|
+
end
|
43
|
+
if @prelude_render_lines.empty? && @postlude_render_lines.empty?
|
44
|
+
@inner_render_lines = @render_lines = @render = nil
|
45
|
+
else
|
46
|
+
@inner_render_lines = parse_inner_lines proto&.statements, json&.fetch("statements", nil)
|
47
|
+
@render_lines = @prelude_render_lines +
|
48
|
+
@inner_render_lines.map { |line| " #{line}" } +
|
49
|
+
@postlude_render_lines
|
50
|
+
@render = @render_lines.join "\n"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# The iteration prelude lines
|
56
|
+
# @return [Array<String>]
|
57
|
+
#
|
58
|
+
attr_reader :prelude_render_lines
|
59
|
+
|
60
|
+
##
|
61
|
+
# The iteration postlude lines
|
62
|
+
# @return [Array<String>]
|
63
|
+
#
|
64
|
+
attr_reader :postlude_render_lines
|
65
|
+
|
66
|
+
##
|
67
|
+
# The inner statement lines
|
68
|
+
# @return [Array<String>]
|
69
|
+
#
|
70
|
+
attr_reader :inner_render_lines
|
71
|
+
|
72
|
+
##
|
73
|
+
# The lines of rendered code
|
74
|
+
# @return [Array<String>]
|
75
|
+
#
|
76
|
+
attr_reader :render_lines
|
77
|
+
|
78
|
+
##
|
79
|
+
# The rendered code as a single string, possibly with line breaks
|
80
|
+
# @return [String]
|
81
|
+
#
|
82
|
+
attr_reader :render
|
83
|
+
|
84
|
+
##
|
85
|
+
# Whether the iteration could be interpreted.
|
86
|
+
# @return [Boolean]
|
87
|
+
#
|
88
|
+
def exist?
|
89
|
+
!render_lines.nil?
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def parse_repeated_iteration proto, json
|
95
|
+
decl = DeclarationPresenter.new proto.repeated_elements, json["repeatedElements"]
|
96
|
+
prelude = decl.render_lines + ["#{decl.name}.each do |#{proto.current_name}|"]
|
97
|
+
[prelude, ["end"]]
|
98
|
+
end
|
99
|
+
|
100
|
+
def parse_map_iteration proto, json
|
101
|
+
decl = DeclarationPresenter.new proto.map, json["map"]
|
102
|
+
prelude = decl.render_lines +
|
103
|
+
["#{decl.name}.each do |#{proto.current_key_name}, #{proto.current_value_name}|"]
|
104
|
+
[prelude, ["end"]]
|
105
|
+
end
|
106
|
+
|
107
|
+
def parse_inner_lines protos, jsons
|
108
|
+
lines = []
|
109
|
+
protos.each_with_index do |statement, index|
|
110
|
+
inner_statement = StatementPresenter.new statement, jsons[index]
|
111
|
+
lines += inner_statement.render_lines
|
112
|
+
end
|
113
|
+
lines
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,67 @@
|
|
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 snippet method parameter
|
23
|
+
#
|
24
|
+
class ParameterPresenter
|
25
|
+
##
|
26
|
+
# Create an expression presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Statement::Declaration]
|
29
|
+
# The protobuf representation of the parameter
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the parameter
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@name = proto.name
|
35
|
+
@description = proto.description
|
36
|
+
@description = nil if @description&.empty?
|
37
|
+
@type = TypePresenter.new proto&.type, json&.fetch("type", nil)
|
38
|
+
@example = ExpressionPresenter.new proto&.value, json&.fetch("value", nil)
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# The name of this parameter
|
43
|
+
# @return [String]
|
44
|
+
#
|
45
|
+
attr_reader :name
|
46
|
+
|
47
|
+
##
|
48
|
+
# A description of this parameter, or nil if none.
|
49
|
+
# @return [String,nil]
|
50
|
+
#
|
51
|
+
attr_reader :description
|
52
|
+
|
53
|
+
##
|
54
|
+
# The type of this parameter, as a presenter.
|
55
|
+
# @return [Gapic::Presenters::SnippetPresenter::TypePresenter]
|
56
|
+
#
|
57
|
+
attr_reader :type
|
58
|
+
|
59
|
+
##
|
60
|
+
# The default/example value for this parameter, as a presenter.
|
61
|
+
# @return [Gapic::Presenters::SnippetPresenter::ExpressionPresenter]
|
62
|
+
#
|
63
|
+
attr_reader :example
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,202 @@
|
|
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 simple request initialization
|
23
|
+
#
|
24
|
+
class SimpleRequestInitializationPresenter
|
25
|
+
##
|
26
|
+
# Create a simple request init presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::SimpleRequestInitialization]
|
29
|
+
# The protobuf representation
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation
|
32
|
+
# @param request_type [String] The fully qualified request message class
|
33
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
34
|
+
# @param default_request_name [String] Default name of request variable
|
35
|
+
#
|
36
|
+
def initialize proto, json, request_type:, phase1:, default_request_name: "request"
|
37
|
+
@request_name = phase1 ? default_request_name : proto.request_name
|
38
|
+
@render_precall_lines =
|
39
|
+
if proto
|
40
|
+
configured_lines proto, json, request_type
|
41
|
+
else
|
42
|
+
fallback_lines request_type
|
43
|
+
end
|
44
|
+
@render_precall = @render_precall_lines.join "\n"
|
45
|
+
@render_postcall_lines = []
|
46
|
+
@render_postcall = ""
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# The lines of rendered code for before the rpc call
|
51
|
+
# @return [Array<String>]
|
52
|
+
#
|
53
|
+
attr_reader :render_precall_lines
|
54
|
+
|
55
|
+
##
|
56
|
+
# The pre-call rendered code as a single string, possibly with line breaks
|
57
|
+
# @return [String]
|
58
|
+
#
|
59
|
+
attr_reader :render_precall
|
60
|
+
|
61
|
+
##
|
62
|
+
# The lines of rendered code for after the rpc call
|
63
|
+
# @return [Array<String>]
|
64
|
+
#
|
65
|
+
attr_reader :render_postcall_lines
|
66
|
+
|
67
|
+
##
|
68
|
+
# The post-call rendered code as a single string, possibly with line breaks
|
69
|
+
# @return [String]
|
70
|
+
#
|
71
|
+
attr_reader :render_postcall
|
72
|
+
|
73
|
+
##
|
74
|
+
# The name of the request variable set
|
75
|
+
# @return [String]
|
76
|
+
#
|
77
|
+
attr_reader :request_name
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def fallback_lines request_type
|
82
|
+
[
|
83
|
+
"# Create a request. To set request fields, pass in keyword arguments.",
|
84
|
+
"#{@request_name} = #{request_type}.new"
|
85
|
+
]
|
86
|
+
end
|
87
|
+
|
88
|
+
def configured_lines proto, json, request_type
|
89
|
+
pre_lines = []
|
90
|
+
if json.key? "preRequestInitialization"
|
91
|
+
proto.pre_request_initialization&.each_with_index do |statement_proto, index|
|
92
|
+
statement = StatementPresenter.new statement_proto, json["preRequestInitialization"][index]
|
93
|
+
pre_lines += statement.render_lines
|
94
|
+
end
|
95
|
+
end
|
96
|
+
expr = ExpressionPresenter.new proto.request_value, json["requestValue"]
|
97
|
+
if expr.exist?
|
98
|
+
request_lines = expr.render_lines
|
99
|
+
request_lines[0] = "#{@request_name} = #{request_lines.first}"
|
100
|
+
else
|
101
|
+
request_lines = fallback_lines request_type
|
102
|
+
end
|
103
|
+
pre_lines + request_lines
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# Presentation information about client-streaming request initialization
|
109
|
+
#
|
110
|
+
class StreamingRequestInitializationPresenter
|
111
|
+
##
|
112
|
+
# Create a streaming request init presenter.
|
113
|
+
#
|
114
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::StreamingRequestInitialization]
|
115
|
+
# The protobuf representation
|
116
|
+
# @param json [String]
|
117
|
+
# The JSON representation
|
118
|
+
# @param request_name [String] The request variable name
|
119
|
+
# @param request_type [String] The fully qualified request message class
|
120
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
121
|
+
#
|
122
|
+
def initialize proto, json, request_name:, request_type:, phase1:
|
123
|
+
@request_name = request_name
|
124
|
+
@render_precall_lines = []
|
125
|
+
@render_precall_lines << "# Create an input stream." if phase1
|
126
|
+
@render_precall_lines << "#{request_name} = Gapic::StreamInput.new"
|
127
|
+
@render_precall = @render_precall_lines.join "\n"
|
128
|
+
|
129
|
+
@render_postcall_lines =
|
130
|
+
if proto && json
|
131
|
+
configured_lines proto, json, request_name, request_type
|
132
|
+
else
|
133
|
+
fallback_lines request_name, request_type
|
134
|
+
end
|
135
|
+
@render_postcall = @render_postcall_lines.join "\n"
|
136
|
+
end
|
137
|
+
|
138
|
+
##
|
139
|
+
# The lines of rendered code for before the rpc call
|
140
|
+
# @return [Array<String>]
|
141
|
+
#
|
142
|
+
attr_reader :render_precall_lines
|
143
|
+
|
144
|
+
##
|
145
|
+
# The pre-call rendered code as a single string, possibly with line breaks
|
146
|
+
# @return [String]
|
147
|
+
#
|
148
|
+
attr_reader :render_precall
|
149
|
+
|
150
|
+
##
|
151
|
+
# The lines of rendered code for after the rpc call
|
152
|
+
# @return [Array<String>]
|
153
|
+
#
|
154
|
+
attr_reader :render_postcall_lines
|
155
|
+
|
156
|
+
##
|
157
|
+
# The post-call rendered code as a single string, possibly with line breaks
|
158
|
+
# @return [String]
|
159
|
+
#
|
160
|
+
attr_reader :render_postcall
|
161
|
+
|
162
|
+
##
|
163
|
+
# The name of the request variable set
|
164
|
+
# @return [String]
|
165
|
+
#
|
166
|
+
attr_reader :request_name
|
167
|
+
|
168
|
+
private
|
169
|
+
|
170
|
+
def configured_lines proto, json, request_name, request_type
|
171
|
+
lines = []
|
172
|
+
if json.key? "firstStreamingRequest"
|
173
|
+
first_request = SimpleRequestInitializationPresenter.new \
|
174
|
+
proto.first_streaming_request, json["firstStreamingRequest"],
|
175
|
+
default_request_name: "stream_item", request_type: request_type, phase1: false
|
176
|
+
lines += first_request.render_precall_lines
|
177
|
+
lines << "#{request_name} << #{first_request.request_name}"
|
178
|
+
end
|
179
|
+
next_request = SimpleRequestInitializationPresenter.new \
|
180
|
+
proto.streaming_request, json["streamingRequest"],
|
181
|
+
default_request_name: "stream_item", request_type: request_type, phase1: false
|
182
|
+
iteration = IterationPresenter.new proto.iteration, json["iteration"]
|
183
|
+
lines += iteration.prelude_render_lines
|
184
|
+
lines += next_request.render_precall_lines.map { |line| " #{line}" }
|
185
|
+
lines << " #{request_name} << #{next_request.request_name}"
|
186
|
+
lines += iteration.postlude_render_lines
|
187
|
+
lines + ["#{request_name}.close"]
|
188
|
+
end
|
189
|
+
|
190
|
+
def fallback_lines request_name, request_type
|
191
|
+
[
|
192
|
+
"# Send requests on the stream. For each request object, set fields by",
|
193
|
+
"# passing keyword arguments. Be sure to close the stream when done.",
|
194
|
+
"#{request_name} << #{request_type}.new",
|
195
|
+
"#{request_name} << #{request_type}.new",
|
196
|
+
"#{request_name}.close"
|
197
|
+
]
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|