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
data/lib/gapic/gem_builder.rb
CHANGED
@@ -37,23 +37,21 @@ module Gapic
|
|
37
37
|
# Writes all the files for the gem.
|
38
38
|
#
|
39
39
|
def bootstrap
|
40
|
-
gen "readme
|
41
|
-
gen "gemspec
|
42
|
-
gen "rakefile
|
43
|
-
gen "gemfile
|
44
|
-
gen "gitignore
|
45
|
-
gen "rubocop
|
46
|
-
gen "dockerfile
|
47
|
-
gen "entrypoint
|
48
|
-
gen "gapic_sh
|
49
|
-
gen "binary
|
50
|
-
gen "generator.
|
51
|
-
|
52
|
-
gen "
|
53
|
-
|
54
|
-
|
55
|
-
gen "test_generator.erb", "test/generators/#{gem_name}_test.rb"
|
56
|
-
cp "speech_desc.bin", "proto_input/speech_desc.bin"
|
40
|
+
gen "readme", "README.md"
|
41
|
+
gen "gemspec", "gapic-generator-#{gem_name}.gemspec"
|
42
|
+
gen "rakefile", "Rakefile"
|
43
|
+
gen "gemfile", "Gemfile"
|
44
|
+
gen "gitignore", ".gitignore"
|
45
|
+
gen "rubocop", ".rubocop.yml"
|
46
|
+
gen "dockerfile", "Dockerfile"
|
47
|
+
gen "entrypoint", "docker-entrypoint.sh"
|
48
|
+
gen "gapic_sh", "gapic.sh"
|
49
|
+
gen "binary", "bin/protoc-gen-ruby_#{gem_name}"
|
50
|
+
gen "generator", "lib/gapic/generators/#{gem_name}_generator.rb"
|
51
|
+
gen "version", "lib/gapic/generator/#{gem_name}/version.rb"
|
52
|
+
gen "test_helper", "test/test_helper.rb"
|
53
|
+
gen "test_generator", "test/generators/#{gem_name}_test.rb"
|
54
|
+
cp "speech_desc.bin", "proto_input/speech_desc.bin"
|
57
55
|
end
|
58
56
|
|
59
57
|
private
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
require "gapic/file_formatter"
|
18
18
|
require "action_controller"
|
19
|
-
require "google/protobuf/compiler/
|
19
|
+
require "google/protobuf/compiler/plugin_pb"
|
20
20
|
require "tempfile"
|
21
21
|
|
22
22
|
module Gapic
|
@@ -46,8 +46,10 @@ module Gapic
|
|
46
46
|
template_path = File.expand_path template_path
|
47
47
|
helpers_path = File.join template_path, "helpers"
|
48
48
|
|
49
|
-
#
|
50
|
-
ActiveSupport::Dependencies.autoload_paths.prepend helpers_path
|
49
|
+
# For some reason autoload doesn't seem to be working for helpers in Rails 8:
|
50
|
+
# ActiveSupport::Dependencies.autoload_paths.prepend helpers_path
|
51
|
+
# So instead we eagerly load helpers
|
52
|
+
Dir.glob("#{helpers_path}/*_helper.rb") { |file| require file }
|
51
53
|
|
52
54
|
# Configure the controller to know about the templates and helpers
|
53
55
|
controller.prepend_view_path template_path
|
@@ -66,7 +68,7 @@ module Gapic
|
|
66
68
|
template: template, formats: :text, locals: args
|
67
69
|
)
|
68
70
|
Google::Protobuf::Compiler::CodeGeneratorResponse::File.new(
|
69
|
-
name: filename, content: content
|
71
|
+
name: filename, content: String.new(content)
|
70
72
|
)
|
71
73
|
end
|
72
74
|
alias_method :g, :generate_file
|
@@ -17,6 +17,7 @@
|
|
17
17
|
require "gapic/generators/base_generator"
|
18
18
|
require "gapic/generators/default_generator_parameters"
|
19
19
|
require "gapic/presenters"
|
20
|
+
require "gapic/package_snippets"
|
20
21
|
|
21
22
|
module Gapic
|
22
23
|
module Generators
|
@@ -47,57 +48,92 @@ module Gapic
|
|
47
48
|
|
48
49
|
gem = gem_presenter || Gapic::Presenters.gem_presenter(@api)
|
49
50
|
|
51
|
+
if @api.generate_rest_clients? && gem.packages.find(&:generate_rest_clients?).nil?
|
52
|
+
raise "Rest transport specified but no services have HTTP bindings"
|
53
|
+
end
|
54
|
+
|
50
55
|
gem.packages.each do |package|
|
56
|
+
package_snippets = PackageSnippets.new snippet_dir: "snippets",
|
57
|
+
proto_package: package.name,
|
58
|
+
gem_name: gem.name
|
59
|
+
|
51
60
|
# Package level files
|
52
|
-
files << g("package
|
61
|
+
files << g("package", "lib/#{package.package_file_path}", package: package)
|
62
|
+
files << g("package_rest", "lib/#{package.package_rest_file_path}", package: package) if package.generate_rest_clients?
|
63
|
+
files << g("binding_override", "lib/#{package.mixin_binding_overrides_file_path}", package: package) if package.mixin_binding_overrides? && package.generate_rest_clients?
|
53
64
|
|
54
65
|
package.services.each do |service|
|
66
|
+
should_generate_grpc = service.generate_grpc_clients?
|
67
|
+
should_generate_rest = service.generate_rest_clients?
|
68
|
+
|
55
69
|
# Service level files
|
56
|
-
files << g("service
|
57
|
-
files << g("service/
|
58
|
-
files << g("service/
|
59
|
-
|
60
|
-
|
61
|
-
files << g("service/
|
62
|
-
|
63
|
-
|
64
|
-
files << g("service/
|
65
|
-
files << g("service/rest/
|
66
|
-
|
67
|
-
|
68
|
-
files << g("service/
|
69
|
-
files << g("service/
|
70
|
+
files << g("service", "lib/#{service.service_file_path}", service: service)
|
71
|
+
files << g("service/credentials", "lib/#{service.credentials_file_path}", service: service) unless gem.generic_endpoint?
|
72
|
+
files << g("service/paths", "lib/#{service.paths_file_path}", service: service) if service.paths?
|
73
|
+
|
74
|
+
# Rest module file
|
75
|
+
files << g("service/rest", "lib/#{service.rest.service_rest_file_path}", service: service) if should_generate_rest
|
76
|
+
|
77
|
+
# client.rb
|
78
|
+
files << g("service/client", "lib/#{service.client_file_path}", service: service) if should_generate_grpc
|
79
|
+
files << g("service/rest/client", "lib/#{service.rest.client_file_path}", service: service) if should_generate_rest
|
80
|
+
|
81
|
+
# Standard LRO shim
|
82
|
+
files << g("service/operations", "lib/#{service.operations_file_path}", service: service) if service.lro? && should_generate_grpc
|
83
|
+
files << g("service/rest/operations", "lib/#{service.rest.operations_file_path}", service: service) if service.rest.lro? && should_generate_rest
|
84
|
+
|
85
|
+
# Nonstandard LRO shim
|
86
|
+
files << g("service/nonstandard_lro", "lib/#{service.nonstandard_lro_file_path}", service: service) if service.nonstandard_lro_provider? && should_generate_grpc
|
87
|
+
files << g("service/rest/nonstandard_lro", "lib/#{service.rest.nonstandard_lro_file_path}", service: service) if service.rest.nonstandard_lro_provider? && should_generate_rest
|
88
|
+
|
89
|
+
# Rest-only `service.stub` file
|
90
|
+
files << g("service/rest/service_stub", "lib/#{service.rest.service_stub_file_path}", service: service) if should_generate_rest
|
91
|
+
|
92
|
+
# Unit tests for `client.rb`
|
93
|
+
files << g("service/test/client", "test/#{service.test_client_file_path}", service: service) if should_generate_grpc
|
94
|
+
files << g("service/rest/test/client", "test/#{service.rest.test_client_file_path}", service: service) if should_generate_rest
|
95
|
+
|
96
|
+
# Unit tests for `paths.rb`
|
97
|
+
files << g("service/test/client_paths", "test/#{service.test_paths_file_path}", service: service) if service.paths? && should_generate_grpc
|
98
|
+
|
99
|
+
# Unit tests for standard LRO shim
|
100
|
+
files << g("service/test/client_operations", "test/#{service.test_client_operations_file_path}", service: service) if service.lro? && should_generate_grpc
|
70
101
|
|
71
102
|
if @api.generate_standalone_snippets?
|
72
103
|
service.methods.each do |method|
|
73
|
-
|
74
|
-
|
104
|
+
method.all_snippets.each do |snippet|
|
105
|
+
snippet_file = g("snippets/standalone", "snippets/#{snippet.snippet_file_path}", snippet: snippet)
|
106
|
+
package_snippets.add(method_presenter: method, snippet_presenter: snippet, snippet_file: snippet_file)
|
107
|
+
end
|
75
108
|
end
|
76
109
|
end
|
77
110
|
end
|
111
|
+
|
112
|
+
files += package_snippets.files if @api.generate_standalone_snippets?
|
78
113
|
end
|
79
114
|
|
80
115
|
# Gem level files
|
81
|
-
files << g("gem/gitignore
|
82
|
-
files << g("gem/version
|
83
|
-
files << g("gem/test_helper
|
84
|
-
files << g("gem/gemspec
|
85
|
-
files << g("gem/gemfile
|
86
|
-
files << g("gem/rakefile
|
87
|
-
files << g("gem/readme
|
88
|
-
files << g("gem/changelog
|
89
|
-
files << g("gem/rubocop
|
90
|
-
files << g("gem/
|
91
|
-
files << g("gem/
|
92
|
-
files << g("gem/
|
93
|
-
files << g("gem/
|
94
|
-
|
95
|
-
|
116
|
+
files << g("gem/gitignore", ".gitignore", gem: gem)
|
117
|
+
files << g("gem/version", "lib/#{gem.version_file_path}", gem: gem)
|
118
|
+
files << g("gem/test_helper", "test/helper.rb", gem: gem)
|
119
|
+
files << g("gem/gemspec", "#{gem.name}.gemspec", gem: gem)
|
120
|
+
files << g("gem/gemfile", "Gemfile", gem: gem)
|
121
|
+
files << g("gem/rakefile", "Rakefile", gem: gem)
|
122
|
+
files << g("gem/readme", "README.md", gem: gem)
|
123
|
+
files << g("gem/changelog", "CHANGELOG.md", gem: gem)
|
124
|
+
files << g("gem/rubocop", ".rubocop.yml", gem: gem)
|
125
|
+
files << g("gem/toys", ".toys.rb", gem: gem)
|
126
|
+
files << g("gem/yardopts", ".yardopts", gem: gem)
|
127
|
+
files << g("gem/license", "LICENSE.md", gem: gem)
|
128
|
+
files << g("gem/entrypoint", "lib/#{gem.name}.rb", gem: gem)
|
129
|
+
files << g("gem/gapic_metadata_json", "gapic_metadata.json", gem: gem) if @api.generate_metadata
|
130
|
+
|
131
|
+
files << g("snippets/gemfile", "snippets/Gemfile", gem: gem) if @api.generate_standalone_snippets?
|
96
132
|
|
97
133
|
gem.proto_files.each do |proto_file|
|
98
|
-
files << g("proto_docs/proto_file
|
134
|
+
files << g("proto_docs/proto_file", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
|
99
135
|
end
|
100
|
-
files << g("proto_docs/readme
|
136
|
+
files << g("proto_docs/readme", "proto_docs/README.md", gem: gem)
|
101
137
|
|
102
138
|
format_files files
|
103
139
|
|
@@ -24,6 +24,8 @@ module Gapic
|
|
24
24
|
":gem.:free_tier",
|
25
25
|
":gem.:yard_strict",
|
26
26
|
":gem.:generic_endpoint",
|
27
|
+
":gem.:is_cloud_product",
|
28
|
+
":gem.:rest_numeric_enums",
|
27
29
|
":generate_metadata",
|
28
30
|
":generate_standalone_snippets",
|
29
31
|
":generate_yardoc_snippets"
|
@@ -47,7 +49,8 @@ module Gapic
|
|
47
49
|
":defaults.:service.:default_host",
|
48
50
|
"grpc_service_config",
|
49
51
|
":service_yaml",
|
50
|
-
":overrides.:wrapper_gem_name"
|
52
|
+
":overrides.:wrapper_gem_name",
|
53
|
+
":snippet_configs_path"
|
51
54
|
].freeze
|
52
55
|
|
53
56
|
ARRAY_PARAMETERS = [
|
@@ -66,7 +69,9 @@ module Gapic
|
|
66
69
|
BOOL_PARAMETERS_ALIASES = {
|
67
70
|
"gem-free-tier" => ":gem.:free_tier",
|
68
71
|
"gem-yard-strict" => ":gem.:yard_strict",
|
69
|
-
"gem-generic-endpoint" => ":gem.:generic_endpoint"
|
72
|
+
"gem-generic-endpoint" => ":gem.:generic_endpoint",
|
73
|
+
"gem-is-cloud-product" => ":gem.:is_cloud_product",
|
74
|
+
"rest-numeric-enums" => ":gem.:rest_numeric_enums"
|
70
75
|
}.freeze
|
71
76
|
|
72
77
|
STRING_PARAMETERS_ALIASES = {
|
@@ -86,7 +91,8 @@ module Gapic
|
|
86
91
|
"gem-factory-method-suffix" => ":gem.:factory_method_suffix",
|
87
92
|
"default-service-host" => ":defaults.:service.:default_host",
|
88
93
|
"grpc-service-config" => "grpc_service_config",
|
89
|
-
"service-yaml" => ":service_yaml"
|
94
|
+
"service-yaml" => ":service_yaml",
|
95
|
+
"snippet-configs-path" => ":snippet_configs_path"
|
90
96
|
}.freeze
|
91
97
|
|
92
98
|
ARRAY_PARAMETERS_ALIASES = {
|
@@ -62,7 +62,7 @@ module Gapic
|
|
62
62
|
"UNAUTHENTICATED"
|
63
63
|
].freeze
|
64
64
|
|
65
|
-
ERROR_STRING_MAPPING = ERROR_CODE_MAPPING.each_with_index.
|
65
|
+
ERROR_STRING_MAPPING = ERROR_CODE_MAPPING.each_with_index.with_object({}) do |(str, num), hash|
|
66
66
|
hash[str] = num
|
67
67
|
end.freeze
|
68
68
|
|
@@ -209,7 +209,7 @@ module Gapic
|
|
209
209
|
timestring_nos = timestring.delete_suffix "s"
|
210
210
|
unless valid_float? timestring_nos
|
211
211
|
error_text = "Was not able to convert the string `#{timestring}` " \
|
212
|
-
|
212
|
+
"to a time interval when parsing a grpc service config"
|
213
213
|
raise ParsingError, error_text
|
214
214
|
end
|
215
215
|
Float(timestring_nos)
|
@@ -0,0 +1,173 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2023 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 Model
|
19
|
+
##
|
20
|
+
# A collection of metadata about an API.
|
21
|
+
#
|
22
|
+
# This information generally comes from the service yaml rather than from
|
23
|
+
# proto input.
|
24
|
+
#
|
25
|
+
class ApiMetadata
|
26
|
+
##
|
27
|
+
# @return [String] The full ID of the API, including `".googleapis.com"`.
|
28
|
+
# For example, `"pubsub.googleapis.com"`.
|
29
|
+
#
|
30
|
+
attr_reader :name
|
31
|
+
|
32
|
+
##
|
33
|
+
# @return [String] The shortname of the API, omitting `".googleapis.com"`.
|
34
|
+
# For example, `"pubsub"`.
|
35
|
+
#
|
36
|
+
attr_reader :short_name
|
37
|
+
|
38
|
+
##
|
39
|
+
# @return [String] A title of the API, including the version.
|
40
|
+
# For example, `"Cloud Pub/Sub V1"`
|
41
|
+
#
|
42
|
+
attr_reader :title
|
43
|
+
|
44
|
+
##
|
45
|
+
# @return [String] A short description of the API, suitable for the
|
46
|
+
# RubyGems summary field.
|
47
|
+
#
|
48
|
+
attr_reader :summary
|
49
|
+
|
50
|
+
##
|
51
|
+
# @return [String] A longer description of the API, suitable for the
|
52
|
+
# RubyGems description field.
|
53
|
+
#
|
54
|
+
attr_reader :description
|
55
|
+
|
56
|
+
##
|
57
|
+
# @return [String] The organization name, determining where the API's
|
58
|
+
# documentation should be published, among other things. This value
|
59
|
+
# is `"CLOUD"` for Google Cloud APIs.
|
60
|
+
#
|
61
|
+
attr_reader :organization
|
62
|
+
|
63
|
+
##
|
64
|
+
# @return [String] The URL for the documentation.
|
65
|
+
#
|
66
|
+
attr_reader :documentation_url
|
67
|
+
|
68
|
+
##
|
69
|
+
# @return [String] The prefix string for sample doc tags.
|
70
|
+
#
|
71
|
+
attr_reader :doc_tag_prefix
|
72
|
+
|
73
|
+
##
|
74
|
+
# @return [Hash{String => Array<String>}] A mapping from method name to a list of auto
|
75
|
+
# populated fields.
|
76
|
+
#
|
77
|
+
attr_reader :auto_populated_fields_by_method_name
|
78
|
+
|
79
|
+
######## Internal ########
|
80
|
+
# @private
|
81
|
+
SELECTOR = "selector"
|
82
|
+
# @private
|
83
|
+
AUTO_POPULATED_FIELDS = "auto_populated_fields"
|
84
|
+
|
85
|
+
##
|
86
|
+
# @private
|
87
|
+
# Special cases for short names
|
88
|
+
#
|
89
|
+
SHORT_NAME_MAPPING = {
|
90
|
+
"iam-meta-api" => "iam"
|
91
|
+
}.freeze
|
92
|
+
|
93
|
+
# @private
|
94
|
+
def update! **keywords
|
95
|
+
omit_patterns = [
|
96
|
+
nil,
|
97
|
+
"",
|
98
|
+
"CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED",
|
99
|
+
/\A\s*\(==.+==\)\s*\Z/
|
100
|
+
]
|
101
|
+
keywords.each do |key, value|
|
102
|
+
instance_variable_set "@#{key}", value unless omit_patterns.any? { |pat| pat === value }
|
103
|
+
end
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
107
|
+
# @private
|
108
|
+
def standardize_names!
|
109
|
+
return unless name || short_name
|
110
|
+
@name ||= short_name
|
111
|
+
@short_name ||= name
|
112
|
+
@name = "#{name}.googleapis.com" unless name.include? "."
|
113
|
+
@short_name = short_name.split(".").first
|
114
|
+
@short_name = SHORT_NAME_MAPPING.fetch @short_name, @short_name
|
115
|
+
@doc_tag_prefix ||= short_name
|
116
|
+
self
|
117
|
+
end
|
118
|
+
|
119
|
+
# @private
|
120
|
+
def standardize_title! gem_name:
|
121
|
+
return unless title
|
122
|
+
@title = title.sub %r{\s+API$}, ""
|
123
|
+
return if title =~ /\s+V\d+\w*$/
|
124
|
+
vers = gem_name.split("-").last
|
125
|
+
@title = "#{title} #{vers.upcase}" if vers =~ /^v\d+\w*$/
|
126
|
+
self
|
127
|
+
end
|
128
|
+
|
129
|
+
# @private
|
130
|
+
def standardize_descriptions!
|
131
|
+
return unless summary || description
|
132
|
+
@description ||= summary
|
133
|
+
if summary
|
134
|
+
@summary = summary.gsub(/\s+/, " ").strip
|
135
|
+
@summary = "#{summary}." if summary =~ /\w\z/
|
136
|
+
@summary = remove_html_tags summary
|
137
|
+
end
|
138
|
+
@description = "#{description}." if description =~ /\w\z/
|
139
|
+
@description = remove_html_tags description
|
140
|
+
self
|
141
|
+
end
|
142
|
+
|
143
|
+
# @private
|
144
|
+
# Remove html tags and markdown links
|
145
|
+
def remove_html_tags str
|
146
|
+
str
|
147
|
+
.gsub(%r{</?[[:alpha:]]+(?:\s+[[:alpha:]]+\s*=\s*(?:"[^"]+"|'[^']+'|[^\s">]+))*\s*/?>}, "")
|
148
|
+
.gsub(%r{\[([^\]]+)\]\([^)]+\)}, "\\1")
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# @private
|
153
|
+
# Parses a service configuration, mapping method names to their respective
|
154
|
+
# auto populated field lists.
|
155
|
+
#
|
156
|
+
def standardize_auto_populated_fields! service_config
|
157
|
+
@auto_populated_fields_by_method_name = {}
|
158
|
+
return unless !service_config.nil? && !service_config.apis.nil?
|
159
|
+
@method_settings.each do |setting|
|
160
|
+
selector = setting[SELECTOR]
|
161
|
+
methods = service_config.apis.filter_map do |api|
|
162
|
+
# Removes API prefix and trailing period.
|
163
|
+
selector[api.name.length + 1..].downcase if selector.start_with? api.name
|
164
|
+
end
|
165
|
+
if !methods.nil? && setting.key?(AUTO_POPULATED_FIELDS)
|
166
|
+
@auto_populated_fields_by_method_name[methods.first] = setting[AUTO_POPULATED_FIELDS]
|
167
|
+
end
|
168
|
+
end
|
169
|
+
self
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|