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
@@ -30,6 +30,8 @@ module Gapic
|
|
30
30
|
|
31
31
|
def initialize api
|
32
32
|
@api = api
|
33
|
+
service_config = api.configuration[:common_services] ? nil : api.service_config
|
34
|
+
@mixins_model = Gapic::Model::Mixins.new api.services.map(&:full_name), service_config, name
|
33
35
|
end
|
34
36
|
|
35
37
|
##
|
@@ -46,10 +48,16 @@ module Gapic
|
|
46
48
|
!packages.empty?
|
47
49
|
end
|
48
50
|
|
51
|
+
##
|
52
|
+
# @return [Enumerable<Gapic::Presenters::ServicePresenter>]
|
53
|
+
#
|
49
54
|
def services
|
50
55
|
@services ||= begin
|
51
56
|
files = @api.generate_files
|
52
|
-
files.map(&:services).flatten
|
57
|
+
service_list = files.map(&:services).flatten
|
58
|
+
mixin_service_names = mixins_model.mixin_services
|
59
|
+
service_list.delete_if { |s| mixin_service_names.include? s.full_name }
|
60
|
+
service_list.map { |s| ServicePresenter.new self, @api, s }
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
@@ -59,17 +67,12 @@ module Gapic
|
|
59
67
|
|
60
68
|
def proto_files
|
61
69
|
@proto_files ||= begin
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
files.map { |f| FilePresenter.new @api, f }
|
70
|
+
@api.files
|
71
|
+
.select { |f| useful_proto_file? f }
|
72
|
+
.map { |f| FilePresenter.new @api, f }
|
66
73
|
end
|
67
74
|
end
|
68
75
|
|
69
|
-
def address
|
70
|
-
name.split("-").map(&:camelize)
|
71
|
-
end
|
72
|
-
|
73
76
|
def name
|
74
77
|
gem_config :name
|
75
78
|
end
|
@@ -81,6 +84,7 @@ module Gapic
|
|
81
84
|
|
82
85
|
def title
|
83
86
|
gem_config(:title) ||
|
87
|
+
@api.api_metadata.title ||
|
84
88
|
namespace.split("::").join(" ")
|
85
89
|
end
|
86
90
|
|
@@ -113,11 +117,29 @@ module Gapic
|
|
113
117
|
|
114
118
|
def description
|
115
119
|
gem_config(:description) ||
|
120
|
+
@api.api_metadata.description ||
|
116
121
|
"#{name} is the official client library for the #{title} API."
|
117
122
|
end
|
118
123
|
|
124
|
+
def gemspec_description
|
125
|
+
description.gsub(/\s+/, " ").strip
|
126
|
+
end
|
127
|
+
|
128
|
+
##
|
129
|
+
# Generates a description text for README files, accounting for markdown
|
130
|
+
# rendering and properly escaping variables.
|
131
|
+
#
|
132
|
+
# @return [Array<String>] The description text as an array of lines.
|
133
|
+
#
|
134
|
+
def readme_description
|
135
|
+
has_markdown = description.strip.start_with? "#"
|
136
|
+
desc = has_markdown ? description.split("\n") : [description.gsub(/\s+/, " ").strip]
|
137
|
+
Gapic::FormattingUtils.format_doc_lines @api, desc
|
138
|
+
end
|
139
|
+
|
119
140
|
def summary
|
120
141
|
gem_config(:summary) ||
|
142
|
+
@api.api_metadata.summary ||
|
121
143
|
"API Client library for the #{title} API"
|
122
144
|
end
|
123
145
|
|
@@ -135,21 +157,25 @@ module Gapic
|
|
135
157
|
end
|
136
158
|
|
137
159
|
def library_documentation_url
|
138
|
-
gem_config(:library_documentation_url) || "https://
|
160
|
+
gem_config(:library_documentation_url) || "https://rubydoc.info/gems/#{name}"
|
139
161
|
end
|
140
162
|
|
141
163
|
def product_documentation_url
|
142
|
-
gem_config
|
164
|
+
gem_config(:product_documentation_url) || @api.api_metadata.documentation_url
|
143
165
|
end
|
144
166
|
|
145
167
|
def api_id
|
146
|
-
raw_id = gem_config
|
168
|
+
raw_id = gem_config(:api_id) || @api.api_metadata.name
|
147
169
|
return nil unless raw_id
|
148
170
|
raw_id.include?(".") ? raw_id : "#{raw_id}.googleapis.com"
|
149
171
|
end
|
150
172
|
|
151
173
|
def api_shortname
|
152
|
-
gem_config
|
174
|
+
gem_config(:api_shortname) || @api.api_metadata.short_name
|
175
|
+
end
|
176
|
+
|
177
|
+
def doc_tag_prefix
|
178
|
+
@api.api_metadata.doc_tag_prefix || api_shortname || api_id&.split(".")&.first
|
153
179
|
end
|
154
180
|
|
155
181
|
def issue_tracker_url
|
@@ -178,7 +204,45 @@ module Gapic
|
|
178
204
|
gem_config(:generic_endpoint) || false
|
179
205
|
end
|
180
206
|
|
207
|
+
##
|
208
|
+
# @return [Boolean]
|
209
|
+
#
|
210
|
+
def rest_numeric_enums?
|
211
|
+
gem_config(:rest_numeric_enums) || false
|
212
|
+
end
|
213
|
+
|
214
|
+
##
|
215
|
+
# @return [Boolean] Whether the generation of REST clients is requested
|
216
|
+
# and can be done because at least one method has rest bindings.
|
217
|
+
#
|
218
|
+
def generate_rest_clients?
|
219
|
+
@api.generate_rest_clients? && packages.any? { |package| !package.first_service_with_rest.nil? }
|
220
|
+
end
|
221
|
+
|
222
|
+
##
|
223
|
+
# @return [Boolean] Whether generation of gRPC clients is requested.
|
224
|
+
#
|
225
|
+
def generate_grpc_clients?
|
226
|
+
@api.generate_grpc_clients?
|
227
|
+
end
|
228
|
+
|
229
|
+
##
|
230
|
+
# @return [:grpc] If gRPC is the default transport
|
231
|
+
# @return [:rest] if REST is the default transport
|
232
|
+
#
|
233
|
+
def default_transport
|
234
|
+
@api.default_transport
|
235
|
+
end
|
236
|
+
|
237
|
+
##
|
238
|
+
# @return [String] Pretty name of the default transport
|
239
|
+
#
|
240
|
+
def default_transport_name
|
241
|
+
@api.default_transport == :grpc ? "gRPC" : "REST"
|
242
|
+
end
|
243
|
+
|
181
244
|
def entrypoint_require
|
245
|
+
return "" unless packages?
|
182
246
|
packages.first.package_require
|
183
247
|
end
|
184
248
|
|
@@ -192,10 +256,15 @@ module Gapic
|
|
192
256
|
|
193
257
|
def dependencies
|
194
258
|
@dependencies ||= begin
|
195
|
-
deps = { "gapic-common" =>
|
196
|
-
deps["grpc-google-iam-v1"] =
|
259
|
+
deps = { "gapic-common" => "~> 1.0" }
|
260
|
+
deps["grpc-google-iam-v1"] = "~> 1.11" if iam_dependency?
|
197
261
|
extra_deps = gem_config_dependencies
|
262
|
+
deps.merge! mixins_model.dependencies if mixins_model.mixins?
|
263
|
+
# extra deps should be last, overriding mixins or defaults
|
198
264
|
deps.merge! extra_deps if extra_deps
|
265
|
+
# google-iam-v1 is a superset of grpc-google-iam-v1, so if both are
|
266
|
+
# listed, use only google-iam-v1.
|
267
|
+
deps.delete "grpc-google-iam-v1" if deps.include? "google-iam-v1"
|
199
268
|
deps
|
200
269
|
end
|
201
270
|
end
|
@@ -215,7 +284,7 @@ module Gapic
|
|
215
284
|
# @return [Hash]
|
216
285
|
def first_package_drift_manifest
|
217
286
|
return {} unless packages?
|
218
|
-
packages
|
287
|
+
packages.first.drift_manifest
|
219
288
|
end
|
220
289
|
|
221
290
|
##
|
@@ -240,14 +309,32 @@ module Gapic
|
|
240
309
|
end
|
241
310
|
|
242
311
|
##
|
243
|
-
# Whether the "Enabling
|
244
|
-
#
|
245
|
-
#
|
312
|
+
# Whether the "Enabling Logging" section of the readme should appear.
|
313
|
+
# This is true if there is a quick-start service displayed in the readme.
|
314
|
+
#
|
315
|
+
# @return [Boolean]
|
316
|
+
#
|
317
|
+
def show_logging_docs?
|
318
|
+
packages? && !quick_start_service.usable_service_presenter.nil?
|
319
|
+
end
|
320
|
+
|
321
|
+
##
|
322
|
+
# Whether there are mixin services that should be referenced
|
323
|
+
# in the services for this gem
|
246
324
|
#
|
247
325
|
# @return [Boolean]
|
248
326
|
#
|
249
|
-
def
|
250
|
-
|
327
|
+
def mixins?
|
328
|
+
@mixins_model.mixins?
|
329
|
+
end
|
330
|
+
|
331
|
+
##
|
332
|
+
# The model for the mixin services
|
333
|
+
#
|
334
|
+
# @return [Gapic::Model::Mixins]
|
335
|
+
#
|
336
|
+
def mixins_model
|
337
|
+
@mixins_model
|
251
338
|
end
|
252
339
|
|
253
340
|
private
|
@@ -261,35 +348,54 @@ module Gapic
|
|
261
348
|
##
|
262
349
|
# There is a special case (from PoV of generator parameters)
|
263
350
|
# in gem dependencies where a dependency needs to be an array of strings
|
264
|
-
# e.g. ">= 1.6", "< 2.a"
|
351
|
+
# e.g. `">= 1.6", "< 2.a"``
|
265
352
|
# Rather than creating a special generator param case for this I will special-case it here.
|
266
|
-
#
|
267
|
-
#
|
353
|
+
# Supported separators are `|` and `+`. The latter is preferred.
|
354
|
+
# Spaces in the version requirements are optional.
|
355
|
+
# The above would be represented as `">=1.6+<2.a"`
|
268
356
|
#
|
269
357
|
# @return [Hash<String, String>, Hash{String=>Array<String>}, nil]
|
270
358
|
def gem_config_dependencies
|
271
359
|
return unless gem_config :extra_dependencies
|
272
|
-
gem_config(:extra_dependencies).
|
360
|
+
gem_config(:extra_dependencies).transform_values do |dep_versions|
|
273
361
|
if dep_versions.include? "|"
|
274
|
-
|
362
|
+
dep_versions.split("|").map { |dep_version| check_dep_version dep_version }
|
363
|
+
elsif dep_versions.include? "+"
|
364
|
+
dep_versions.split("+").map { |dep_version| check_dep_version dep_version }
|
275
365
|
else
|
276
|
-
|
366
|
+
check_dep_version dep_versions
|
277
367
|
end
|
278
|
-
end
|
368
|
+
end
|
279
369
|
end
|
280
370
|
|
281
|
-
def
|
282
|
-
|
371
|
+
def check_dep_version dep_version
|
372
|
+
match = /([>=<~]+)\s*(\d+(?:\.\w+)+)/.match dep_version
|
373
|
+
raise "Bad syntax for extra_dependency: #{dep_version}" unless match
|
374
|
+
"#{match[1]} #{match[2]}"
|
375
|
+
end
|
376
|
+
|
377
|
+
def denylist_protos
|
378
|
+
denylist = gem_config(:denylist) || gem_config(:blacklist)
|
283
379
|
|
284
|
-
return
|
285
|
-
return
|
380
|
+
return default_denylist_protos if denylist.nil?
|
381
|
+
return default_denylist_protos if denylist[:protos].nil?
|
286
382
|
|
287
|
-
|
383
|
+
default_denylist_protos[:protos]
|
288
384
|
end
|
289
385
|
|
290
|
-
def
|
386
|
+
def default_denylist_protos
|
291
387
|
["google/api/http.proto", "google/protobuf/descriptor.proto"]
|
292
388
|
end
|
389
|
+
|
390
|
+
def mixin_paths
|
391
|
+
mixins_model.mixins.map(&:require_str)
|
392
|
+
end
|
393
|
+
|
394
|
+
def useful_proto_file? file
|
395
|
+
return false if file.messages.empty? && file.enums.empty?
|
396
|
+
return false if denylist_protos.include? file.name
|
397
|
+
mixin_paths.none? { |m| file.name.start_with? m }
|
398
|
+
end
|
293
399
|
end
|
294
400
|
end
|
295
401
|
end
|
@@ -26,9 +26,17 @@ module Gapic
|
|
26
26
|
class MessagePresenter
|
27
27
|
include Gapic::Helpers::NamespaceHelper
|
28
28
|
|
29
|
+
# @return [String] String representation of this presenter type.
|
30
|
+
attr_reader :type
|
31
|
+
|
32
|
+
##
|
33
|
+
# @param api [Gapic::Schema::Api]
|
34
|
+
# @param message [Gapic::Schema::Message]
|
35
|
+
#
|
29
36
|
def initialize api, message
|
30
37
|
@api = api
|
31
38
|
@message = message
|
39
|
+
@type = "message"
|
32
40
|
end
|
33
41
|
|
34
42
|
def name
|
@@ -63,6 +71,13 @@ module Gapic
|
|
63
71
|
@nested_messages ||= @message.nested_messages.map { |m| MessagePresenter.new @api, m }
|
64
72
|
end
|
65
73
|
|
74
|
+
##
|
75
|
+
# @return [Boolean] Whether the message is marked as deprecated.
|
76
|
+
#
|
77
|
+
def is_deprecated?
|
78
|
+
@message.is_deprecated?
|
79
|
+
end
|
80
|
+
|
66
81
|
protected
|
67
82
|
|
68
83
|
def message_ruby_type message
|
@@ -0,0 +1,128 @@
|
|
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
|
+
module Gapic
|
18
|
+
module Presenters
|
19
|
+
module Method
|
20
|
+
##
|
21
|
+
# A presenter for the Http Binding, used to generate code setting up gRPC transcoding
|
22
|
+
#
|
23
|
+
class HttpBindingPresenter
|
24
|
+
extend Forwardable
|
25
|
+
|
26
|
+
def initialize binding
|
27
|
+
@binding = binding
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Performs a limited URI transcoding to create a string that will interpolate
|
32
|
+
# the values from the request object to create a request URI at runtime.
|
33
|
+
# Currently only supports "value" into "request_object.value"
|
34
|
+
# @param [String] request_obj_name the name of the request object for the interpolation
|
35
|
+
# defaults to "request_pb"
|
36
|
+
# @return [String] A string to interpolate values from the request object into URI
|
37
|
+
#
|
38
|
+
def uri_for_transcoding
|
39
|
+
return path unless routing_params?
|
40
|
+
|
41
|
+
@binding.routing_params.reduce path do |uri, param|
|
42
|
+
param_esc = Regexp.escape param
|
43
|
+
uri.gsub(/{#{param_esc}[^}]*}/, "{#{param}}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# The strings to initialize the `matches` parameter when initializing a
|
49
|
+
# grpc transcoder binding. The `matches` parameter is an array of arrays,
|
50
|
+
# so every string here is in a ruby array syntax. All strings except for the
|
51
|
+
# last one have a comma at the end.
|
52
|
+
#
|
53
|
+
# @return [Array<String>]
|
54
|
+
#
|
55
|
+
def routing_params_transcoder_matches_strings
|
56
|
+
return [] if routing_params_with_regexes.empty?
|
57
|
+
match_init_strings = routing_params_with_regexes.map do |name, regex, preserve_slashes|
|
58
|
+
"[\"#{name}\", %r{#{regex}}, #{preserve_slashes}],"
|
59
|
+
end
|
60
|
+
match_init_strings << match_init_strings.pop.chop # remove the trailing comma for the last element
|
61
|
+
match_init_strings
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# The strings to initialize the `bindings` parameter when initializing a
|
66
|
+
# gapic http binding. The `bindings` parameter is an array of FieldBinding objects,
|
67
|
+
# All strings except for the last one have a comma at the end.
|
68
|
+
#
|
69
|
+
# @return [Array<String>]
|
70
|
+
#
|
71
|
+
def routing_params_transcoder_field_binding_strings
|
72
|
+
return [] if routing_params_with_regexes.empty?
|
73
|
+
match_init_strings = routing_params_with_regexes.map do |name, regex, preserve_slashes|
|
74
|
+
"Gapic::Rest::GrpcTranscoder::HttpBinding::FieldBinding" \
|
75
|
+
".new(\"#{name}\", %r{#{regex}}, #{preserve_slashes}),"
|
76
|
+
end
|
77
|
+
match_init_strings << match_init_strings.pop.chop # remove the trailing comma for the last element
|
78
|
+
match_init_strings
|
79
|
+
end
|
80
|
+
|
81
|
+
# @!method verb?
|
82
|
+
# @return [Boolean]
|
83
|
+
# Whether a http verb is present for this binding.
|
84
|
+
# @!method verb
|
85
|
+
# @return [String]
|
86
|
+
# The http verb for this binding.
|
87
|
+
# @!method path?
|
88
|
+
# @return [Boolean]
|
89
|
+
# Whether a binding path is present and non-empty.
|
90
|
+
# @!method path
|
91
|
+
# @return [String]
|
92
|
+
# A binding path or an empty string if not present.
|
93
|
+
# @!method routing_params?
|
94
|
+
# @return [Boolean]
|
95
|
+
# Whether any routing params are present for this bindings.
|
96
|
+
# @!method body?
|
97
|
+
# @return [Boolean]
|
98
|
+
# Whether the binding has a `body` specified.
|
99
|
+
# @!method body
|
100
|
+
# @return [String]
|
101
|
+
# The `body` specified for this binding
|
102
|
+
# or an empty string if not specified.
|
103
|
+
def_delegators :@binding, :verb?, :verb, :path?, :path, :routing_params?, :body?, :body
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
##
|
108
|
+
# The segment key names, the regexes for their patterns (including
|
109
|
+
# the regexes for `*` patterns implied for the named segments without
|
110
|
+
# pattern explicitly specified), and whether the slash `/` symbols in
|
111
|
+
# the segment variable should be preserved (as opposed to percent-escaped).
|
112
|
+
#
|
113
|
+
# These are used to initialize the grpc transcoder `matches` binding parameter.
|
114
|
+
#
|
115
|
+
# @return [Array<Array<String|Boolean>>]
|
116
|
+
#
|
117
|
+
def routing_params_with_regexes
|
118
|
+
@routing_params_with_regexes ||= begin
|
119
|
+
@binding.routing_params_with_patterns.map do |name, pattern|
|
120
|
+
path_pattern = PathPattern.parse pattern
|
121
|
+
[name, path_pattern.to_field_regex_str, path_pattern.ends_with_double_star_pattern?]
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -109,7 +109,7 @@ module Gapic
|
|
109
109
|
def request_page_token_field
|
110
110
|
# Has a String page_token field which specifies the actual (next) page to retrieve.
|
111
111
|
@request_page_token_field ||= @request.fields.find do |f|
|
112
|
-
f.name == "page_token" && f.type ==
|
112
|
+
f.name == "page_token" && f.type == :TYPE_STRING
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -125,10 +125,7 @@ module Gapic
|
|
125
125
|
|
126
126
|
# Has the int32 page_size or int32 max_results field
|
127
127
|
# which defines the maximum number of paginated resources to return in the response.
|
128
|
-
page_size_types = [
|
129
|
-
Google::Protobuf::FieldDescriptorProto::Type::TYPE_UINT32,
|
130
|
-
Google::Protobuf::FieldDescriptorProto::Type::TYPE_INT32
|
131
|
-
]
|
128
|
+
page_size_types = [:TYPE_UINT32, :TYPE_INT32]
|
132
129
|
|
133
130
|
field = @request.fields.find do |f|
|
134
131
|
page_size_names.include?(f.name) && page_size_types.include?(f.type)
|
@@ -156,7 +153,7 @@ module Gapic
|
|
156
153
|
def response_next_page_token_field
|
157
154
|
# Has the string next_page_token field to be used in the next request as page_token to retrieve the next page.
|
158
155
|
@response_next_page_token_field ||= @response.fields.find do |f|
|
159
|
-
f.name == "next_page_token" && f.type ==
|
156
|
+
f.name == "next_page_token" && f.type == :TYPE_STRING
|
160
157
|
end
|
161
158
|
end
|
162
159
|
|
@@ -169,8 +166,7 @@ module Gapic
|
|
169
166
|
@response_results_field ||= begin
|
170
167
|
map_fields = @response.fields.find_all(&:map?)
|
171
168
|
repeated_fields = @response.fields.find_all do |f|
|
172
|
-
!f.map? &&
|
173
|
-
f.label == Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED
|
169
|
+
!f.map? && f.label == :LABEL_REPEATED
|
174
170
|
end
|
175
171
|
|
176
172
|
if map_fields.count == 1
|
@@ -187,6 +183,26 @@ module Gapic
|
|
187
183
|
end
|
188
184
|
end
|
189
185
|
|
186
|
+
# @private
|
187
|
+
FIELD_TYPE_MAPPING = {
|
188
|
+
TYPE_DOUBLE: "::Float",
|
189
|
+
TYPE_FLOAT: "::Float",
|
190
|
+
TYPE_INT64: "::Integer",
|
191
|
+
TYPE_UINT64: "::Integer",
|
192
|
+
TYPE_INT32: "::Integer",
|
193
|
+
TYPE_FIXED64: "::Integer",
|
194
|
+
TYPE_FIXED32: "::Integer",
|
195
|
+
TYPE_BOOL: "::Boolean",
|
196
|
+
TYPE_STRING: "::String",
|
197
|
+
TYPE_BYTES: "::String",
|
198
|
+
TYPE_UINT32: "::Integer",
|
199
|
+
TYPE_SFIXED32: "::Integer",
|
200
|
+
TYPE_SFIXED64: "::Integer",
|
201
|
+
TYPE_SINT32: "::Integer",
|
202
|
+
TYPE_SINT64: "::Integer"
|
203
|
+
}.freeze
|
204
|
+
private_constant :FIELD_TYPE_MAPPING
|
205
|
+
|
190
206
|
##
|
191
207
|
# A helper to get a Ruby doc-type for a paginated element.
|
192
208
|
#
|
@@ -201,14 +217,7 @@ module Gapic
|
|
201
217
|
# TODO: handle when arg message is nil and enum is the type
|
202
218
|
message_ruby_type field.enum
|
203
219
|
else
|
204
|
-
|
205
|
-
when 1, 2 then "::Float"
|
206
|
-
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "::Integer"
|
207
|
-
when 9, 12 then "::String"
|
208
|
-
when 8 then "::Boolean"
|
209
|
-
else
|
210
|
-
"::Object"
|
211
|
-
end
|
220
|
+
FIELD_TYPE_MAPPING[field.type] || "::Object"
|
212
221
|
end
|
213
222
|
end
|
214
223
|
|