gapic-generator 0.11.0 → 0.45.2
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 +303 -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 +24 -10
- 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/{rest_pagination_info.rb → compute_pagination_info.rb} +31 -20
- data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
- data/lib/gapic/presenters/method_presenter.rb +109 -35
- data/lib/gapic/presenters/method_rest_presenter.rb +83 -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 +154 -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 +199 -274
- 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,159 @@
|
|
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 "google/protobuf/compiler/plugin_pb"
|
18
|
+
require "google/cloud/tools/snippetgen/snippetindex/v1/snippet_index_pb"
|
19
|
+
require "json"
|
20
|
+
|
21
|
+
module Gapic
|
22
|
+
# An object that collects snippets for a package and generates the metadata
|
23
|
+
# content.
|
24
|
+
class PackageSnippets
|
25
|
+
# @private
|
26
|
+
SnippetIndex = ::Google::Cloud::Tools::SnippetGen::SnippetIndex::V1
|
27
|
+
|
28
|
+
##
|
29
|
+
# Start collecting snippets for a package
|
30
|
+
#
|
31
|
+
# @param proto_package [String] Fully qualified proto package name including
|
32
|
+
# API version, e.g. `google.cloud.translate.v3`. Required.
|
33
|
+
# @param gem_name [String] Name of the gem being generated, e.g.
|
34
|
+
# `google-cloud-translate-v3`. Required.
|
35
|
+
# @param snippet_dir [String] Directory where snippets are generated.
|
36
|
+
# Optional. Defaults to `snippets`.
|
37
|
+
#
|
38
|
+
def initialize proto_package:, gem_name:, snippet_dir: "snippets"
|
39
|
+
api = SnippetIndex::Api.new(
|
40
|
+
id: proto_package,
|
41
|
+
version: proto_package.split(".").last
|
42
|
+
)
|
43
|
+
client_library_object = SnippetIndex::ClientLibrary.new(
|
44
|
+
name: gem_name,
|
45
|
+
version: "",
|
46
|
+
language: "RUBY",
|
47
|
+
apis: [api]
|
48
|
+
)
|
49
|
+
@index_object = SnippetIndex::Index.new(
|
50
|
+
client_library: client_library_object
|
51
|
+
)
|
52
|
+
@metadata_filename = "#{snippet_dir}/snippet_metadata_#{proto_package}.json"
|
53
|
+
@snippet_files = []
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Add a snippet to the collection
|
58
|
+
#
|
59
|
+
# @param method_presenter [Gapic::Presenters::MethodPresenter]
|
60
|
+
# @param snippet_presenter [Gapic::Presenters::SnippetPresenter]
|
61
|
+
# @param snippet_file [Google::Protobuf::Compiler::CodeGeneratorResponse::File]
|
62
|
+
# @return [self]
|
63
|
+
#
|
64
|
+
def add method_presenter:, snippet_presenter:, snippet_file:
|
65
|
+
service_presenter = method_presenter.service
|
66
|
+
snippet_lines = [""] + snippet_file.content.split("\n")
|
67
|
+
@index_object.snippets <<
|
68
|
+
build_snippet_object(snippet_presenter, method_presenter, service_presenter, snippet_lines)
|
69
|
+
@snippet_files << snippet_file
|
70
|
+
self
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# Return a list of files to render for this package. This includes all the
|
75
|
+
# snippet files themselves, and the metadata file.
|
76
|
+
#
|
77
|
+
# @return [Array<Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
|
78
|
+
#
|
79
|
+
def files
|
80
|
+
metadata_content = JSON.pretty_generate json_value_for @index_object
|
81
|
+
metadata_file = Google::Protobuf::Compiler::CodeGeneratorResponse::File.new(
|
82
|
+
name: @metadata_filename,
|
83
|
+
content: metadata_content
|
84
|
+
)
|
85
|
+
@snippet_files + [metadata_file]
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def build_snippet_object snippet_presenter, method_presenter, service_presenter, snippet_lines
|
91
|
+
service_presenter = service_presenter.rest if snippet_presenter.transport == :rest
|
92
|
+
SnippetIndex::Snippet.new(
|
93
|
+
region_tag: snippet_presenter.region_tag,
|
94
|
+
title: snippet_presenter.snippet_name,
|
95
|
+
description: snippet_presenter.description,
|
96
|
+
file: snippet_presenter.snippet_file_path,
|
97
|
+
language: "RUBY",
|
98
|
+
client_method: build_client_method_object(method_presenter, service_presenter),
|
99
|
+
canonical: true,
|
100
|
+
origin: "API_DEFINITION",
|
101
|
+
segments: build_segments_array(snippet_lines, snippet_presenter.region_tag)
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
def build_client_method_object method_presenter, service_presenter
|
106
|
+
parameter = SnippetIndex::ClientMethod::Parameter.new(
|
107
|
+
type: method_presenter.request_type,
|
108
|
+
name: "request"
|
109
|
+
)
|
110
|
+
client = SnippetIndex::ServiceClient.new(
|
111
|
+
short_name: service_presenter.client_suffix_for_default_transport,
|
112
|
+
full_name: service_presenter.client_name_full
|
113
|
+
)
|
114
|
+
SnippetIndex::ClientMethod.new(
|
115
|
+
short_name: method_presenter.name,
|
116
|
+
full_name: "#{service_presenter.client_name_full}##{method_presenter.name}",
|
117
|
+
async: false,
|
118
|
+
parameters: [parameter],
|
119
|
+
result_type: method_presenter.return_type,
|
120
|
+
client: client,
|
121
|
+
method: build_method_object(method_presenter, service_presenter)
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
125
|
+
def build_method_object method_presenter, service_presenter
|
126
|
+
service = SnippetIndex::Service.new(
|
127
|
+
short_name: service_presenter.name,
|
128
|
+
full_name: service_presenter.grpc_full_name
|
129
|
+
)
|
130
|
+
SnippetIndex::Method.new(
|
131
|
+
short_name: method_presenter.grpc_name,
|
132
|
+
full_name: method_presenter.grpc_full_name,
|
133
|
+
service: service
|
134
|
+
)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Currently this builds only the FULL segment. We can fill out additional
|
138
|
+
# segment types once requirements have been clarified.
|
139
|
+
def build_segments_array snippet_lines, region_tag
|
140
|
+
start_tag_line = snippet_lines.index { |line| line.include? "[START #{region_tag}]" }
|
141
|
+
end_tag_line = snippet_lines.index { |line| line.include? "[END #{region_tag}]" }
|
142
|
+
result = []
|
143
|
+
if start_tag_line && end_tag_line
|
144
|
+
result << SnippetIndex::Snippet::Segment.new(
|
145
|
+
start: start_tag_line + 1,
|
146
|
+
end: end_tag_line - 1,
|
147
|
+
type: "FULL"
|
148
|
+
)
|
149
|
+
end
|
150
|
+
result
|
151
|
+
end
|
152
|
+
|
153
|
+
def json_value_for value
|
154
|
+
json = value.class.encode_json value, preserve_proto_fieldnames: true,
|
155
|
+
emit_defaults: true
|
156
|
+
JSON.parse json
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require "active_support/inflector"
|
17
18
|
require "gapic/path_pattern/segment"
|
18
19
|
require "gapic/path_pattern/pattern"
|
19
20
|
|
@@ -39,7 +40,7 @@ module Gapic
|
|
39
40
|
segments << segment
|
40
41
|
end
|
41
42
|
|
42
|
-
Pattern.new path_pattern, segments
|
43
|
+
Pattern.new format_pattern(path_pattern), segments
|
43
44
|
end
|
44
45
|
|
45
46
|
# @private
|
@@ -117,7 +118,7 @@ module Gapic
|
|
117
118
|
match = simple_resource_id_regex.match url_pattern
|
118
119
|
segment_pattern = match[:segment_pattern]
|
119
120
|
|
120
|
-
resource_name = match[:resource_name]
|
121
|
+
resource_name = ActiveSupport::Inflector.underscore match[:resource_name]
|
121
122
|
resource_pattern = match[:resource_pattern] if match.names.include? "resource_pattern"
|
122
123
|
resource_patterns = resource_pattern.nil? ? [] : [resource_pattern]
|
123
124
|
|
@@ -141,6 +142,14 @@ module Gapic
|
|
141
142
|
remainder = match.post_match
|
142
143
|
[segment, remainder]
|
143
144
|
end
|
145
|
+
|
146
|
+
# Formats variables within a path pattern.
|
147
|
+
# @private
|
148
|
+
def self.format_pattern pattern
|
149
|
+
pattern.gsub(/\{([a-zA-Z0-9_]+)\}/) do
|
150
|
+
"{#{ActiveSupport::Inflector.underscore ::Regexp.last_match(1)}}"
|
151
|
+
end
|
152
|
+
end
|
144
153
|
end
|
145
154
|
end
|
146
155
|
end
|
@@ -38,7 +38,7 @@ module Gapic
|
|
38
38
|
end
|
39
39
|
|
40
40
|
##
|
41
|
-
# All argument
|
41
|
+
# All argument from this pattern, including ids for positional arguments
|
42
42
|
# @return [Array<String>]
|
43
43
|
def arguments
|
44
44
|
@segments.select(&:provides_arguments?).map(&:arguments).flatten
|
@@ -58,6 +58,13 @@ module Gapic
|
|
58
58
|
@segments.length == 1 && @segments[0].pattern == "**"
|
59
59
|
end
|
60
60
|
|
61
|
+
##
|
62
|
+
# Whether this pattern ends with a double-star ("**")
|
63
|
+
# @return [Boolean]
|
64
|
+
def ends_with_double_star_pattern?
|
65
|
+
segments.last.pattern.end_with? "**"
|
66
|
+
end
|
67
|
+
|
61
68
|
##
|
62
69
|
# Converts the PathPattern into a regex string
|
63
70
|
# @return [String]
|
@@ -81,6 +88,16 @@ module Gapic
|
|
81
88
|
regex_str
|
82
89
|
end
|
83
90
|
|
91
|
+
##
|
92
|
+
# Converts the PathPattern into a regex string that matches a whole field
|
93
|
+
# - adds markers for the beginning and end of the string
|
94
|
+
# - adds handling of an optional tail `/` if needed
|
95
|
+
# @return [String]
|
96
|
+
def to_field_regex_str
|
97
|
+
tail_slash_accept = ends_with_double_star_pattern? ? "" : "/?"
|
98
|
+
"^#{to_regex_str}#{tail_slash_accept}$"
|
99
|
+
end
|
100
|
+
|
84
101
|
##
|
85
102
|
# Whether pattern contains a positional segment
|
86
103
|
# @return [Boolean]
|
@@ -127,7 +127,7 @@ module Gapic
|
|
127
127
|
def == other
|
128
128
|
return false unless other.is_a? self.class
|
129
129
|
|
130
|
-
|
130
|
+
pattern == other.pattern && position == other.position
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
@@ -210,7 +210,13 @@ module Gapic
|
|
210
210
|
# Path string for this segment
|
211
211
|
# @return [String]
|
212
212
|
def path_string
|
213
|
-
type == :simple_resource_id
|
213
|
+
if type == :simple_resource_id
|
214
|
+
name = resource_names[0]
|
215
|
+
name = "binding.local_variable_get :#{name}" if Gapic::RubyInfo.keywords.include? name
|
216
|
+
"\#{#{name}}"
|
217
|
+
else
|
218
|
+
pattern.gsub "{", "\#{"
|
219
|
+
end
|
214
220
|
end
|
215
221
|
|
216
222
|
##
|
@@ -272,9 +278,10 @@ module Gapic
|
|
272
278
|
def == other
|
273
279
|
return false unless other.is_a? self.class
|
274
280
|
|
275
|
-
|
281
|
+
type == other.type &&
|
282
|
+
pattern == other.pattern &&
|
276
283
|
resource_names == other.resource_names &&
|
277
|
-
resource_patterns == other.resource_patterns
|
284
|
+
resource_patterns == other.resource_patterns
|
278
285
|
end
|
279
286
|
end
|
280
287
|
|
@@ -20,8 +20,15 @@ module Gapic
|
|
20
20
|
# A presenter for proto enums.
|
21
21
|
#
|
22
22
|
class EnumPresenter
|
23
|
+
# @return [String] String representation of this presenter type.
|
24
|
+
attr_reader :type
|
25
|
+
|
26
|
+
##
|
27
|
+
# @param enum [Gapic::Schema::Enum]
|
28
|
+
#
|
23
29
|
def initialize enum
|
24
30
|
@enum = enum
|
31
|
+
@type = "enum"
|
25
32
|
end
|
26
33
|
|
27
34
|
def name
|
@@ -35,6 +42,13 @@ module Gapic
|
|
35
42
|
def values
|
36
43
|
@values ||= @enum.values.map { |v| EnumValuePresenter.new v }
|
37
44
|
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# @return [Boolean] Whether the enum is marked as deprecated.
|
48
|
+
#
|
49
|
+
def is_deprecated?
|
50
|
+
@enum.is_deprecated?
|
51
|
+
end
|
38
52
|
end
|
39
53
|
end
|
40
54
|
end
|
@@ -14,6 +14,8 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require "gapic/ruby_info"
|
18
|
+
|
17
19
|
module Gapic
|
18
20
|
module Presenters
|
19
21
|
##
|
@@ -24,8 +26,9 @@ module Gapic
|
|
24
26
|
@value = value
|
25
27
|
end
|
26
28
|
|
29
|
+
# @return [String] The enum value name without keyword collision.
|
27
30
|
def name
|
28
|
-
@value.name
|
31
|
+
Gapic::RubyInfo.keywords.include?(@value.name) ? "#{@value.parent.name}::#{@value.name}" : @value.name
|
29
32
|
end
|
30
33
|
|
31
34
|
def doc_description
|
@@ -25,16 +25,33 @@ module Gapic
|
|
25
25
|
class FieldPresenter
|
26
26
|
include Gapic::Helpers::NamespaceHelper
|
27
27
|
|
28
|
+
# @return [String] String representation of this presenter type.
|
29
|
+
attr_reader :type
|
30
|
+
|
31
|
+
##
|
32
|
+
# @param api [Gapic::Schema::Api]
|
33
|
+
# @param message [Gapic::Schema::Message]
|
34
|
+
# @param field [Gapic::Schema::Field]
|
35
|
+
#
|
28
36
|
def initialize api, message, field
|
29
37
|
@api = api
|
30
38
|
@message = message
|
31
39
|
@field = field
|
40
|
+
@type = "field"
|
32
41
|
end
|
33
42
|
|
34
43
|
def name
|
35
44
|
@field.name
|
36
45
|
end
|
37
46
|
|
47
|
+
##
|
48
|
+
# @return [String] The field name to be used as a value without reserved keywords.
|
49
|
+
#
|
50
|
+
def value_name
|
51
|
+
name = @field.name
|
52
|
+
Gapic::RubyInfo.keywords.include?(name) ? "#{name}_param" : name
|
53
|
+
end
|
54
|
+
|
38
55
|
def doc_types
|
39
56
|
field_doc_types @field, false
|
40
57
|
end
|
@@ -48,8 +65,15 @@ module Gapic
|
|
48
65
|
field_doc_types @field, true
|
49
66
|
end
|
50
67
|
|
51
|
-
|
52
|
-
|
68
|
+
##
|
69
|
+
# The description as it should appear in YARD docs.
|
70
|
+
#
|
71
|
+
# @param transport [:grpc,:rest] Whether xref links should go to REST or
|
72
|
+
# gRPC client classes. Uses the default transport if not provided.
|
73
|
+
# @return [String]
|
74
|
+
#
|
75
|
+
def doc_description transport: nil
|
76
|
+
@field.docs_leading_comments transport: transport
|
53
77
|
end
|
54
78
|
|
55
79
|
def default_value
|
@@ -59,7 +83,7 @@ module Gapic
|
|
59
83
|
end
|
60
84
|
|
61
85
|
def as_kwarg value: nil
|
62
|
-
"#{name}: #{value ||
|
86
|
+
"#{name}: #{value || value_name}"
|
63
87
|
end
|
64
88
|
|
65
89
|
# TODO: remove, only used in tests
|
@@ -126,14 +150,60 @@ module Gapic
|
|
126
150
|
end
|
127
151
|
|
128
152
|
##
|
129
|
-
# Name of this field, camel-cased
|
153
|
+
# Name of this field, camel-cased.
|
130
154
|
# @return [String]
|
155
|
+
#
|
131
156
|
def camel_name
|
132
157
|
camel_name_for name
|
133
158
|
end
|
134
159
|
|
160
|
+
##
|
161
|
+
# @return [Boolean] Whether the field is marked as deprecated.
|
162
|
+
#
|
163
|
+
def is_deprecated?
|
164
|
+
@field.is_deprecated?
|
165
|
+
end
|
166
|
+
|
135
167
|
protected
|
136
168
|
|
169
|
+
# @private
|
170
|
+
FIELD_TYPE_MAPPING = {
|
171
|
+
TYPE_DOUBLE: "::Float",
|
172
|
+
TYPE_FLOAT: "::Float",
|
173
|
+
TYPE_INT64: "::Integer",
|
174
|
+
TYPE_UINT64: "::Integer",
|
175
|
+
TYPE_INT32: "::Integer",
|
176
|
+
TYPE_FIXED64: "::Integer",
|
177
|
+
TYPE_FIXED32: "::Integer",
|
178
|
+
TYPE_BOOL: "::Boolean",
|
179
|
+
TYPE_STRING: "::String",
|
180
|
+
TYPE_BYTES: "::String",
|
181
|
+
TYPE_UINT32: "::Integer",
|
182
|
+
TYPE_SFIXED32: "::Integer",
|
183
|
+
TYPE_SFIXED64: "::Integer",
|
184
|
+
TYPE_SINT32: "::Integer",
|
185
|
+
TYPE_SINT64: "::Integer"
|
186
|
+
}.freeze
|
187
|
+
|
188
|
+
# @private
|
189
|
+
FIELD_VALUE_MAPPING = {
|
190
|
+
TYPE_DOUBLE: "3.5",
|
191
|
+
TYPE_FLOAT: "3.5",
|
192
|
+
TYPE_INT64: "42",
|
193
|
+
TYPE_UINT64: "42",
|
194
|
+
TYPE_INT32: "42",
|
195
|
+
TYPE_FIXED64: "42",
|
196
|
+
TYPE_FIXED32: "42",
|
197
|
+
TYPE_BOOL: "true",
|
198
|
+
TYPE_STRING: "\"hello world\"",
|
199
|
+
TYPE_BYTES: "\"hello world\"",
|
200
|
+
TYPE_UINT32: "42",
|
201
|
+
TYPE_SFIXED32: "42",
|
202
|
+
TYPE_SFIXED64: "42",
|
203
|
+
TYPE_SINT32: "42",
|
204
|
+
TYPE_SINT64: "42"
|
205
|
+
}.freeze
|
206
|
+
|
137
207
|
def field_doc_types field, output
|
138
208
|
return field_map_type field.message, output if field.map?
|
139
209
|
base_type =
|
@@ -144,14 +214,7 @@ module Gapic
|
|
144
214
|
# TODO: handle when arg message is nil and enum is the type
|
145
215
|
message_ruby_type field.enum
|
146
216
|
else
|
147
|
-
|
148
|
-
when 1, 2 then "::Float"
|
149
|
-
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "::Integer"
|
150
|
-
when 9, 12 then "::String"
|
151
|
-
when 8 then "::Boolean"
|
152
|
-
else
|
153
|
-
"::Object"
|
154
|
-
end
|
217
|
+
FIELD_TYPE_MAPPING[field.type] || "::Object"
|
155
218
|
end
|
156
219
|
field.repeated? ? "::Array<#{base_type}>" : base_type
|
157
220
|
end
|
@@ -179,14 +242,8 @@ module Gapic
|
|
179
242
|
# TODO: select the first non-0 enum value
|
180
243
|
":#{@field.enum.values.first.name}"
|
181
244
|
else
|
182
|
-
|
183
|
-
|
184
|
-
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "42"
|
185
|
-
when 9, 12 then "\"hello world\""
|
186
|
-
when 8 then "true"
|
187
|
-
else
|
188
|
-
"::Object"
|
189
|
-
end
|
245
|
+
# BUG: This should default to a better value
|
246
|
+
FIELD_VALUE_MAPPING[@field.type] || "::Object"
|
190
247
|
end
|
191
248
|
end
|
192
249
|
|
@@ -201,7 +258,7 @@ module Gapic
|
|
201
258
|
def camel_name_for attr_name
|
202
259
|
parts = attr_name.split "_"
|
203
260
|
first_part = parts[0]
|
204
|
-
other_parts = parts[1
|
261
|
+
other_parts = parts[1..]
|
205
262
|
other_parts_pascal = other_parts.map(&:capitalize).join
|
206
263
|
"#{first_part}#{other_parts_pascal}"
|
207
264
|
end
|