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
@@ -30,7 +30,8 @@ module Gapic
|
|
30
30
|
|
31
31
|
def initialize api
|
32
32
|
@api = api
|
33
|
-
|
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
|
34
35
|
end
|
35
36
|
|
36
37
|
##
|
@@ -53,7 +54,10 @@ module Gapic
|
|
53
54
|
def services
|
54
55
|
@services ||= begin
|
55
56
|
files = @api.generate_files
|
56
|
-
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 }
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
@@ -63,17 +67,12 @@ module Gapic
|
|
63
67
|
|
64
68
|
def proto_files
|
65
69
|
@proto_files ||= begin
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
files.map { |f| FilePresenter.new @api, f }
|
70
|
+
@api.files
|
71
|
+
.select { |f| useful_proto_file? f }
|
72
|
+
.map { |f| FilePresenter.new @api, f }
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
73
|
-
def address
|
74
|
-
name.split("-").map(&:camelize)
|
75
|
-
end
|
76
|
-
|
77
76
|
def name
|
78
77
|
gem_config :name
|
79
78
|
end
|
@@ -85,6 +84,7 @@ module Gapic
|
|
85
84
|
|
86
85
|
def title
|
87
86
|
gem_config(:title) ||
|
87
|
+
@api.api_metadata.title ||
|
88
88
|
namespace.split("::").join(" ")
|
89
89
|
end
|
90
90
|
|
@@ -117,11 +117,29 @@ module Gapic
|
|
117
117
|
|
118
118
|
def description
|
119
119
|
gem_config(:description) ||
|
120
|
+
@api.api_metadata.description ||
|
120
121
|
"#{name} is the official client library for the #{title} API."
|
121
122
|
end
|
122
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
|
+
|
123
140
|
def summary
|
124
141
|
gem_config(:summary) ||
|
142
|
+
@api.api_metadata.summary ||
|
125
143
|
"API Client library for the #{title} API"
|
126
144
|
end
|
127
145
|
|
@@ -143,17 +161,21 @@ module Gapic
|
|
143
161
|
end
|
144
162
|
|
145
163
|
def product_documentation_url
|
146
|
-
gem_config
|
164
|
+
gem_config(:product_documentation_url) || @api.api_metadata.documentation_url
|
147
165
|
end
|
148
166
|
|
149
167
|
def api_id
|
150
|
-
raw_id = gem_config
|
168
|
+
raw_id = gem_config(:api_id) || @api.api_metadata.name
|
151
169
|
return nil unless raw_id
|
152
170
|
raw_id.include?(".") ? raw_id : "#{raw_id}.googleapis.com"
|
153
171
|
end
|
154
172
|
|
155
173
|
def api_shortname
|
156
|
-
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
|
157
179
|
end
|
158
180
|
|
159
181
|
def issue_tracker_url
|
@@ -185,8 +207,38 @@ module Gapic
|
|
185
207
|
##
|
186
208
|
# @return [Boolean]
|
187
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
|
+
#
|
188
218
|
def generate_rest_clients?
|
189
|
-
@api.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"
|
190
242
|
end
|
191
243
|
|
192
244
|
def entrypoint_require
|
@@ -204,11 +256,15 @@ module Gapic
|
|
204
256
|
|
205
257
|
def dependencies
|
206
258
|
@dependencies ||= begin
|
207
|
-
deps = { "gapic-common" =>
|
208
|
-
deps["grpc-google-iam-v1"] =
|
259
|
+
deps = { "gapic-common" => "~> 1.0" }
|
260
|
+
deps["grpc-google-iam-v1"] = "~> 1.11" if iam_dependency?
|
209
261
|
extra_deps = gem_config_dependencies
|
210
|
-
deps.merge! extra_deps if extra_deps
|
211
262
|
deps.merge! mixins_model.dependencies if mixins_model.mixins?
|
263
|
+
# extra deps should be last, overriding mixins or defaults
|
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"
|
212
268
|
deps
|
213
269
|
end
|
214
270
|
end
|
@@ -253,14 +309,13 @@ module Gapic
|
|
253
309
|
end
|
254
310
|
|
255
311
|
##
|
256
|
-
# Whether the "Enabling
|
257
|
-
#
|
258
|
-
# readme, AND it uses gRPC.
|
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.
|
259
314
|
#
|
260
315
|
# @return [Boolean]
|
261
316
|
#
|
262
|
-
def
|
263
|
-
packages? && quick_start_service.usable_service_presenter.
|
317
|
+
def show_logging_docs?
|
318
|
+
packages? && !quick_start_service.usable_service_presenter.nil?
|
264
319
|
end
|
265
320
|
|
266
321
|
##
|
@@ -293,35 +348,54 @@ module Gapic
|
|
293
348
|
##
|
294
349
|
# There is a special case (from PoV of generator parameters)
|
295
350
|
# in gem dependencies where a dependency needs to be an array of strings
|
296
|
-
# e.g. ">= 1.6", "< 2.a"
|
351
|
+
# e.g. `">= 1.6", "< 2.a"``
|
297
352
|
# Rather than creating a special generator param case for this I will special-case it here.
|
298
|
-
#
|
299
|
-
#
|
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"`
|
300
356
|
#
|
301
357
|
# @return [Hash<String, String>, Hash{String=>Array<String>}, nil]
|
302
358
|
def gem_config_dependencies
|
303
359
|
return unless gem_config :extra_dependencies
|
304
|
-
gem_config(:extra_dependencies).
|
360
|
+
gem_config(:extra_dependencies).transform_values do |dep_versions|
|
305
361
|
if dep_versions.include? "|"
|
306
|
-
|
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 }
|
307
365
|
else
|
308
|
-
|
366
|
+
check_dep_version dep_versions
|
309
367
|
end
|
310
|
-
end
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
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]}"
|
311
375
|
end
|
312
376
|
|
313
|
-
def
|
314
|
-
|
377
|
+
def denylist_protos
|
378
|
+
denylist = gem_config(:denylist) || gem_config(:blacklist)
|
315
379
|
|
316
|
-
return
|
317
|
-
return
|
380
|
+
return default_denylist_protos if denylist.nil?
|
381
|
+
return default_denylist_protos if denylist[:protos].nil?
|
318
382
|
|
319
|
-
|
383
|
+
default_denylist_protos[:protos]
|
320
384
|
end
|
321
385
|
|
322
|
-
def
|
386
|
+
def default_denylist_protos
|
323
387
|
["google/api/http.proto", "google/protobuf/descriptor.proto"]
|
324
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
|
325
399
|
end
|
326
400
|
end
|
327
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
|
@@ -20,7 +20,7 @@ module Gapic
|
|
20
20
|
##
|
21
21
|
# Pagination info determined from the proto method
|
22
22
|
#
|
23
|
-
class
|
23
|
+
class ComputePaginationInfo
|
24
24
|
include Gapic::Helpers::NamespaceHelper
|
25
25
|
##
|
26
26
|
# @param proto_method [Gapic::Schema::Method] the method to derive pagination info from
|
@@ -78,7 +78,9 @@ module Gapic
|
|
78
78
|
|
79
79
|
private
|
80
80
|
|
81
|
+
##
|
81
82
|
# Whether the underlying proto rpc is a server streaming rpc
|
83
|
+
#
|
82
84
|
# @return [Boolean]
|
83
85
|
attr_accessor :server_streaming
|
84
86
|
|
@@ -105,11 +107,11 @@ module Gapic
|
|
105
107
|
##
|
106
108
|
# The field in the request that holds a page_token
|
107
109
|
#
|
108
|
-
# @return[Gapic::Schema::Field, nil]
|
110
|
+
# @return [Gapic::Schema::Field, nil]
|
109
111
|
def request_page_token_field
|
110
112
|
# Has a String page_token field which specifies the actual (next) page to retrieve.
|
111
113
|
@request_page_token_field ||= @request.fields.find do |f|
|
112
|
-
f.name == "page_token" && f.type ==
|
114
|
+
f.name == "page_token" && f.type == :TYPE_STRING
|
113
115
|
end
|
114
116
|
end
|
115
117
|
|
@@ -117,7 +119,7 @@ module Gapic
|
|
117
119
|
# The field in the request that holds a page_size
|
118
120
|
# For Regapic can have a name of either `page_size` or `max_results`
|
119
121
|
#
|
120
|
-
# @return[Gapic::Schema::Field, nil]
|
122
|
+
# @return [Gapic::Schema::Field, nil]
|
121
123
|
def request_page_size_field
|
122
124
|
@request_page_size_field ||=
|
123
125
|
begin
|
@@ -125,10 +127,7 @@ module Gapic
|
|
125
127
|
|
126
128
|
# Has the int32 page_size or int32 max_results field
|
127
129
|
# 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
|
-
]
|
130
|
+
page_size_types = [:TYPE_UINT32, :TYPE_INT32]
|
132
131
|
|
133
132
|
field = @request.fields.find do |f|
|
134
133
|
page_size_names.include?(f.name) && page_size_types.include?(f.type)
|
@@ -152,11 +151,11 @@ module Gapic
|
|
152
151
|
##
|
153
152
|
# The field in the response that holds a next page_token
|
154
153
|
#
|
155
|
-
# @return[Gapic::Schema::Field, nil]
|
154
|
+
# @return [Gapic::Schema::Field, nil]
|
156
155
|
def response_next_page_token_field
|
157
156
|
# Has the string next_page_token field to be used in the next request as page_token to retrieve the next page.
|
158
157
|
@response_next_page_token_field ||= @response.fields.find do |f|
|
159
|
-
f.name == "next_page_token" && f.type ==
|
158
|
+
f.name == "next_page_token" && f.type == :TYPE_STRING
|
160
159
|
end
|
161
160
|
end
|
162
161
|
|
@@ -169,8 +168,7 @@ module Gapic
|
|
169
168
|
@response_results_field ||= begin
|
170
169
|
map_fields = @response.fields.find_all(&:map?)
|
171
170
|
repeated_fields = @response.fields.find_all do |f|
|
172
|
-
!f.map? &&
|
173
|
-
f.label == Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED
|
171
|
+
!f.map? && f.label == :LABEL_REPEATED
|
174
172
|
end
|
175
173
|
|
176
174
|
if map_fields.count == 1
|
@@ -187,6 +185,26 @@ module Gapic
|
|
187
185
|
end
|
188
186
|
end
|
189
187
|
|
188
|
+
# @private
|
189
|
+
FIELD_TYPE_MAPPING = {
|
190
|
+
TYPE_DOUBLE: "::Float",
|
191
|
+
TYPE_FLOAT: "::Float",
|
192
|
+
TYPE_INT64: "::Integer",
|
193
|
+
TYPE_UINT64: "::Integer",
|
194
|
+
TYPE_INT32: "::Integer",
|
195
|
+
TYPE_FIXED64: "::Integer",
|
196
|
+
TYPE_FIXED32: "::Integer",
|
197
|
+
TYPE_BOOL: "::Boolean",
|
198
|
+
TYPE_STRING: "::String",
|
199
|
+
TYPE_BYTES: "::String",
|
200
|
+
TYPE_UINT32: "::Integer",
|
201
|
+
TYPE_SFIXED32: "::Integer",
|
202
|
+
TYPE_SFIXED64: "::Integer",
|
203
|
+
TYPE_SINT32: "::Integer",
|
204
|
+
TYPE_SINT64: "::Integer"
|
205
|
+
}.freeze
|
206
|
+
private_constant :FIELD_TYPE_MAPPING
|
207
|
+
|
190
208
|
##
|
191
209
|
# A helper to get a Ruby doc-type for a paginated element.
|
192
210
|
#
|
@@ -201,14 +219,7 @@ module Gapic
|
|
201
219
|
# TODO: handle when arg message is nil and enum is the type
|
202
220
|
message_ruby_type field.enum
|
203
221
|
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
|
222
|
+
FIELD_TYPE_MAPPING[field.type] || "::Object"
|
212
223
|
end
|
213
224
|
end
|
214
225
|
|
@@ -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
|