gapic-generator 0.11.0 → 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 +299 -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 -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/http_binding_presenter.rb +128 -0
- data/lib/gapic/presenters/method/rest_pagination_info.rb +25 -16
- data/lib/gapic/presenters/method_presenter.rb +109 -35
- data/lib/gapic/presenters/method_rest_presenter.rb +70 -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 +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 -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 +198 -273
- 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
@@ -15,6 +15,17 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "active_support/inflector"
|
18
|
+
require "google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb"
|
19
|
+
require "gapic/presenters/snippet/client_call_presenter"
|
20
|
+
require "gapic/presenters/snippet/client_initialization_presenter"
|
21
|
+
require "gapic/presenters/snippet/declaration_presenter"
|
22
|
+
require "gapic/presenters/snippet/expression_presenter"
|
23
|
+
require "gapic/presenters/snippet/iteration_presenter"
|
24
|
+
require "gapic/presenters/snippet/parameter_presenter"
|
25
|
+
require "gapic/presenters/snippet/request_initialization_presenters"
|
26
|
+
require "gapic/presenters/snippet/response_handling_presenters"
|
27
|
+
require "gapic/presenters/snippet/statement_presenter"
|
28
|
+
require "gapic/presenters/snippet/type_presenter"
|
18
29
|
|
19
30
|
module Gapic
|
20
31
|
module Presenters
|
@@ -22,17 +33,27 @@ module Gapic
|
|
22
33
|
# A presenter for snippets.
|
23
34
|
#
|
24
35
|
class SnippetPresenter
|
25
|
-
def initialize method_presenter, api
|
36
|
+
def initialize method_presenter, api, config: nil, transport: nil
|
26
37
|
@method_presenter = method_presenter
|
27
38
|
@api = api
|
39
|
+
@config = config
|
40
|
+
@transport = transport || @api.default_transport
|
41
|
+
analyze_config
|
42
|
+
end
|
43
|
+
|
44
|
+
attr_reader :config
|
45
|
+
attr_reader :transport
|
46
|
+
|
47
|
+
def config?
|
48
|
+
!config.nil?
|
28
49
|
end
|
29
50
|
|
30
51
|
def client_streaming?
|
31
52
|
@method_presenter.client_streaming?
|
32
53
|
end
|
33
54
|
|
34
|
-
def
|
35
|
-
@method_presenter.
|
55
|
+
def server_streaming?
|
56
|
+
@method_presenter.server_streaming?
|
36
57
|
end
|
37
58
|
|
38
59
|
def response_kind
|
@@ -48,7 +69,7 @@ module Gapic
|
|
48
69
|
end
|
49
70
|
|
50
71
|
def snippet_file_path
|
51
|
-
"#{@method_presenter.service.service_require.split('/').last}/#{
|
72
|
+
"#{@method_presenter.service.service_require.split('/').last}/#{snippet_method_name}.rb"
|
52
73
|
end
|
53
74
|
|
54
75
|
def require_path
|
@@ -56,7 +77,13 @@ module Gapic
|
|
56
77
|
end
|
57
78
|
|
58
79
|
def client_type
|
59
|
-
@method_presenter.service
|
80
|
+
service = @method_presenter.service
|
81
|
+
service = service.rest if transport == :rest
|
82
|
+
service.client_name_full.sub(/^::/, "")
|
83
|
+
end
|
84
|
+
|
85
|
+
def service_name_short
|
86
|
+
@method_presenter.service.module_name
|
60
87
|
end
|
61
88
|
|
62
89
|
def request_type
|
@@ -82,22 +109,184 @@ module Gapic
|
|
82
109
|
@method_presenter.name
|
83
110
|
end
|
84
111
|
|
112
|
+
def snippet_method_name
|
113
|
+
config? ? "#{method_name}_#{snake_config_id}" : method_name
|
114
|
+
end
|
115
|
+
|
116
|
+
def snippet_name
|
117
|
+
@config&.metadata&.snippet_name ||
|
118
|
+
"Snippet for the #{method_name} call in the #{service_name_short} service"
|
119
|
+
end
|
120
|
+
|
121
|
+
def description
|
122
|
+
@config&.metadata&.snippet_description ||
|
123
|
+
"This is an auto-generated example demonstrating basic usage of #{client_type}##{method_name}."
|
124
|
+
end
|
125
|
+
|
126
|
+
def disclaimer
|
127
|
+
"This snippet has been automatically generated and should be regarded as a code template only. " \
|
128
|
+
"It will require modifications to work:\n" \
|
129
|
+
"- It may require correct/in-range values for request initialization.\n" \
|
130
|
+
"- It may require specifying regional endpoints when creating the service client as shown in https://cloud.google.com/ruby/docs/reference."
|
131
|
+
end
|
132
|
+
|
133
|
+
def snippet_method_parameters
|
134
|
+
@snippet_method_parameters ||= begin
|
135
|
+
parameters_proto = @config&.signature&.parameters
|
136
|
+
if parameters_proto
|
137
|
+
parameters_json = @config.json_representation["signature"]["parameters"]
|
138
|
+
parameters_proto.each_with_index.map do |param_proto, index|
|
139
|
+
ParameterPresenter.new param_proto, parameters_json[index]
|
140
|
+
end
|
141
|
+
else
|
142
|
+
[]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def snippet_method_parameters_render
|
148
|
+
return "" if snippet_method_parameters.empty?
|
149
|
+
names = snippet_method_parameters.map { |param| "#{param.name}:" }.join ", "
|
150
|
+
"(#{names})"
|
151
|
+
end
|
152
|
+
|
153
|
+
attr_reader :client_initialization
|
154
|
+
attr_reader :request_initialization
|
155
|
+
attr_reader :client_call
|
156
|
+
attr_reader :response_handling
|
157
|
+
attr_reader :final_statements
|
158
|
+
|
85
159
|
def region_tag
|
86
160
|
gem_presenter = @method_presenter.service.gem
|
87
|
-
|
161
|
+
prefix = gem_presenter.doc_tag_prefix
|
88
162
|
names = gem_presenter.name.split "-"
|
89
163
|
final_name = names.pop
|
90
164
|
if final_name =~ /^v\d/
|
91
165
|
api_version = final_name
|
92
|
-
|
166
|
+
prefix ||= names.last
|
93
167
|
else
|
94
|
-
|
168
|
+
prefix ||= final_name
|
95
169
|
api_version = "v0"
|
96
170
|
end
|
97
|
-
|
171
|
+
prefix = prefix.downcase.gsub(/[^a-z0-9]/, "")
|
98
172
|
service_name = @method_presenter.service.module_name
|
99
173
|
method_name = @method_presenter.method.name
|
100
|
-
"
|
174
|
+
type = config? ? "config" : "generated"
|
175
|
+
config_id = config? ? "#{@config.metadata.config_id}_" : ""
|
176
|
+
"#{prefix}_#{api_version}_#{type}_#{service_name}_#{method_name}_#{config_id}sync"
|
177
|
+
end
|
178
|
+
|
179
|
+
private
|
180
|
+
|
181
|
+
def analyze_config
|
182
|
+
snippet_proto, snippet_json = snippet_proto_info
|
183
|
+
call_proto, call_json = call_proto_info snippet_proto, snippet_json
|
184
|
+
@client_initialization = build_client_initialization_presenter snippet_proto, snippet_json
|
185
|
+
@request_initialization = build_request_initialization_presenter call_proto, call_json
|
186
|
+
@response_handling = build_response_handling_presenter call_proto, call_json
|
187
|
+
@client_call = build_client_call_presenter call_proto, call_json,
|
188
|
+
@request_initialization.request_name,
|
189
|
+
@response_handling.response_name
|
190
|
+
@final_statements = build_final_statements snippet_proto, snippet_json
|
191
|
+
end
|
192
|
+
|
193
|
+
def snippet_proto_info
|
194
|
+
[@config&.snippet, @config&.json_representation&.fetch("snippet", nil)]
|
195
|
+
end
|
196
|
+
|
197
|
+
def call_proto_info snippet_proto, snippet_json
|
198
|
+
if snippet_proto&.standard
|
199
|
+
[snippet_proto.standard, snippet_json["standard"]]
|
200
|
+
elsif snippet_proto&.paginated
|
201
|
+
[snippet_proto.paginated, snippet_json["paginated"]]
|
202
|
+
elsif snippet_proto&.lro
|
203
|
+
[snippet_proto.lro, snippet_json["lro"]]
|
204
|
+
elsif snippet_proto&.server_streaming
|
205
|
+
[snippet_proto.server_streaming, snippet_json["serverStreaming"]]
|
206
|
+
elsif snippet_proto&.client_streaming
|
207
|
+
[snippet_proto.client_streaming, snippet_json["clientStreaming"]]
|
208
|
+
elsif snippet_proto&.bidi_streaming
|
209
|
+
[snippet_proto.bidi_streaming, snippet_json["bidiStreaming"]]
|
210
|
+
else
|
211
|
+
[nil, nil]
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def build_client_initialization_presenter snippet_proto, snippet_json
|
216
|
+
ClientInitializationPresenter.new snippet_proto&.service_client_initialization,
|
217
|
+
snippet_json&.fetch("serviceClientInitialization", nil),
|
218
|
+
phase1: !config?, client_type: client_type
|
219
|
+
end
|
220
|
+
|
221
|
+
def build_request_initialization_presenter call_proto, call_json
|
222
|
+
phase1 = !config?
|
223
|
+
request_init_proto = call_proto&.request_initialization
|
224
|
+
request_init_json = call_json&.fetch "requestInitialization", nil
|
225
|
+
if client_streaming?
|
226
|
+
request_name = phase1 ? "input" : call_proto.client_stream_name
|
227
|
+
StreamingRequestInitializationPresenter.new request_init_proto, request_init_json,
|
228
|
+
request_name: request_name, request_type: request_type,
|
229
|
+
phase1: phase1
|
230
|
+
else
|
231
|
+
SimpleRequestInitializationPresenter.new request_init_proto, request_init_json,
|
232
|
+
request_type: request_type, phase1: phase1
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def build_response_handling_presenter call_proto, call_json
|
237
|
+
phase1 = !config?
|
238
|
+
case response_kind
|
239
|
+
when :paged
|
240
|
+
PaginatedResponseHandlingPresenter.new call_proto&.paginated_handling,
|
241
|
+
call_json&.fetch("paginatedHandling", nil),
|
242
|
+
paged_response_type: paged_response_type, phase1: phase1
|
243
|
+
when :lro
|
244
|
+
LroResponseHandlingPresenter.new call_proto&.lro_handling,
|
245
|
+
call_json&.fetch("lroHandling", nil),
|
246
|
+
phase1: phase1
|
247
|
+
when :streaming
|
248
|
+
response_name = phase1 ? "output" : call_proto&.server_stream_name
|
249
|
+
response_name = nil if response_name == ""
|
250
|
+
StreamingResponseHandlingPresenter.new call_proto&.response_handling,
|
251
|
+
call_json&.fetch("responseHandling", nil),
|
252
|
+
response_name: response_name, base_response_type: base_response_type,
|
253
|
+
phase1: phase1
|
254
|
+
else
|
255
|
+
SimpleResponseHandlingPresenter.new call_proto&.response_handling,
|
256
|
+
call_json&.fetch("responseHandling", nil),
|
257
|
+
response_type: return_type, phase1: phase1
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def build_client_call_presenter call_proto, call_json, request_name, response_name
|
262
|
+
phase1 = !config?
|
263
|
+
if response_kind == :paged
|
264
|
+
ClientCallPresenter.new call_proto&.paginated_call, call_json&.fetch("paginatedCall", nil),
|
265
|
+
method_name: method_name, request_name: request_name, response_name: response_name,
|
266
|
+
client_streaming: client_streaming?, server_streaming: server_streaming?,
|
267
|
+
phase1: phase1
|
268
|
+
elsif client_streaming? || server_streaming?
|
269
|
+
ClientCallPresenter.new call_proto&.initialization_call, call_json&.fetch("initializationCall", nil),
|
270
|
+
method_name: method_name, request_name: request_name, response_name: response_name,
|
271
|
+
client_streaming: client_streaming?, server_streaming: server_streaming?,
|
272
|
+
phase1: phase1
|
273
|
+
else
|
274
|
+
ClientCallPresenter.new call_proto&.call, call_json&.fetch("call", nil),
|
275
|
+
method_name: method_name, request_name: request_name, response_name: response_name,
|
276
|
+
client_streaming: false, server_streaming: false, phase1: phase1
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def build_final_statements snippet_proto, snippet_json
|
281
|
+
return [] unless snippet_proto&.final_statements
|
282
|
+
snippet_proto.final_statements.each_with_index.map do |statement_proto, index|
|
283
|
+
statement_json = snippet_json["finalStatements"][index]
|
284
|
+
StatementPresenter.new statement_proto, statement_json
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
def snake_config_id
|
289
|
+
ActiveSupport::Inflector.underscore @config.metadata.config_id
|
101
290
|
end
|
102
291
|
end
|
103
292
|
end
|
data/lib/gapic/presenters.rb
CHANGED
@@ -21,12 +21,14 @@ require "gapic/presenters/field_presenter"
|
|
21
21
|
require "gapic/presenters/file_presenter"
|
22
22
|
require "gapic/presenters/gem_presenter"
|
23
23
|
require "gapic/presenters/message_presenter"
|
24
|
+
require "gapic/presenters/method/http_binding_presenter"
|
24
25
|
require "gapic/presenters/method_presenter"
|
25
26
|
require "gapic/presenters/method_rest_presenter"
|
26
27
|
require "gapic/presenters/package_presenter"
|
27
28
|
require "gapic/presenters/resource_presenter"
|
28
29
|
require "gapic/presenters/sample_presenter"
|
29
30
|
require "gapic/presenters/service/lro_client_presenter"
|
31
|
+
require "gapic/presenters/service/mixin_client_presenter"
|
30
32
|
require "gapic/presenters/service_presenter"
|
31
33
|
require "gapic/presenters/grpc_service_config_presenter"
|
32
34
|
require "gapic/presenters/service_rest_presenter"
|
data/lib/gapic/runner.rb
CHANGED
data/lib/gapic/schema/api.rb
CHANGED
@@ -21,6 +21,7 @@ require "gapic/schema/loader"
|
|
21
21
|
require "gapic/schema/request_param_parser"
|
22
22
|
require "gapic/grpc_service_config/parser"
|
23
23
|
require "gapic/schema/service_config_parser"
|
24
|
+
require "gapic/model/api_metadata"
|
24
25
|
|
25
26
|
module Gapic
|
26
27
|
module Schema
|
@@ -42,6 +43,7 @@ module Gapic
|
|
42
43
|
class Api
|
43
44
|
attr_accessor :request
|
44
45
|
attr_accessor :files
|
46
|
+
attr_reader :snippet_configs
|
45
47
|
|
46
48
|
# Initializes an API object with the file descriptors that represent the
|
47
49
|
# API.
|
@@ -65,6 +67,7 @@ module Gapic
|
|
65
67
|
|
66
68
|
parameter_schema ||= Gapic::Generators::DefaultGeneratorParameters.default_schema
|
67
69
|
@protoc_parameters = parse_parameter request.parameter, parameter_schema, error_output
|
70
|
+
@snippet_configs = loader.load_snippet_configs self.configuration[:snippet_configs_path]
|
68
71
|
sanity_checks error_output
|
69
72
|
end
|
70
73
|
|
@@ -92,7 +95,7 @@ module Gapic
|
|
92
95
|
end
|
93
96
|
|
94
97
|
def overrides_of key
|
95
|
-
configuration&.
|
98
|
+
configuration&.dig(:overrides, key) || {}
|
96
99
|
end
|
97
100
|
|
98
101
|
def fix_file_path str
|
@@ -206,6 +209,22 @@ module Gapic
|
|
206
209
|
end
|
207
210
|
end
|
208
211
|
|
212
|
+
# Return all snippet configs for the given method address. Returns the
|
213
|
+
# empty array if there are no snippet configs.
|
214
|
+
# @param address [String] Method address in the form
|
215
|
+
# `proto.package.v1.ServiceName.MethodName`
|
216
|
+
# @return [Array<
|
217
|
+
# Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig>]
|
218
|
+
def snippet_configs_for address
|
219
|
+
address = address.join "." if address.is_a? ::Array
|
220
|
+
@snippet_configs.find_all do |config|
|
221
|
+
rpc = config.rpc
|
222
|
+
rpc.api_version.any? do |vers|
|
223
|
+
address == "#{rpc.proto_package}.#{vers}.#{rpc.service_name}.#{rpc.rpc_name}"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
209
228
|
# Structured Hash representation of the configuration file.
|
210
229
|
# @return [Hash]
|
211
230
|
# A Hash of the configuration values.
|
@@ -250,6 +269,16 @@ module Gapic
|
|
250
269
|
configuration[:transports].include? "grpc"
|
251
270
|
end
|
252
271
|
|
272
|
+
##
|
273
|
+
# The default transport, used when choosing which client class a docs
|
274
|
+
# xref should link to.
|
275
|
+
#
|
276
|
+
# @return [:grpc,:rest]
|
277
|
+
#
|
278
|
+
def default_transport
|
279
|
+
generate_grpc_clients? ? :grpc : :rest
|
280
|
+
end
|
281
|
+
|
253
282
|
# Whether to generate standalone snippets
|
254
283
|
def generate_standalone_snippets?
|
255
284
|
configuration.fetch :generate_standalone_snippets, true
|
@@ -314,6 +343,20 @@ module Gapic
|
|
314
343
|
@service_config ||= Gapic::Schema::ServiceConfigParser.parse_service_yaml service_config_raw
|
315
344
|
end
|
316
345
|
|
346
|
+
# Parsed API Metadata model
|
347
|
+
# @return [Gapic::Model::ApiMetadata]
|
348
|
+
def api_metadata
|
349
|
+
@api_metadata ||= begin
|
350
|
+
api_metadata = Gapic::Model::ApiMetadata.new
|
351
|
+
Gapic::Schema::ServiceConfigParser.parse_api_metadata service_config_raw, api_metadata
|
352
|
+
api_metadata.standardize_names!
|
353
|
+
api_metadata.standardize_title! gem_name: configuration.fetch(:gem, nil)&.fetch(:name, "")
|
354
|
+
api_metadata.standardize_descriptions!
|
355
|
+
api_metadata.standardize_auto_populated_fields! @service_config
|
356
|
+
api_metadata
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
317
360
|
# Get a resource given its type string
|
318
361
|
def lookup_resource_type resource_type
|
319
362
|
@resource_types[resource_type]
|
@@ -387,6 +430,9 @@ module Gapic
|
|
387
430
|
output.puts "WARNING: configured common service #{k} is not present" unless addrs.include? k
|
388
431
|
output.puts "WARNING: configured common service delegate #{v} is not present" unless addrs.include? v
|
389
432
|
end
|
433
|
+
# TODO: Sanity check snippet configs to ensure that the type of call
|
434
|
+
# (e.g. streaming, lro, etc) matches the rpc type. Warn and remove any
|
435
|
+
# noncomplying snippet configs to prevent crashes when rendering.
|
390
436
|
end
|
391
437
|
|
392
438
|
# Does a pre-analysis of all resources defined in the job. This has
|
@@ -411,7 +457,7 @@ module Gapic
|
|
411
457
|
file.resources.each { |resource| populate_resource_lookups resource, types, patterns }
|
412
458
|
file.messages.each { |message| populate_message_resource_lookups message, types, patterns }
|
413
459
|
end
|
414
|
-
types.
|
460
|
+
types.each_value do |resource|
|
415
461
|
parents = resource.parsed_parent_patterns
|
416
462
|
.flat_map { |pat| Array(patterns[pat]) }
|
417
463
|
.uniq
|
@@ -481,7 +527,7 @@ module Gapic
|
|
481
527
|
|
482
528
|
def str_to_key str
|
483
529
|
str = str.to_s
|
484
|
-
str.start_with?(":") ? str[1
|
530
|
+
str.start_with?(":") ? str[1..].to_sym : str
|
485
531
|
end
|
486
532
|
|
487
533
|
def key_to_str key
|
data/lib/gapic/schema/loader.rb
CHANGED
@@ -14,14 +14,15 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
require "google/api/
|
18
|
-
require "google/api/
|
19
|
-
require "google/api/
|
20
|
-
require "google/api/
|
21
|
-
require "google/api/
|
22
|
-
require "google/cloud/
|
23
|
-
require "google/longrunning/
|
24
|
-
require "google/protobuf/
|
17
|
+
require "google/api/annotations_pb"
|
18
|
+
require "google/api/client_pb"
|
19
|
+
require "google/api/field_behavior_pb"
|
20
|
+
require "google/api/resource_pb"
|
21
|
+
require "google/api/routing_pb"
|
22
|
+
require "google/cloud/extended_operations_pb"
|
23
|
+
require "google/longrunning/operations_pb"
|
24
|
+
require "google/protobuf/descriptor_pb"
|
25
|
+
require "gapic/schema/proto_tools"
|
25
26
|
require "gapic/schema/wrappers"
|
26
27
|
|
27
28
|
module Gapic
|
@@ -34,6 +35,14 @@ module Gapic
|
|
34
35
|
@prior_enums = []
|
35
36
|
end
|
36
37
|
|
38
|
+
FILE_EXTENSION_NAMES = {
|
39
|
+
"google.api.resource_definition" => [1053, ::Google::Api::ResourceDescriptor, :repeated]
|
40
|
+
}.freeze
|
41
|
+
|
42
|
+
MESSAGE_EXTENSION_NAMES = {
|
43
|
+
"google.api.resource" => [1053, ::Google::Api::ResourceDescriptor]
|
44
|
+
}.freeze
|
45
|
+
|
37
46
|
# Loads a file.
|
38
47
|
#
|
39
48
|
# @param file_descriptor [Google::Protobuf::FileDescriptorProto] the
|
@@ -48,27 +57,28 @@ module Gapic
|
|
48
57
|
registry = {}
|
49
58
|
|
50
59
|
# Load the docs.
|
51
|
-
location = file_descriptor.source_code_info.location
|
52
|
-
docs = location.each_with_object({}) { |l, ans| ans[l.path] = l }
|
60
|
+
location = file_descriptor.source_code_info.location || []
|
61
|
+
docs = location.each_with_object({}) { |l, ans| ans[l.path.to_a] = l }
|
53
62
|
|
54
63
|
# Load top-level enums.
|
55
|
-
enums = file_descriptor.enum_type.each_with_index.map do |e, i|
|
64
|
+
enums = (file_descriptor.enum_type || []).each_with_index.map do |e, i|
|
56
65
|
load_enum registry, e, address, docs, [5, i]
|
57
66
|
end
|
58
67
|
|
59
68
|
# Load top-level messages.
|
60
|
-
messages = file_descriptor.message_type.each_with_index.map do |m, i|
|
69
|
+
messages = (file_descriptor.message_type || []).each_with_index.map do |m, i|
|
61
70
|
load_message registry, m, address, docs, [4, i]
|
62
71
|
end
|
63
72
|
messages.each(&method(:update_fields!))
|
64
73
|
|
65
74
|
# Load services.
|
66
|
-
services = file_descriptor.service.each_with_index.map do |s, i|
|
75
|
+
services = (file_descriptor.service || []).each_with_index.map do |s, i|
|
67
76
|
load_service registry, s, address, docs, [6, i]
|
68
77
|
end
|
69
78
|
|
70
79
|
# Load top-level resources
|
71
|
-
|
80
|
+
option_extensions = ProtoTools.parse_options_extensions file_descriptor.options, FILE_EXTENSION_NAMES
|
81
|
+
resource_descriptors = option_extensions["google.api.resource_definition"]
|
72
82
|
resources = Array(resource_descriptors).map { |descriptor| Resource.new descriptor }
|
73
83
|
|
74
84
|
# Construct and return the file.
|
@@ -76,6 +86,25 @@ module Gapic
|
|
76
86
|
services, resources, file_to_generate, registry
|
77
87
|
end
|
78
88
|
|
89
|
+
##
|
90
|
+
# Loads snippet configs from the given directory
|
91
|
+
#
|
92
|
+
# @param path [String] Directory to search for snippet config files
|
93
|
+
# @return [Array<
|
94
|
+
# Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig>]
|
95
|
+
#
|
96
|
+
def load_snippet_configs path
|
97
|
+
return [] unless path
|
98
|
+
Dir.chdir path do
|
99
|
+
Dir.glob("**/*.json").map do |file_path|
|
100
|
+
json = JSON.load_file file_path
|
101
|
+
proto = Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::SnippetConfig.new underscore_keys json
|
102
|
+
proto.json_representation = json
|
103
|
+
proto
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
79
108
|
# Updates the fields of a message and it's nested messages.
|
80
109
|
#
|
81
110
|
# @param message [Message] the message whose fields and nested messages
|
@@ -105,7 +134,7 @@ module Gapic
|
|
105
134
|
address = address.clone << descriptor.name
|
106
135
|
|
107
136
|
# Load Enum Values
|
108
|
-
values = descriptor.value.each_with_index.map do |value, i|
|
137
|
+
values = (descriptor.value || []).each_with_index.map do |value, i|
|
109
138
|
load_enum_value registry, value, address, docs, path + [2, i]
|
110
139
|
end
|
111
140
|
|
@@ -152,20 +181,22 @@ module Gapic
|
|
152
181
|
address = address.clone << descriptor.name
|
153
182
|
|
154
183
|
# Load Children
|
155
|
-
nested_messages = descriptor.nested_type.each_with_index.map do |m, i|
|
184
|
+
nested_messages = (descriptor.nested_type || []).each_with_index.map do |m, i|
|
156
185
|
load_message registry, m, address, docs, path + [3, i]
|
157
186
|
end
|
158
|
-
nested_enums = descriptor.enum_type.each_with_index.map do |e, i|
|
187
|
+
nested_enums = (descriptor.enum_type || []).each_with_index.map do |e, i|
|
159
188
|
load_enum registry, e, address, docs, path + [4, i]
|
160
189
|
end
|
161
|
-
fields = descriptor.field.each_with_index.map do |f, i|
|
190
|
+
fields = (descriptor.field || []).each_with_index.map do |f, i|
|
162
191
|
load_field registry, f, address, docs, path + [2, i]
|
163
192
|
end
|
164
|
-
|
193
|
+
fields.each { |field| field.populate_oneof_siblings! fields }
|
194
|
+
extensions = (descriptor.extension || []).each_with_index.map do |e, i|
|
165
195
|
load_field registry, e, address, docs, path + [6, i]
|
166
196
|
end
|
167
197
|
|
168
|
-
|
198
|
+
option_extensions = ProtoTools.parse_options_extensions descriptor.options, MESSAGE_EXTENSION_NAMES
|
199
|
+
resource_descriptor = option_extensions["google.api.resource"]
|
169
200
|
resource = resource_descriptor ? Resource.new(resource_descriptor) : nil
|
170
201
|
|
171
202
|
# Construct, cache, and return.
|
@@ -212,7 +243,7 @@ module Gapic
|
|
212
243
|
address = address.clone << descriptor.name
|
213
244
|
|
214
245
|
# Load children
|
215
|
-
methods = descriptor.method.each_with_index.map do |m, i|
|
246
|
+
methods = (descriptor["method"] || descriptor.method || []).each_with_index.map do |m, i|
|
216
247
|
load_method registry, m, address, docs, path + [2, i]
|
217
248
|
end
|
218
249
|
|
@@ -262,6 +293,20 @@ module Gapic
|
|
262
293
|
|
263
294
|
private
|
264
295
|
|
296
|
+
##
|
297
|
+
# Transforms all keys in the given hash to snake case.
|
298
|
+
#
|
299
|
+
def underscore_keys input
|
300
|
+
case input
|
301
|
+
when Hash
|
302
|
+
input.to_h { |key, value| [ActiveSupport::Inflector.underscore(key), underscore_keys(value)] }
|
303
|
+
when Array
|
304
|
+
input.map { |elem| underscore_keys elem }
|
305
|
+
else
|
306
|
+
input
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
265
310
|
def add_to_registry registry, address, obj
|
266
311
|
registry[address.join(".")] = obj
|
267
312
|
obj
|
@@ -269,7 +314,7 @@ module Gapic
|
|
269
314
|
|
270
315
|
def cached_obj collection, type_name
|
271
316
|
# Remove leading dot.
|
272
|
-
type_name = type_name[1
|
317
|
+
type_name = type_name[1..] if type_name && type_name[0] == "."
|
273
318
|
|
274
319
|
# Create an address from the type & check cache.
|
275
320
|
collection.find { |m| m.address == type_name.split(".") }
|
@@ -43,10 +43,10 @@ module Gapic
|
|
43
43
|
# @param map_params_list [Array<String>]
|
44
44
|
# @return Gapic::Schema::ParameterSchema
|
45
45
|
def self.create bool_params_list: [], string_params_list: [], array_params_list: [], map_params_list: []
|
46
|
-
bool_params = bool_params_list.
|
47
|
-
string_params = string_params_list.
|
48
|
-
array_params = array_params_list.
|
49
|
-
map_params = map_params_list.
|
46
|
+
bool_params = bool_params_list.to_h { |val| [val, val] }
|
47
|
+
string_params = string_params_list.to_h { |val| [val, val] }
|
48
|
+
array_params = array_params_list.to_h { |val| [val, val] }
|
49
|
+
map_params = map_params_list.to_h { |val| [val, val] }
|
50
50
|
|
51
51
|
ParameterSchema.new bool_params, string_params, array_params, map_params
|
52
52
|
end
|
@@ -58,16 +58,16 @@ module Gapic
|
|
58
58
|
# @param map_aliases [Hash{String => String}]
|
59
59
|
# @return Gapic::Schema::ParameterSchema
|
60
60
|
def extend_with_aliases bool_aliases: {}, string_aliases: {}, array_aliases: {}, map_aliases: {}
|
61
|
-
bool_params = @bool_params
|
61
|
+
bool_params = @bool_params.dup
|
62
62
|
bool_aliases.each { |param_alias, param| bool_params[param_alias] = param if bool_params.key? param }
|
63
63
|
|
64
|
-
string_params = @string_params
|
64
|
+
string_params = @string_params.dup
|
65
65
|
string_aliases.each { |param_alias, param| string_params[param_alias] = param if string_params.key? param }
|
66
66
|
|
67
|
-
array_params = @array_params
|
67
|
+
array_params = @array_params.dup
|
68
68
|
array_aliases.each { |param_alias, param| array_params[param_alias] = param if array_params.key? param }
|
69
69
|
|
70
|
-
map_params = @map_params
|
70
|
+
map_params = @map_params.dup
|
71
71
|
map_aliases.each { |param_alias, param| map_params[param_alias] = param if map_params.key? param }
|
72
72
|
|
73
73
|
ParameterSchema.new bool_params, string_params, array_params, map_params
|