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
@@ -0,0 +1,135 @@
|
|
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 expression
|
23
|
+
#
|
24
|
+
class ExpressionPresenter
|
25
|
+
##
|
26
|
+
# Create an expression presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Expression]
|
29
|
+
# The protobuf representation of the expression
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the expression
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@render_lines =
|
35
|
+
if json&.key? "stringValue"
|
36
|
+
render_string proto
|
37
|
+
elsif json&.key? "numberValue"
|
38
|
+
render_number proto
|
39
|
+
elsif json&.key? "booleanValue"
|
40
|
+
render_boolean proto
|
41
|
+
elsif json&.key? "nullValue"
|
42
|
+
["nil"]
|
43
|
+
elsif json&.key? "nameValue"
|
44
|
+
render_name proto.name_value
|
45
|
+
elsif json&.key? "complexValue"
|
46
|
+
render_complex proto.complex_value.properties, json["complexValue"]["properties"]
|
47
|
+
elsif json&.key? "listValue"
|
48
|
+
render_list proto.list_value.values, json["listValue"]["values"]
|
49
|
+
elsif json&.key? "mapValue"
|
50
|
+
render_map proto.map_value, json["mapValue"]
|
51
|
+
end
|
52
|
+
@render = @render_lines&.join " "
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# The lines of rendered code
|
57
|
+
# @return [Array<String>]
|
58
|
+
#
|
59
|
+
attr_reader :render_lines
|
60
|
+
|
61
|
+
##
|
62
|
+
# The rendered code as a single string, possibly with line breaks
|
63
|
+
# @return [String]
|
64
|
+
#
|
65
|
+
attr_reader :render
|
66
|
+
|
67
|
+
##
|
68
|
+
# Whether the expression could be interpreted.
|
69
|
+
# @return [Boolean]
|
70
|
+
#
|
71
|
+
def exist?
|
72
|
+
!render_lines.nil?
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def render_string proto
|
78
|
+
[proto.string_value.inspect]
|
79
|
+
end
|
80
|
+
|
81
|
+
def render_number proto
|
82
|
+
value = proto.number_value
|
83
|
+
value = value.to_i if value == value.to_i
|
84
|
+
[value.inspect]
|
85
|
+
end
|
86
|
+
|
87
|
+
def render_boolean proto
|
88
|
+
[proto.boolean_value.inspect]
|
89
|
+
end
|
90
|
+
|
91
|
+
def render_name proto
|
92
|
+
line = ([proto.name] + Array(proto.path&.to_a)).join "."
|
93
|
+
[line]
|
94
|
+
end
|
95
|
+
|
96
|
+
def render_complex proto, json
|
97
|
+
lines = ["{"]
|
98
|
+
proto.each do |key, value_expr|
|
99
|
+
value_presenter = ExpressionPresenter.new value_expr, json[key]
|
100
|
+
value_lines = value_presenter.render_lines
|
101
|
+
next unless value_lines
|
102
|
+
lines[lines.size - 1] = "#{lines.last}," if lines.size > 1
|
103
|
+
value_lines[0] = "#{key}: #{value_lines.first}"
|
104
|
+
lines += value_lines.map { |line| " #{line}" }
|
105
|
+
end
|
106
|
+
lines + ["}"]
|
107
|
+
end
|
108
|
+
|
109
|
+
def render_list proto, json
|
110
|
+
lines = ["["]
|
111
|
+
proto.each_with_index do |item, index|
|
112
|
+
expr = ExpressionPresenter.new item, json[index]
|
113
|
+
value_lines = expr.render_lines
|
114
|
+
lines[lines.size - 1] = "#{lines.last}," if lines.size > 1
|
115
|
+
lines += value_lines.map { |line| " #{line}" }
|
116
|
+
end
|
117
|
+
lines + ["]"]
|
118
|
+
end
|
119
|
+
|
120
|
+
def render_map proto, json
|
121
|
+
lines = ["{"]
|
122
|
+
proto.keys.zip(proto.values).each_with_index do |(key, value), index|
|
123
|
+
key_lines = ExpressionPresenter.new(key, json["keys"][index]).render_lines
|
124
|
+
value_lines = ExpressionPresenter.new(value, json["values"][index]).render_lines
|
125
|
+
next unless key_lines && value_lines
|
126
|
+
elem_lines = key_lines[0..-2] + ["#{key_lines.last} => #{value_lines.first}"] + value_lines[1..]
|
127
|
+
lines[lines.size - 1] = "#{lines.last}," if lines.size > 1
|
128
|
+
lines += elem_lines.map { |line| " #{line}" }
|
129
|
+
end
|
130
|
+
lines + ["}"]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -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
|