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
@@ -17,6 +17,7 @@
|
|
17
17
|
require "active_support/inflector"
|
18
18
|
require "gapic/helpers/filepath_helper"
|
19
19
|
require "gapic/helpers/namespace_helper"
|
20
|
+
require "forwardable"
|
20
21
|
|
21
22
|
module Gapic
|
22
23
|
module Presenters
|
@@ -27,6 +28,18 @@ module Gapic
|
|
27
28
|
include Gapic::Helpers::FilepathHelper
|
28
29
|
include Gapic::Helpers::NamespaceHelper
|
29
30
|
|
31
|
+
extend Forwardable
|
32
|
+
def_delegators :@main_service, :name, :helpers_file_name, :is_hosted_mixin?, :is_main_mixin_service?, :mixins?,
|
33
|
+
:mixin_binding_overrides?, :grpc_service_config, :grpc_service_config_presenter, :lro_service,
|
34
|
+
:lro_client_var, :nonstandard_lro_provider?, :credentials_class_xref, :client_name, :module_name,
|
35
|
+
:grpc_full_name, :client_suffix_for_default_transport, :client_endpoint_template
|
36
|
+
|
37
|
+
# The namespace of the service. (not the client)
|
38
|
+
# Intentionally does not include "Rest", since
|
39
|
+
# we do not want Rest service's configuration to
|
40
|
+
# default to GRPC configuration (right now).
|
41
|
+
def_delegators :@main_service, :namespace
|
42
|
+
|
30
43
|
##
|
31
44
|
# @param main_service [Gapic::Presenters::ServicePresenter]
|
32
45
|
# @param api [Gapic::Schema::Api]
|
@@ -34,15 +47,7 @@ module Gapic
|
|
34
47
|
def initialize main_service, api
|
35
48
|
@main_service = main_service
|
36
49
|
@api = api
|
37
|
-
|
38
|
-
|
39
|
-
##
|
40
|
-
# Ruby name of this service
|
41
|
-
#
|
42
|
-
# @return [String]
|
43
|
-
#
|
44
|
-
def name
|
45
|
-
main_service.name
|
50
|
+
@type = "service"
|
46
51
|
end
|
47
52
|
|
48
53
|
##
|
@@ -65,11 +70,12 @@ module Gapic
|
|
65
70
|
|
66
71
|
##
|
67
72
|
# Folder name for this service
|
73
|
+
# This is just "rest" for rest services
|
68
74
|
#
|
69
75
|
# @return [String]
|
70
76
|
#
|
71
77
|
def service_directory_name
|
72
|
-
|
78
|
+
"rest"
|
73
79
|
end
|
74
80
|
|
75
81
|
##
|
@@ -100,13 +106,6 @@ module Gapic
|
|
100
106
|
"#{service_stub_require}.rb"
|
101
107
|
end
|
102
108
|
|
103
|
-
##
|
104
|
-
# @return [String]
|
105
|
-
#
|
106
|
-
def client_name
|
107
|
-
main_service.client_name
|
108
|
-
end
|
109
|
-
|
110
109
|
##
|
111
110
|
# @return [String]
|
112
111
|
#
|
@@ -153,14 +152,7 @@ module Gapic
|
|
153
152
|
# @return [String]
|
154
153
|
#
|
155
154
|
def test_client_file_path
|
156
|
-
main_service.service_file_path.sub ".rb", "
|
157
|
-
end
|
158
|
-
|
159
|
-
##
|
160
|
-
# @return [String]
|
161
|
-
#
|
162
|
-
def credentials_class_xref
|
163
|
-
main_service.credentials_class_xref
|
155
|
+
main_service.service_file_path.sub ".rb", "_rest_test.rb"
|
164
156
|
end
|
165
157
|
|
166
158
|
##
|
@@ -215,13 +207,141 @@ module Gapic
|
|
215
207
|
ruby_file_path @api, "#{service_name_full}::#{nonstandard_lro_name}"
|
216
208
|
end
|
217
209
|
|
210
|
+
##
|
211
|
+
# A presenter for the LRO subclient if needed
|
212
|
+
#
|
213
|
+
# @return [Gapic::Presenters::Service::LroClientPresenter, nil]
|
214
|
+
def lro_client_presenter
|
215
|
+
return nil unless lro?
|
216
|
+
Gapic::Presenters::Service::LroClientPresenter.new service: "google.longrunning.operations",
|
217
|
+
client_class_name: "Operations",
|
218
|
+
client_class_docname: operations_name_full,
|
219
|
+
client_var_name: lro_client_var,
|
220
|
+
require_str: operations_file_path,
|
221
|
+
service_description: "long-running operations"
|
222
|
+
end
|
223
|
+
|
224
|
+
##
|
225
|
+
# Whether an AIP-151 LRO subclient needs to be generated for this service
|
226
|
+
#
|
227
|
+
# @return [Boolean]
|
228
|
+
def lro?
|
229
|
+
methods.find(&:lro?)
|
230
|
+
end
|
231
|
+
|
232
|
+
def operations_name
|
233
|
+
"Operations"
|
234
|
+
end
|
235
|
+
|
236
|
+
def operations_name_full
|
237
|
+
fix_namespace @api, "#{service_name_full}::#{operations_name}"
|
238
|
+
end
|
239
|
+
|
240
|
+
def operations_file_path
|
241
|
+
"#{operations_require}.rb"
|
242
|
+
end
|
243
|
+
|
244
|
+
def operations_file_name
|
245
|
+
operations_file_path.split("/").last
|
246
|
+
end
|
247
|
+
|
248
|
+
def operations_require
|
249
|
+
ruby_file_path @api, "#{service_name_full}::#{operations_name}"
|
250
|
+
end
|
251
|
+
|
252
|
+
def operations_stub_name
|
253
|
+
"OperationsServiceStub"
|
254
|
+
end
|
255
|
+
|
256
|
+
##
|
257
|
+
# The client presenters of the nonstandard LROs that are used by the methods of this service
|
258
|
+
#
|
259
|
+
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter>]
|
260
|
+
def nonstandard_lros
|
261
|
+
return [] unless main_service.nonstandard_lro_consumer?
|
262
|
+
main_service.nonstandard_lros_models.map do |lro|
|
263
|
+
lro_wrapper = @api.lookup lro.service_full_name
|
264
|
+
lro_service = ServicePresenter.new(main_service.gem, @api, lro_wrapper).rest
|
265
|
+
|
266
|
+
service_description = "long-running operations via #{lro_service.name}"
|
267
|
+
client_var_name = ruby_file_path_for_namespace lro_service.name
|
268
|
+
Gapic::Presenters::Service::LroClientPresenter.new service: lro.service_full_name,
|
269
|
+
client_class_name: lro_service.client_name_full,
|
270
|
+
client_class_docname: lro_service.client_name_full,
|
271
|
+
client_var_name: client_var_name,
|
272
|
+
require_str: lro_service.service_require,
|
273
|
+
service_description: service_description,
|
274
|
+
helper_type: lro_service.nonstandard_lro_name_full
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
##
|
279
|
+
# Whether config for this service should include the `bindings_override` field.
|
280
|
+
# This field is needed:
|
281
|
+
# * if a service is a mixin in it's own package, e.g. `google.Cloud.Location`
|
282
|
+
# * if a service hosts a mixin and has bindings overrides for it
|
283
|
+
# but the generated Operations clients should not have it since override for
|
284
|
+
# their bindings are generated instead of set during runtime.
|
285
|
+
#
|
286
|
+
def mixin_should_generate_override_config?
|
287
|
+
(is_main_mixin_service? || main_service.mixin_binding_overrides?) &&
|
288
|
+
main_service.grpc_full_name != "google.longrunning.Operations"
|
289
|
+
end
|
290
|
+
|
291
|
+
##
|
292
|
+
# The client presenters of the mixin services that are used by the methods of this service
|
293
|
+
#
|
294
|
+
# @return [Enumerable<Gapic::Presenters::Service::MixinClientPresenter>]
|
295
|
+
def mixin_presenters
|
296
|
+
return [] unless main_service.mixins?
|
297
|
+
main_service.mixin_presenters.map do |grpc_presenter|
|
298
|
+
model = main_service.mixin_models.find { |mdl| mdl.service == grpc_presenter.service }
|
299
|
+
raise "Mismatch between model and presenters in service #{service_name_full}" unless model
|
300
|
+
|
301
|
+
Gapic::Presenters::Service::MixinClientPresenter.new service: model.service,
|
302
|
+
client_class_name: model.client_class_name_rest,
|
303
|
+
client_class_docname: model.client_class_docname_rest,
|
304
|
+
client_var_name: model.client_var_name,
|
305
|
+
require_str: model.require_str_rest,
|
306
|
+
service_description: model.service_description,
|
307
|
+
bindings_override: grpc_presenter.bindings_override
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
##
|
312
|
+
# Whether there are any subclients to generate with this service.
|
313
|
+
# Subclients are the clients to other services (e.g. an LRO provider service).
|
314
|
+
#
|
315
|
+
# @return [Boolean]
|
316
|
+
def subclients?
|
317
|
+
subclients.any?
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# Subclients for this service
|
322
|
+
# Subclients are the clients to other services (e.g. an LRO provider service).
|
323
|
+
#
|
324
|
+
# The following is typically generated for a subclient:
|
325
|
+
# - a require statement for the subclient's class
|
326
|
+
# - a class-level variable in the host service's client
|
327
|
+
# - a code to initialize this variable with a subclient's class instance in the host service's constructor
|
328
|
+
#
|
329
|
+
# @return [Enumerable<Gapic::Presenters::Service::LroClientPresenter, Gapic::Model::Mixins::Mixin>]
|
330
|
+
def subclients
|
331
|
+
[lro_client_presenter, mixin_presenters, nonstandard_lros].flatten.compact
|
332
|
+
end
|
333
|
+
|
334
|
+
def lro_subclients
|
335
|
+
[lro_client_presenter, nonstandard_lros].flatten.compact
|
336
|
+
end
|
337
|
+
|
218
338
|
##
|
219
339
|
# The method to use for quick start samples. Normally this is simply the
|
220
340
|
# first non-client-streaming method defined, but it can be overridden via
|
221
341
|
# a gem config.
|
222
342
|
#
|
223
343
|
# @return [Gapic::Presenters::MethodRestPresenter] if there is a method
|
224
|
-
#
|
344
|
+
# appropriate for quick start
|
225
345
|
# @return [nil] if there is no method appropriate for quick start
|
226
346
|
#
|
227
347
|
def quick_start_method
|
@@ -229,10 +349,41 @@ module Gapic
|
|
229
349
|
end
|
230
350
|
|
231
351
|
##
|
352
|
+
# Presenters for methods that can be generated in REST clients.
|
353
|
+
#
|
232
354
|
# @return [Enumerable<Gapic::Presenters::MethodPresenter>]
|
233
355
|
#
|
234
356
|
def methods
|
235
|
-
main_service.methods
|
357
|
+
main_service.methods.select(&:can_generate_rest?)
|
358
|
+
end
|
359
|
+
|
360
|
+
##
|
361
|
+
# Require string for the helpers file
|
362
|
+
#
|
363
|
+
# @return [String]
|
364
|
+
#
|
365
|
+
def helpers_require
|
366
|
+
ruby_file_path @api, "#{service_name_full}::Helpers"
|
367
|
+
end
|
368
|
+
|
369
|
+
##
|
370
|
+
# Whether this rest service should send the numeric enums signal
|
371
|
+
# @return [Boolean]
|
372
|
+
#
|
373
|
+
def numeric_enums?
|
374
|
+
main_service.gem.rest_numeric_enums?
|
375
|
+
end
|
376
|
+
|
377
|
+
##
|
378
|
+
# @return [Boolean] Whether the service is marked as deprecated.
|
379
|
+
#
|
380
|
+
def is_deprecated?
|
381
|
+
@main_service.is_deprecated?
|
382
|
+
end
|
383
|
+
|
384
|
+
# @return [String] The api_version for this service, or empty if not defined.
|
385
|
+
def api_version
|
386
|
+
@main_service.api_version.to_s
|
236
387
|
end
|
237
388
|
|
238
389
|
private
|
@@ -241,6 +392,8 @@ module Gapic
|
|
241
392
|
attr_reader :main_service
|
242
393
|
# @return [Gapic::Schema::Api]
|
243
394
|
attr_reader :api
|
395
|
+
# @return [String] String representation of this presenter type.
|
396
|
+
attr_reader :type
|
244
397
|
end
|
245
398
|
end
|
246
399
|
end
|
@@ -0,0 +1,82 @@
|
|
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
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about client call invocation
|
23
|
+
#
|
24
|
+
class ClientCallPresenter
|
25
|
+
##
|
26
|
+
# Create a client call presenter
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientCall]
|
29
|
+
# The protobuf representation
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation
|
32
|
+
# @param method_name [String] The method name
|
33
|
+
# @param request_name [String] The request variable name
|
34
|
+
# @param response_name [String,nil] The response variable name, or nil for no response handling
|
35
|
+
# @param client_streaming [Boolean] True if the call is client streaming
|
36
|
+
# @param server_streaming [Boolean] True if the call is server streaming
|
37
|
+
# @param phase1 [Boolean] True if this is a phase 1 snippet without config
|
38
|
+
#
|
39
|
+
def initialize proto, json,
|
40
|
+
method_name:, request_name:, response_name:, client_streaming:, server_streaming:, phase1:
|
41
|
+
@render_lines = pre_call_lines proto, json, method_name, client_streaming, server_streaming, phase1
|
42
|
+
main_line = "client.#{method_name} #{request_name}"
|
43
|
+
main_line = "#{response_name} = #{main_line}" if response_name
|
44
|
+
@render_lines << main_line
|
45
|
+
@render = @render_lines.join "\n"
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# The lines of rendered code
|
50
|
+
# @return [Array<String>]
|
51
|
+
#
|
52
|
+
attr_reader :render_lines
|
53
|
+
|
54
|
+
##
|
55
|
+
# The rendered code as a single string, possibly with line breaks
|
56
|
+
# @return [String]
|
57
|
+
#
|
58
|
+
attr_reader :render
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def pre_call_lines proto, json, method_name, client_streaming, server_streaming, phase1
|
63
|
+
lines = []
|
64
|
+
if json&.key? "preCall"
|
65
|
+
proto.pre_call.each_with_index do |statement_proto, index|
|
66
|
+
statement = StatementPresenter.new statement_proto, json["preCall"][index]
|
67
|
+
lines += statement.render_lines
|
68
|
+
end
|
69
|
+
elsif phase1
|
70
|
+
lines <<
|
71
|
+
if client_streaming || server_streaming
|
72
|
+
"# Call the #{method_name} method to start streaming."
|
73
|
+
else
|
74
|
+
"# Call the #{method_name} method."
|
75
|
+
end
|
76
|
+
end
|
77
|
+
lines
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,87 @@
|
|
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
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about client object initialization
|
23
|
+
#
|
24
|
+
class ClientInitializationPresenter
|
25
|
+
##
|
26
|
+
# Create an client init presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientInitialization]
|
29
|
+
# The protobuf representation
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation
|
32
|
+
# @param phase1 [Boolean] Whether to inject phase 1 content
|
33
|
+
# @param client_type [String] The fully qualified class name of the client
|
34
|
+
#
|
35
|
+
def initialize proto, json, phase1:, client_type:
|
36
|
+
@render_lines = []
|
37
|
+
if json&.key? "preClientInitialization"
|
38
|
+
proto.pre_client_initialization.each_with_index do |stmt_proto, index|
|
39
|
+
statement = StatementPresenter.new stmt_proto, json["preClientInitialization"][index]
|
40
|
+
@render_lines += statement.render_lines
|
41
|
+
end
|
42
|
+
elsif phase1
|
43
|
+
@render_lines << "# Create a client object. The client can be reused for multiple calls."
|
44
|
+
end
|
45
|
+
@render_lines += build_create_code proto, client_type
|
46
|
+
@render = @render_lines.join "\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# The lines of rendered code
|
51
|
+
# @return [Array<String>]
|
52
|
+
#
|
53
|
+
attr_reader :render_lines
|
54
|
+
|
55
|
+
##
|
56
|
+
# The rendered code as a single string, possibly with line breaks
|
57
|
+
# @return [String]
|
58
|
+
#
|
59
|
+
attr_reader :render
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def build_create_code proto, client_type
|
64
|
+
create_code = "client = #{client_type}.new"
|
65
|
+
if proto&.custom_service_endpoint
|
66
|
+
endpoint = build_endpoint proto.custom_service_endpoint
|
67
|
+
[
|
68
|
+
"#{create_code} do |config|",
|
69
|
+
" config.endpoint = #{endpoint.inspect}",
|
70
|
+
"end"
|
71
|
+
]
|
72
|
+
else
|
73
|
+
[create_code]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def build_endpoint proto
|
78
|
+
init_module = Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Snippet::ClientInitialization
|
79
|
+
schema = proto.schema == init_module::ServiceEndpoint::ServiceEndpointSchema::HTTP ? "http://" : "https://"
|
80
|
+
region = proto.region.to_s.empty? ? "" : "#{proto.region}-"
|
81
|
+
port = proto.port.zero? ? "" : ":#{proto.port}"
|
82
|
+
[schema, region, proto.host, port].join
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,91 @@
|
|
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
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about a declaration
|
23
|
+
#
|
24
|
+
class DeclarationPresenter
|
25
|
+
##
|
26
|
+
# Create a declaration presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Statement::Declaration]
|
29
|
+
# The protobuf representation of the declaration
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the declaration
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@render = @render_lines = @name = @description = @has_value = nil
|
35
|
+
return unless proto && json
|
36
|
+
@name = proto.name
|
37
|
+
@description = proto.description unless proto.description.empty?
|
38
|
+
@render_lines = @description ? ["# #{@description}"] : []
|
39
|
+
expr = ExpressionPresenter.new proto.value, json["value"]
|
40
|
+
@has_value = expr.exist?
|
41
|
+
if @has_value
|
42
|
+
expr_lines = expr.render_lines
|
43
|
+
expr_lines[0] = "#{proto.name} = #{expr_lines.first}"
|
44
|
+
@render_lines += expr_lines
|
45
|
+
end
|
46
|
+
@render = @render_lines.join "\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# The name of the variable being declared
|
51
|
+
# @return [String]
|
52
|
+
#
|
53
|
+
attr_reader :name
|
54
|
+
|
55
|
+
##
|
56
|
+
# The description, or nil if none
|
57
|
+
# @return [String,nil]
|
58
|
+
#
|
59
|
+
attr_reader :description
|
60
|
+
|
61
|
+
##
|
62
|
+
# The lines of rendered code
|
63
|
+
# @return [Array<String>]
|
64
|
+
#
|
65
|
+
attr_reader :render_lines
|
66
|
+
|
67
|
+
##
|
68
|
+
# The rendered code as a single string, possibly with line breaks
|
69
|
+
# @return [String]
|
70
|
+
#
|
71
|
+
attr_reader :render
|
72
|
+
|
73
|
+
##
|
74
|
+
# Whether the declaration could be interpreted.
|
75
|
+
# @return [Boolean]
|
76
|
+
#
|
77
|
+
def exist?
|
78
|
+
!render_lines.nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
# Whether the declaration includes a value.
|
83
|
+
# @return [Boolean]
|
84
|
+
#
|
85
|
+
def value?
|
86
|
+
@has_value
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,135 @@
|
|
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
|
+
|
18
|
+
module Gapic
|
19
|
+
module Presenters
|
20
|
+
class SnippetPresenter
|
21
|
+
##
|
22
|
+
# Presentation information about an expression
|
23
|
+
#
|
24
|
+
class ExpressionPresenter
|
25
|
+
##
|
26
|
+
# Create an expression presenter.
|
27
|
+
#
|
28
|
+
# @param proto [Google::Cloud::Tools::SnippetGen::ConfigLanguage::V1::Expression]
|
29
|
+
# The protobuf representation of the expression
|
30
|
+
# @param json [String]
|
31
|
+
# The JSON representation of the expression
|
32
|
+
#
|
33
|
+
def initialize proto, json
|
34
|
+
@render_lines =
|
35
|
+
if json&.key? "stringValue"
|
36
|
+
render_string proto
|
37
|
+
elsif json&.key? "numberValue"
|
38
|
+
render_number proto
|
39
|
+
elsif json&.key? "booleanValue"
|
40
|
+
render_boolean proto
|
41
|
+
elsif json&.key? "nullValue"
|
42
|
+
["nil"]
|
43
|
+
elsif json&.key? "nameValue"
|
44
|
+
render_name proto.name_value
|
45
|
+
elsif json&.key? "complexValue"
|
46
|
+
render_complex proto.complex_value.properties, json["complexValue"]["properties"]
|
47
|
+
elsif json&.key? "listValue"
|
48
|
+
render_list proto.list_value.values, json["listValue"]["values"]
|
49
|
+
elsif json&.key? "mapValue"
|
50
|
+
render_map proto.map_value, json["mapValue"]
|
51
|
+
end
|
52
|
+
@render = @render_lines&.join " "
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# The lines of rendered code
|
57
|
+
# @return [Array<String>]
|
58
|
+
#
|
59
|
+
attr_reader :render_lines
|
60
|
+
|
61
|
+
##
|
62
|
+
# The rendered code as a single string, possibly with line breaks
|
63
|
+
# @return [String]
|
64
|
+
#
|
65
|
+
attr_reader :render
|
66
|
+
|
67
|
+
##
|
68
|
+
# Whether the expression could be interpreted.
|
69
|
+
# @return [Boolean]
|
70
|
+
#
|
71
|
+
def exist?
|
72
|
+
!render_lines.nil?
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def render_string proto
|
78
|
+
[proto.string_value.inspect]
|
79
|
+
end
|
80
|
+
|
81
|
+
def render_number proto
|
82
|
+
value = proto.number_value
|
83
|
+
value = value.to_i if value == value.to_i
|
84
|
+
[value.inspect]
|
85
|
+
end
|
86
|
+
|
87
|
+
def render_boolean proto
|
88
|
+
[proto.boolean_value.inspect]
|
89
|
+
end
|
90
|
+
|
91
|
+
def render_name proto
|
92
|
+
line = ([proto.name] + Array(proto.path&.to_a)).join "."
|
93
|
+
[line]
|
94
|
+
end
|
95
|
+
|
96
|
+
def render_complex proto, json
|
97
|
+
lines = ["{"]
|
98
|
+
proto.each do |key, value_expr|
|
99
|
+
value_presenter = ExpressionPresenter.new value_expr, json[key]
|
100
|
+
value_lines = value_presenter.render_lines
|
101
|
+
next unless value_lines
|
102
|
+
lines[lines.size - 1] = "#{lines.last}," if lines.size > 1
|
103
|
+
value_lines[0] = "#{key}: #{value_lines.first}"
|
104
|
+
lines += value_lines.map { |line| " #{line}" }
|
105
|
+
end
|
106
|
+
lines + ["}"]
|
107
|
+
end
|
108
|
+
|
109
|
+
def render_list proto, json
|
110
|
+
lines = ["["]
|
111
|
+
proto.each_with_index do |item, index|
|
112
|
+
expr = ExpressionPresenter.new item, json[index]
|
113
|
+
value_lines = expr.render_lines
|
114
|
+
lines[lines.size - 1] = "#{lines.last}," if lines.size > 1
|
115
|
+
lines += value_lines.map { |line| " #{line}" }
|
116
|
+
end
|
117
|
+
lines + ["]"]
|
118
|
+
end
|
119
|
+
|
120
|
+
def render_map proto, json
|
121
|
+
lines = ["{"]
|
122
|
+
proto.keys.zip(proto.values).each_with_index do |(key, value), index|
|
123
|
+
key_lines = ExpressionPresenter.new(key, json["keys"][index]).render_lines
|
124
|
+
value_lines = ExpressionPresenter.new(value, json["values"][index]).render_lines
|
125
|
+
next unless key_lines && value_lines
|
126
|
+
elem_lines = key_lines[0..-2] + ["#{key_lines.last} => #{value_lines.first}"] + value_lines[1..]
|
127
|
+
lines[lines.size - 1] = "#{lines.last}," if lines.size > 1
|
128
|
+
lines += elem_lines.map { |line| " #{line}" }
|
129
|
+
end
|
130
|
+
lines + ["}"]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|