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
@@ -15,6 +15,17 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "active_support/inflector"
|
18
|
+
require "google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb"
|
19
|
+
require "gapic/presenters/snippet/client_call_presenter"
|
20
|
+
require "gapic/presenters/snippet/client_initialization_presenter"
|
21
|
+
require "gapic/presenters/snippet/declaration_presenter"
|
22
|
+
require "gapic/presenters/snippet/expression_presenter"
|
23
|
+
require "gapic/presenters/snippet/iteration_presenter"
|
24
|
+
require "gapic/presenters/snippet/parameter_presenter"
|
25
|
+
require "gapic/presenters/snippet/request_initialization_presenters"
|
26
|
+
require "gapic/presenters/snippet/response_handling_presenters"
|
27
|
+
require "gapic/presenters/snippet/statement_presenter"
|
28
|
+
require "gapic/presenters/snippet/type_presenter"
|
18
29
|
|
19
30
|
module Gapic
|
20
31
|
module Presenters
|
@@ -22,17 +33,27 @@ module Gapic
|
|
22
33
|
# A presenter for snippets.
|
23
34
|
#
|
24
35
|
class SnippetPresenter
|
25
|
-
def initialize method_presenter, api
|
36
|
+
def initialize method_presenter, api, config: nil, transport: nil
|
26
37
|
@method_presenter = method_presenter
|
27
38
|
@api = api
|
39
|
+
@config = config
|
40
|
+
@transport = transport || @api.default_transport
|
41
|
+
analyze_config
|
42
|
+
end
|
43
|
+
|
44
|
+
attr_reader :config
|
45
|
+
attr_reader :transport
|
46
|
+
|
47
|
+
def config?
|
48
|
+
!config.nil?
|
28
49
|
end
|
29
50
|
|
30
51
|
def client_streaming?
|
31
52
|
@method_presenter.client_streaming?
|
32
53
|
end
|
33
54
|
|
34
|
-
def
|
35
|
-
@method_presenter.
|
55
|
+
def server_streaming?
|
56
|
+
@method_presenter.server_streaming?
|
36
57
|
end
|
37
58
|
|
38
59
|
def response_kind
|
@@ -48,7 +69,7 @@ module Gapic
|
|
48
69
|
end
|
49
70
|
|
50
71
|
def snippet_file_path
|
51
|
-
"#{@method_presenter.service.service_require.split('/').last}/#{
|
72
|
+
"#{@method_presenter.service.service_require.split('/').last}/#{snippet_method_name}.rb"
|
52
73
|
end
|
53
74
|
|
54
75
|
def require_path
|
@@ -56,7 +77,13 @@ module Gapic
|
|
56
77
|
end
|
57
78
|
|
58
79
|
def client_type
|
59
|
-
@method_presenter.service
|
80
|
+
service = @method_presenter.service
|
81
|
+
service = service.rest if transport == :rest
|
82
|
+
service.client_name_full.sub(/^::/, "")
|
83
|
+
end
|
84
|
+
|
85
|
+
def service_name_short
|
86
|
+
@method_presenter.service.module_name
|
60
87
|
end
|
61
88
|
|
62
89
|
def request_type
|
@@ -82,21 +109,184 @@ module Gapic
|
|
82
109
|
@method_presenter.name
|
83
110
|
end
|
84
111
|
|
112
|
+
def snippet_method_name
|
113
|
+
config? ? "#{method_name}_#{snake_config_id}" : method_name
|
114
|
+
end
|
115
|
+
|
116
|
+
def snippet_name
|
117
|
+
@config&.metadata&.snippet_name ||
|
118
|
+
"Snippet for the #{method_name} call in the #{service_name_short} service"
|
119
|
+
end
|
120
|
+
|
121
|
+
def description
|
122
|
+
@config&.metadata&.snippet_description ||
|
123
|
+
"This is an auto-generated example demonstrating basic usage of #{client_type}##{method_name}."
|
124
|
+
end
|
125
|
+
|
126
|
+
def disclaimer
|
127
|
+
"This snippet has been automatically generated and should be regarded as a code template only. " \
|
128
|
+
"It will require modifications to work:\n" \
|
129
|
+
"- It may require correct/in-range values for request initialization.\n" \
|
130
|
+
"- It may require specifying regional endpoints when creating the service client as shown in https://cloud.google.com/ruby/docs/reference."
|
131
|
+
end
|
132
|
+
|
133
|
+
def snippet_method_parameters
|
134
|
+
@snippet_method_parameters ||= begin
|
135
|
+
parameters_proto = @config&.signature&.parameters
|
136
|
+
if parameters_proto
|
137
|
+
parameters_json = @config.json_representation["signature"]["parameters"]
|
138
|
+
parameters_proto.each_with_index.map do |param_proto, index|
|
139
|
+
ParameterPresenter.new param_proto, parameters_json[index]
|
140
|
+
end
|
141
|
+
else
|
142
|
+
[]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def snippet_method_parameters_render
|
148
|
+
return "" if snippet_method_parameters.empty?
|
149
|
+
names = snippet_method_parameters.map { |param| "#{param.name}:" }.join ", "
|
150
|
+
"(#{names})"
|
151
|
+
end
|
152
|
+
|
153
|
+
attr_reader :client_initialization
|
154
|
+
attr_reader :request_initialization
|
155
|
+
attr_reader :client_call
|
156
|
+
attr_reader :response_handling
|
157
|
+
attr_reader :final_statements
|
158
|
+
|
85
159
|
def region_tag
|
86
160
|
gem_presenter = @method_presenter.service.gem
|
87
|
-
|
161
|
+
prefix = gem_presenter.doc_tag_prefix
|
88
162
|
names = gem_presenter.name.split "-"
|
89
163
|
final_name = names.pop
|
90
164
|
if final_name =~ /^v\d/
|
91
165
|
api_version = final_name
|
92
|
-
|
166
|
+
prefix ||= names.last
|
93
167
|
else
|
94
|
-
|
168
|
+
prefix ||= final_name
|
95
169
|
api_version = "v0"
|
96
170
|
end
|
171
|
+
prefix = prefix.downcase.gsub(/[^a-z0-9]/, "")
|
97
172
|
service_name = @method_presenter.service.module_name
|
98
173
|
method_name = @method_presenter.method.name
|
99
|
-
"
|
174
|
+
type = config? ? "config" : "generated"
|
175
|
+
config_id = config? ? "#{@config.metadata.config_id}_" : ""
|
176
|
+
"#{prefix}_#{api_version}_#{type}_#{service_name}_#{method_name}_#{config_id}sync"
|
177
|
+
end
|
178
|
+
|
179
|
+
private
|
180
|
+
|
181
|
+
def analyze_config
|
182
|
+
snippet_proto, snippet_json = snippet_proto_info
|
183
|
+
call_proto, call_json = call_proto_info snippet_proto, snippet_json
|
184
|
+
@client_initialization = build_client_initialization_presenter snippet_proto, snippet_json
|
185
|
+
@request_initialization = build_request_initialization_presenter call_proto, call_json
|
186
|
+
@response_handling = build_response_handling_presenter call_proto, call_json
|
187
|
+
@client_call = build_client_call_presenter call_proto, call_json,
|
188
|
+
@request_initialization.request_name,
|
189
|
+
@response_handling.response_name
|
190
|
+
@final_statements = build_final_statements snippet_proto, snippet_json
|
191
|
+
end
|
192
|
+
|
193
|
+
def snippet_proto_info
|
194
|
+
[@config&.snippet, @config&.json_representation&.fetch("snippet", nil)]
|
195
|
+
end
|
196
|
+
|
197
|
+
def call_proto_info snippet_proto, snippet_json
|
198
|
+
if snippet_proto&.standard
|
199
|
+
[snippet_proto.standard, snippet_json["standard"]]
|
200
|
+
elsif snippet_proto&.paginated
|
201
|
+
[snippet_proto.paginated, snippet_json["paginated"]]
|
202
|
+
elsif snippet_proto&.lro
|
203
|
+
[snippet_proto.lro, snippet_json["lro"]]
|
204
|
+
elsif snippet_proto&.server_streaming
|
205
|
+
[snippet_proto.server_streaming, snippet_json["serverStreaming"]]
|
206
|
+
elsif snippet_proto&.client_streaming
|
207
|
+
[snippet_proto.client_streaming, snippet_json["clientStreaming"]]
|
208
|
+
elsif snippet_proto&.bidi_streaming
|
209
|
+
[snippet_proto.bidi_streaming, snippet_json["bidiStreaming"]]
|
210
|
+
else
|
211
|
+
[nil, nil]
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def build_client_initialization_presenter snippet_proto, snippet_json
|
216
|
+
ClientInitializationPresenter.new snippet_proto&.service_client_initialization,
|
217
|
+
snippet_json&.fetch("serviceClientInitialization", nil),
|
218
|
+
phase1: !config?, client_type: client_type
|
219
|
+
end
|
220
|
+
|
221
|
+
def build_request_initialization_presenter call_proto, call_json
|
222
|
+
phase1 = !config?
|
223
|
+
request_init_proto = call_proto&.request_initialization
|
224
|
+
request_init_json = call_json&.fetch "requestInitialization", nil
|
225
|
+
if client_streaming?
|
226
|
+
request_name = phase1 ? "input" : call_proto.client_stream_name
|
227
|
+
StreamingRequestInitializationPresenter.new request_init_proto, request_init_json,
|
228
|
+
request_name: request_name, request_type: request_type,
|
229
|
+
phase1: phase1
|
230
|
+
else
|
231
|
+
SimpleRequestInitializationPresenter.new request_init_proto, request_init_json,
|
232
|
+
request_type: request_type, phase1: phase1
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def build_response_handling_presenter call_proto, call_json
|
237
|
+
phase1 = !config?
|
238
|
+
case response_kind
|
239
|
+
when :paged
|
240
|
+
PaginatedResponseHandlingPresenter.new call_proto&.paginated_handling,
|
241
|
+
call_json&.fetch("paginatedHandling", nil),
|
242
|
+
paged_response_type: paged_response_type, phase1: phase1
|
243
|
+
when :lro
|
244
|
+
LroResponseHandlingPresenter.new call_proto&.lro_handling,
|
245
|
+
call_json&.fetch("lroHandling", nil),
|
246
|
+
phase1: phase1
|
247
|
+
when :streaming
|
248
|
+
response_name = phase1 ? "output" : call_proto&.server_stream_name
|
249
|
+
response_name = nil if response_name == ""
|
250
|
+
StreamingResponseHandlingPresenter.new call_proto&.response_handling,
|
251
|
+
call_json&.fetch("responseHandling", nil),
|
252
|
+
response_name: response_name, base_response_type: base_response_type,
|
253
|
+
phase1: phase1
|
254
|
+
else
|
255
|
+
SimpleResponseHandlingPresenter.new call_proto&.response_handling,
|
256
|
+
call_json&.fetch("responseHandling", nil),
|
257
|
+
response_type: return_type, phase1: phase1
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def build_client_call_presenter call_proto, call_json, request_name, response_name
|
262
|
+
phase1 = !config?
|
263
|
+
if response_kind == :paged
|
264
|
+
ClientCallPresenter.new call_proto&.paginated_call, call_json&.fetch("paginatedCall", nil),
|
265
|
+
method_name: method_name, request_name: request_name, response_name: response_name,
|
266
|
+
client_streaming: client_streaming?, server_streaming: server_streaming?,
|
267
|
+
phase1: phase1
|
268
|
+
elsif client_streaming? || server_streaming?
|
269
|
+
ClientCallPresenter.new call_proto&.initialization_call, call_json&.fetch("initializationCall", nil),
|
270
|
+
method_name: method_name, request_name: request_name, response_name: response_name,
|
271
|
+
client_streaming: client_streaming?, server_streaming: server_streaming?,
|
272
|
+
phase1: phase1
|
273
|
+
else
|
274
|
+
ClientCallPresenter.new call_proto&.call, call_json&.fetch("call", nil),
|
275
|
+
method_name: method_name, request_name: request_name, response_name: response_name,
|
276
|
+
client_streaming: false, server_streaming: false, phase1: phase1
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def build_final_statements snippet_proto, snippet_json
|
281
|
+
return [] unless snippet_proto&.final_statements
|
282
|
+
snippet_proto.final_statements.each_with_index.map do |statement_proto, index|
|
283
|
+
statement_json = snippet_json["finalStatements"][index]
|
284
|
+
StatementPresenter.new statement_proto, statement_json
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
def snake_config_id
|
289
|
+
ActiveSupport::Inflector.underscore @config.metadata.config_id
|
100
290
|
end
|
101
291
|
end
|
102
292
|
end
|
data/lib/gapic/presenters.rb
CHANGED
@@ -14,19 +14,23 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require "gapic/model"
|
17
18
|
require "gapic/presenters/enum_presenter"
|
18
19
|
require "gapic/presenters/enum_value_presenter"
|
19
20
|
require "gapic/presenters/field_presenter"
|
20
21
|
require "gapic/presenters/file_presenter"
|
21
22
|
require "gapic/presenters/gem_presenter"
|
22
23
|
require "gapic/presenters/message_presenter"
|
24
|
+
require "gapic/presenters/method/http_binding_presenter"
|
23
25
|
require "gapic/presenters/method_presenter"
|
24
26
|
require "gapic/presenters/method_rest_presenter"
|
25
27
|
require "gapic/presenters/package_presenter"
|
26
28
|
require "gapic/presenters/resource_presenter"
|
27
29
|
require "gapic/presenters/sample_presenter"
|
30
|
+
require "gapic/presenters/service/lro_client_presenter"
|
31
|
+
require "gapic/presenters/service/mixin_client_presenter"
|
28
32
|
require "gapic/presenters/service_presenter"
|
29
|
-
require "gapic/presenters/
|
33
|
+
require "gapic/presenters/grpc_service_config_presenter"
|
30
34
|
require "gapic/presenters/service_rest_presenter"
|
31
35
|
require "gapic/presenters/snippet_presenter"
|
32
36
|
|
data/lib/gapic/runner.rb
CHANGED
data/lib/gapic/schema/api.rb
CHANGED
@@ -20,6 +20,8 @@ require "gapic/generators/default_generator_parameters"
|
|
20
20
|
require "gapic/schema/loader"
|
21
21
|
require "gapic/schema/request_param_parser"
|
22
22
|
require "gapic/grpc_service_config/parser"
|
23
|
+
require "gapic/schema/service_config_parser"
|
24
|
+
require "gapic/model/api_metadata"
|
23
25
|
|
24
26
|
module Gapic
|
25
27
|
module Schema
|
@@ -41,6 +43,7 @@ module Gapic
|
|
41
43
|
class Api
|
42
44
|
attr_accessor :request
|
43
45
|
attr_accessor :files
|
46
|
+
attr_reader :snippet_configs
|
44
47
|
|
45
48
|
# Initializes an API object with the file descriptors that represent the
|
46
49
|
# API.
|
@@ -60,9 +63,11 @@ module Gapic
|
|
60
63
|
@files.each { |f| f.parent = self }
|
61
64
|
@configuration = configuration
|
62
65
|
@resource_types = analyze_resources
|
66
|
+
@nonstandard_lro_services = analyze_nonstandard_lros
|
63
67
|
|
64
68
|
parameter_schema ||= Gapic::Generators::DefaultGeneratorParameters.default_schema
|
65
69
|
@protoc_parameters = parse_parameter request.parameter, parameter_schema, error_output
|
70
|
+
@snippet_configs = loader.load_snippet_configs self.configuration[:snippet_configs_path]
|
66
71
|
sanity_checks error_output
|
67
72
|
end
|
68
73
|
|
@@ -90,7 +95,7 @@ module Gapic
|
|
90
95
|
end
|
91
96
|
|
92
97
|
def overrides_of key
|
93
|
-
configuration&.
|
98
|
+
configuration&.dig(:overrides, key) || {}
|
94
99
|
end
|
95
100
|
|
96
101
|
def fix_file_path str
|
@@ -114,14 +119,17 @@ module Gapic
|
|
114
119
|
configuration[:overrides][:service].fetch str, str
|
115
120
|
end
|
116
121
|
|
122
|
+
# @return [Enumerable<Gapic::Schema::File>]
|
117
123
|
def generate_files
|
118
124
|
@files.select(&:generate?)
|
119
125
|
end
|
120
126
|
|
127
|
+
# @return [Enumerable<Gapic::Schema::Service>]
|
121
128
|
def services
|
122
129
|
@files.map(&:services).flatten
|
123
130
|
end
|
124
131
|
|
132
|
+
# @return [Enumerable<Gapic::Schema::Message>]
|
125
133
|
def messages
|
126
134
|
@files.map(&:messages).flatten
|
127
135
|
end
|
@@ -201,6 +209,22 @@ module Gapic
|
|
201
209
|
end
|
202
210
|
end
|
203
211
|
|
212
|
+
# Return all snippet configs for the given method address. Returns the
|
213
|
+
# empty array if there are no snippet configs.
|
214
|
+
# @param address [String] Method address in the form
|
215
|
+
# `proto.package.v1.ServiceName.MethodName`
|
216
|
+
# @return [Array<
|
217
|
+
# Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig>]
|
218
|
+
def snippet_configs_for address
|
219
|
+
address = address.join "." if address.is_a? ::Array
|
220
|
+
@snippet_configs.find_all do |config|
|
221
|
+
rpc = config.rpc
|
222
|
+
rpc.api_version.any? do |vers|
|
223
|
+
address == "#{rpc.proto_package}.#{vers}.#{rpc.service_name}.#{rpc.rpc_name}"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
204
228
|
# Structured Hash representation of the configuration file.
|
205
229
|
# @return [Hash]
|
206
230
|
# A Hash of the configuration values.
|
@@ -245,14 +269,24 @@ module Gapic
|
|
245
269
|
configuration[:transports].include? "grpc"
|
246
270
|
end
|
247
271
|
|
272
|
+
##
|
273
|
+
# The default transport, used when choosing which client class a docs
|
274
|
+
# xref should link to.
|
275
|
+
#
|
276
|
+
# @return [:grpc,:rest]
|
277
|
+
#
|
278
|
+
def default_transport
|
279
|
+
generate_grpc_clients? ? :grpc : :rest
|
280
|
+
end
|
281
|
+
|
248
282
|
# Whether to generate standalone snippets
|
249
283
|
def generate_standalone_snippets?
|
250
|
-
configuration
|
284
|
+
configuration.fetch :generate_standalone_snippets, true
|
251
285
|
end
|
252
286
|
|
253
287
|
# Whether to generate inline documentation snippets
|
254
288
|
def generate_yardoc_snippets?
|
255
|
-
configuration
|
289
|
+
configuration.fetch :generate_yardoc_snippets, true
|
256
290
|
end
|
257
291
|
|
258
292
|
# Whether to generate gapic metadata (drift manifest) file
|
@@ -293,6 +327,36 @@ module Gapic
|
|
293
327
|
@grpc_service_config ||= Gapic::GrpcServiceConfig::Parser.parse grpc_service_config_raw
|
294
328
|
end
|
295
329
|
|
330
|
+
# Raw text of the service.yaml if given as a parameter
|
331
|
+
# or nil if no parameter given
|
332
|
+
# @return [String]
|
333
|
+
def service_config_raw
|
334
|
+
@service_config_raw ||= begin
|
335
|
+
filename = protoc_options[:service_yaml]
|
336
|
+
::File.read filename if filename
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
# Parsed service config
|
341
|
+
# @return [Google::Api::Service]
|
342
|
+
def service_config
|
343
|
+
@service_config ||= Gapic::Schema::ServiceConfigParser.parse_service_yaml service_config_raw
|
344
|
+
end
|
345
|
+
|
346
|
+
# Parsed API Metadata model
|
347
|
+
# @return [Gapic::Model::ApiMetadata]
|
348
|
+
def api_metadata
|
349
|
+
@api_metadata ||= begin
|
350
|
+
api_metadata = Gapic::Model::ApiMetadata.new
|
351
|
+
Gapic::Schema::ServiceConfigParser.parse_api_metadata service_config_raw, api_metadata
|
352
|
+
api_metadata.standardize_names!
|
353
|
+
api_metadata.standardize_title! gem_name: configuration.fetch(:gem, nil)&.fetch(:name, "")
|
354
|
+
api_metadata.standardize_descriptions!
|
355
|
+
api_metadata.standardize_auto_populated_fields! @service_config
|
356
|
+
api_metadata
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
296
360
|
# Get a resource given its type string
|
297
361
|
def lookup_resource_type resource_type
|
298
362
|
@resource_types[resource_type]
|
@@ -318,6 +382,21 @@ module Gapic
|
|
318
382
|
services.find { |s| s.address == addr }
|
319
383
|
end
|
320
384
|
|
385
|
+
##
|
386
|
+
# Returns a model for the nonstandard LRO for a given service
|
387
|
+
# The `analyze_nonstandard_lros` method fills in the model cache
|
388
|
+
#
|
389
|
+
# @param service_full_name [String]
|
390
|
+
#
|
391
|
+
# @return [Gapic::Model::Service::NonstandardLroProvider, Gapic::Model::Service::NoNonstandardLro]
|
392
|
+
def nonstandard_lro_model_for service_full_name
|
393
|
+
if @nonstandard_lro_services.key? service_full_name
|
394
|
+
@nonstandard_lro_services[service_full_name]
|
395
|
+
else
|
396
|
+
Gapic::Model::Service::NoNonstandardLro.instance
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
321
400
|
##
|
322
401
|
# Whether configuration has an override for the wrapper gem name
|
323
402
|
# @return [Boolean]
|
@@ -351,6 +430,9 @@ module Gapic
|
|
351
430
|
output.puts "WARNING: configured common service #{k} is not present" unless addrs.include? k
|
352
431
|
output.puts "WARNING: configured common service delegate #{v} is not present" unless addrs.include? v
|
353
432
|
end
|
433
|
+
# TODO: Sanity check snippet configs to ensure that the type of call
|
434
|
+
# (e.g. streaming, lro, etc) matches the rpc type. Warn and remove any
|
435
|
+
# noncomplying snippet configs to prevent crashes when rendering.
|
354
436
|
end
|
355
437
|
|
356
438
|
# Does a pre-analysis of all resources defined in the job. This has
|
@@ -375,7 +457,7 @@ module Gapic
|
|
375
457
|
file.resources.each { |resource| populate_resource_lookups resource, types, patterns }
|
376
458
|
file.messages.each { |message| populate_message_resource_lookups message, types, patterns }
|
377
459
|
end
|
378
|
-
types.
|
460
|
+
types.each_value do |resource|
|
379
461
|
parents = resource.parsed_parent_patterns
|
380
462
|
.flat_map { |pat| Array(patterns[pat]) }
|
381
463
|
.uniq
|
@@ -398,6 +480,24 @@ module Gapic
|
|
398
480
|
end
|
399
481
|
end
|
400
482
|
|
483
|
+
##
|
484
|
+
# Does a pre-analysis of the nonstandard LRO for every service.
|
485
|
+
# For the services that provide nonstandard LRO functionality, cashes a model for the future use
|
486
|
+
#
|
487
|
+
# @return [Hash<String, Gapic::Model::Service::NonstandardLroProvider>]
|
488
|
+
def analyze_nonstandard_lros
|
489
|
+
service_registry = {}
|
490
|
+
|
491
|
+
@files.each do |file|
|
492
|
+
file.services.each do |service|
|
493
|
+
nonstandard_lro = Gapic::Model::Service.parse_nonstandard_lro service
|
494
|
+
service_registry[service.full_name] = nonstandard_lro if nonstandard_lro
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
service_registry
|
499
|
+
end
|
500
|
+
|
401
501
|
# Parse a comma-delimited list of equals-delimited lists of strings, while
|
402
502
|
# mapping backslash-escaped commas and equal signs to literal characters.
|
403
503
|
# @param str [String]
|
@@ -427,7 +527,7 @@ module Gapic
|
|
427
527
|
|
428
528
|
def str_to_key str
|
429
529
|
str = str.to_s
|
430
|
-
str.start_with?(":") ? str[1
|
530
|
+
str.start_with?(":") ? str[1..].to_sym : str
|
431
531
|
end
|
432
532
|
|
433
533
|
def key_to_str key
|