gapic-generator 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +13 -0
  3. data/CHANGELOG.md +30 -0
  4. data/CODE_OF_CONDUCT.md +43 -0
  5. data/CONTRIBUTING.md +28 -0
  6. data/LICENSE +202 -0
  7. data/README.md +72 -0
  8. data/bin/gapic-generator +103 -0
  9. data/bin/protoc-gen-ruby_gapic +33 -0
  10. data/default-rubocop.yml +10 -0
  11. data/gem_templates/binary.erb +20 -0
  12. data/gem_templates/dockerfile.erb +39 -0
  13. data/gem_templates/entrypoint.erb +24 -0
  14. data/gem_templates/gapic_sh.erb +97 -0
  15. data/gem_templates/gemfile.erb +8 -0
  16. data/gem_templates/gemspec.erb +36 -0
  17. data/gem_templates/generator.erb +37 -0
  18. data/gem_templates/gitignore.erb +10 -0
  19. data/gem_templates/rakefile.erb +29 -0
  20. data/gem_templates/readme.erb +69 -0
  21. data/gem_templates/rubocop.erb +16 -0
  22. data/gem_templates/shared/_header.erb +4 -0
  23. data/gem_templates/shared/_license.erb +13 -0
  24. data/gem_templates/shared/_warning.erb +1 -0
  25. data/gem_templates/test_generator.erb +13 -0
  26. data/gem_templates/test_helper.erb +25 -0
  27. data/gem_templates/version.erb +10 -0
  28. data/lib/gapic/file_formatter.rb +62 -0
  29. data/lib/gapic/gem_builder.rb +98 -0
  30. data/lib/gapic/generator.rb +30 -0
  31. data/lib/gapic/generator/version.rb +21 -0
  32. data/lib/gapic/generators/base_generator.rb +91 -0
  33. data/lib/gapic/generators/default_generator.rb +101 -0
  34. data/lib/gapic/grpc_service_config/method_config.rb +49 -0
  35. data/lib/gapic/grpc_service_config/parser.rb +218 -0
  36. data/lib/gapic/grpc_service_config/parsing_error.rb +25 -0
  37. data/lib/gapic/grpc_service_config/retry_policy.rb +51 -0
  38. data/lib/gapic/grpc_service_config/service_config.rb +42 -0
  39. data/lib/gapic/path_template.rb +35 -0
  40. data/lib/gapic/path_template/parser.rb +83 -0
  41. data/lib/gapic/path_template/segment.rb +67 -0
  42. data/lib/gapic/resource_lookup.rb +91 -0
  43. data/lib/gapic/runner.rb +76 -0
  44. data/lib/gapic/schema.rb +17 -0
  45. data/lib/gapic/schema/api.rb +264 -0
  46. data/lib/gapic/schema/loader.rb +269 -0
  47. data/lib/gapic/schema/wrappers.rb +718 -0
  48. data/lib/google/api/annotations.pb.rb +39 -0
  49. data/lib/google/api/client.pb.rb +43 -0
  50. data/lib/google/api/field_behavior.pb.rb +51 -0
  51. data/lib/google/api/http.pb.rb +60 -0
  52. data/lib/google/api/resource.pb.rb +80 -0
  53. data/lib/google/longrunning/operations.pb.rb +115 -0
  54. data/lib/google/protobuf/any.pb.rb +40 -0
  55. data/lib/google/protobuf/compiler/plugin.pb.rb +72 -0
  56. data/lib/google/protobuf/descriptor.pb.rb +359 -0
  57. data/lib/google/protobuf/empty.pb.rb +36 -0
  58. data/lib/google/rpc/status.pb.rb +46 -0
  59. data/templates/default/gem/_version.erb +2 -0
  60. data/templates/default/gem/changelog.erb +3 -0
  61. data/templates/default/gem/gemfile.erb +4 -0
  62. data/templates/default/gem/gemspec.erb +37 -0
  63. data/templates/default/gem/gitignore.erb +18 -0
  64. data/templates/default/gem/license.erb +22 -0
  65. data/templates/default/gem/rakefile.erb +27 -0
  66. data/templates/default/gem/readme.erb +24 -0
  67. data/templates/default/gem/rubocop.erb +59 -0
  68. data/templates/default/gem/version.erb +6 -0
  69. data/templates/default/gem/yardopts.erb +12 -0
  70. data/templates/default/helpers/default_helper.rb +45 -0
  71. data/templates/default/helpers/filepath_helper.rb +38 -0
  72. data/templates/default/helpers/namespace_helper.rb +44 -0
  73. data/templates/default/helpers/presenter_helper.rb +24 -0
  74. data/templates/default/helpers/presenters/enum_presenter.rb +35 -0
  75. data/templates/default/helpers/presenters/enum_value_presenter.rb +33 -0
  76. data/templates/default/helpers/presenters/field_presenter.rb +146 -0
  77. data/templates/default/helpers/presenters/file_presenter.rb +53 -0
  78. data/templates/default/helpers/presenters/gem_presenter.rb +140 -0
  79. data/templates/default/helpers/presenters/message_presenter.rb +66 -0
  80. data/templates/default/helpers/presenters/method_presenter.rb +293 -0
  81. data/templates/default/helpers/presenters/package_presenter.rb +65 -0
  82. data/templates/default/helpers/presenters/resource_presenter.rb +92 -0
  83. data/templates/default/helpers/presenters/sample_presenter.rb +74 -0
  84. data/templates/default/helpers/presenters/service_presenter.rb +276 -0
  85. data/templates/default/layouts/_ruby.erb +20 -0
  86. data/templates/default/package.erb +6 -0
  87. data/templates/default/proto_docs/_enum.erb +13 -0
  88. data/templates/default/proto_docs/_message.erb +23 -0
  89. data/templates/default/proto_docs/_proto_file.erb +9 -0
  90. data/templates/default/proto_docs/proto_file.erb +6 -0
  91. data/templates/default/proto_docs/readme.erb +5 -0
  92. data/templates/default/service.erb +8 -0
  93. data/templates/default/service/client.erb +6 -0
  94. data/templates/default/service/client/_client.erb +137 -0
  95. data/templates/default/service/client/_config.erb +155 -0
  96. data/templates/default/service/client/_credentials.erb +21 -0
  97. data/templates/default/service/client/_helpers.erb +9 -0
  98. data/templates/default/service/client/_operations.erb +88 -0
  99. data/templates/default/service/client/_paths.erb +8 -0
  100. data/templates/default/service/client/_requires.erb +1 -0
  101. data/templates/default/service/client/_resource.erb +6 -0
  102. data/templates/default/service/client/_self_configure.erb +9 -0
  103. data/templates/default/service/client/_self_configure_defaults.erb +22 -0
  104. data/templates/default/service/client/_self_configure_retry_policy.erb +15 -0
  105. data/templates/default/service/client/method/_def.erb +21 -0
  106. data/templates/default/service/client/method/def/_options_defaults.erb +29 -0
  107. data/templates/default/service/client/method/def/_request.erb +6 -0
  108. data/templates/default/service/client/method/def/_request_normal.erb +4 -0
  109. data/templates/default/service/client/method/def/_request_streaming.erb +9 -0
  110. data/templates/default/service/client/method/def/_rescue.erb +1 -0
  111. data/templates/default/service/client/method/def/_response.erb +6 -0
  112. data/templates/default/service/client/method/def/_response_normal.erb +8 -0
  113. data/templates/default/service/client/method/def/_response_paged.erb +9 -0
  114. data/templates/default/service/client/method/docs/_error.erb +2 -0
  115. data/templates/default/service/client/method/docs/_request.erb +6 -0
  116. data/templates/default/service/client/method/docs/_request_field.erb +7 -0
  117. data/templates/default/service/client/method/docs/_request_normal.erb +20 -0
  118. data/templates/default/service/client/method/docs/_request_streaming.erb +5 -0
  119. data/templates/default/service/client/method/docs/_response.erb +6 -0
  120. data/templates/default/service/client/method/docs/_sample.erb +20 -0
  121. data/templates/default/service/client/method/docs/_sample_response.erb +24 -0
  122. data/templates/default/service/client/method/docs/_samples.erb +6 -0
  123. data/templates/default/service/client/method/docs/request_field/_arg.erb +10 -0
  124. data/templates/default/service/client/method/docs/request_field/_hash.erb +19 -0
  125. data/templates/default/service/client/method/docs/sample_response/_comment.erb +5 -0
  126. data/templates/default/service/client/method/docs/sample_response/_define.erb +2 -0
  127. data/templates/default/service/client/method/docs/sample_response/_loop.erb +12 -0
  128. data/templates/default/service/client/method/docs/sample_response/_print.erb +2 -0
  129. data/templates/default/service/client/method/docs/sample_response/_write_file.erb +2 -0
  130. data/templates/default/service/client/resource/_def.erb +6 -0
  131. data/templates/default/service/client/resource/_doc.erb +8 -0
  132. data/templates/default/service/client/resource/_multi.erb +28 -0
  133. data/templates/default/service/client/resource/_single.erb +11 -0
  134. data/templates/default/service/credentials.erb +6 -0
  135. data/templates/default/service/operations.erb +6 -0
  136. data/templates/default/service/paths.erb +6 -0
  137. data/templates/default/service/test/client.erb +24 -0
  138. data/templates/default/service/test/client_operations.erb +24 -0
  139. data/templates/default/service/test/method/_assert_response.erb +11 -0
  140. data/templates/default/service/test/method/_bidi.erb +100 -0
  141. data/templates/default/service/test/method/_client.erb +84 -0
  142. data/templates/default/service/test/method/_normal.erb +69 -0
  143. data/templates/default/service/test/method/_server.erb +85 -0
  144. data/templates/default/service/test/method/_setup.erb +21 -0
  145. data/templates/default/service/test/smoke.erb +12 -0
  146. data/templates/default/shared/_header.erb +4 -0
  147. data/templates/default/shared/_license.erb +21 -0
  148. data/templates/default/shared/_warning.erb +1 -0
  149. metadata +350 -0
@@ -0,0 +1,8 @@
1
+ <%- assert_locals service -%>
2
+ # Path helper methods for the <%= service.name %> API.
3
+ module Paths
4
+ <%- service.references.each do |resource| -%>
5
+ <%= indent render(partial: "service/client/resource", locals: { resource: resource }), 2 %>
6
+
7
+ <%- end %>
8
+ end
@@ -0,0 +1 @@
1
+ <%- assert_locals service -%>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals resource -%>
2
+ <%- if resource.patterns.count == 1 -%>
3
+ <%= render partial: "service/client/resource/single", locals: { resource: resource } %>
4
+ <%- else -%>
5
+ <%= render partial: "service/client/resource/multi", locals: { resource: resource } %>
6
+ <%- end -%>
@@ -0,0 +1,9 @@
1
+ <%- assert_locals service -%>
2
+ <%- method_service ||= service -%>
3
+ @configure ||= begin
4
+ default_config = <%= service.client_name %>::Configuration.new
5
+ <%= render partial: "service/client/self_configure_defaults", locals: {service: service} %>
6
+ default_config
7
+ end
8
+ yield @configure if block_given?
9
+ @configure
@@ -0,0 +1,22 @@
1
+ <%- assert_locals service -%>
2
+ <%- method_service ||= service -%>
3
+ <%- if service.grpc_service_config && !service.grpc_service_config.empty? -%>
4
+
5
+ <%- if service.grpc_service_config.timeout_seconds -%>
6
+ default_config.timeout = <%= service.grpc_service_config.timeout_seconds %>
7
+ <%- end -%>
8
+ <%- if service.grpc_service_config.retry_policy -%>
9
+ default_config.retry_policy = <%= indent_tail render(partial: "service/client/self_configure_retry_policy", locals: { retry_policy: service.grpc_service_config.retry_policy }), 2 %>
10
+ <%- end -%>
11
+ <%- end -%>
12
+ <%- method_service.methods.each do |method| -%>
13
+ <%- if method.grpc_service_config && !method.grpc_service_config.empty? -%>
14
+
15
+ <%- if method.grpc_service_config.timeout_seconds -%>
16
+ default_config.rpcs.<%= method.name %>.timeout = <%= method.grpc_service_config.timeout_seconds %>
17
+ <%- end -%>
18
+ <%- if method.grpc_service_config.retry_policy -%>
19
+ default_config.rpcs.<%= method.name %>.retry_policy =<%= indent_tail render(partial: "service/client/self_configure_retry_policy", locals: { retry_policy: method.grpc_service_config.retry_policy }), 2 %>
20
+ <%- end -%>
21
+ <%- end -%>
22
+ <%- end -%>
@@ -0,0 +1,15 @@
1
+ <%- assert_locals retry_policy -%>
2
+ {
3
+ <%- if retry_policy.initial_delay_seconds -%>
4
+ initial_delay: <%= retry_policy.initial_delay_seconds %>,
5
+ <%- end -%>
6
+ <%- if retry_policy.max_delay_seconds -%>
7
+ max_delay: <%= retry_policy.max_delay_seconds %>,
8
+ <%- end -%>
9
+ <%- if retry_policy.multiplier -%>
10
+ multiplier: <%= retry_policy.multiplier %>,
11
+ <%- end-%>
12
+ <%- if retry_policy.status_codes -%>
13
+ retry_codes: <%= retry_policy.status_codes %>
14
+ <%- end -%>
15
+ }
@@ -0,0 +1,21 @@
1
+ <%- assert_locals method -%>
2
+ ##
3
+ <%- if method.doc_description -%>
4
+ <%= indent method.doc_description, "# " %>
5
+ #
6
+ <%- end -%>
7
+ <%= render partial: "service/client/method/docs/request", locals: { method: method } -%>
8
+ #
9
+ <%= render partial: "service/client/method/docs/response", locals: { method: method } -%>
10
+ #
11
+ <%= render partial: "service/client/method/docs/error", locals: { method: method } -%>
12
+ #
13
+ <%= render partial: "service/client/method/docs/samples", locals: { method: method } -%>
14
+ def <%= method.name %> request, options = nil
15
+ <%= indent render(partial: "service/client/method/def/request", locals: { method: method }), 2 %>
16
+
17
+ <%= indent render(partial: "service/client/method/def/options_defaults", locals: { method: method }), 2 %>
18
+
19
+ <%= indent render(partial: "service/client/method/def/response", locals: { method: method }), 2 %>
20
+ <%= render partial: "service/client/method/def/rescue", locals: { method: method } -%>
21
+ end
@@ -0,0 +1,29 @@
1
+ <%- assert_locals method -%>
2
+ # Converts hash and nil to an options object
3
+ options = Gapic::CallOptions.new options.to_h if options.respond_to? :to_h
4
+
5
+ # Customize the options with defaults
6
+ metadata = @config.rpcs.<%= method.name %>.metadata.to_h
7
+
8
+ # Set x-goog-api-client and x-goog-user-project headers
9
+ metadata[:"x-goog-api-client"] ||= Gapic::Headers.x_goog_api_client \
10
+ lib_name: @config.lib_name, lib_version: @config.lib_version,
11
+ gapic_version: ::<%= method.service.gem.version_name_full %>
12
+ metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id
13
+ <%- if method.routing_params? && !method.client_streaming? -%>
14
+
15
+ header_params = {
16
+ <%- method.routing_params.each_with_index do |routing_param, index| -%>
17
+ <%- comma = index == method.routing_params.count - 1 ? "" : "," -%>
18
+ "<%= routing_param %>" => request.<%= routing_param %><%= comma %>
19
+ <%- end -%>
20
+ }
21
+ request_params_header = header_params.map { |k, v| "#{k}=#{v}" }.join("&")
22
+ metadata[:"x-goog-request-params"] ||= request_params_header
23
+ <%- end -%>
24
+
25
+ options.apply_defaults timeout: @config.rpcs.<%= method.name %>.timeout,
26
+ metadata: metadata,
27
+ retry_policy: @config.rpcs.<%= method.name %>.retry_policy
28
+ options.apply_defaults metadata: @config.metadata,
29
+ retry_policy: @config.retry_policy
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ <%- if method.client_streaming? -%>
3
+ <%= render partial: "service/client/method/def/request_streaming", locals: { method: method } -%>
4
+ <%- else -%>
5
+ <%= render partial: "service/client/method/def/request_normal", locals: { method: method } -%>
6
+ <%- end -%>
@@ -0,0 +1,4 @@
1
+ <%- assert_locals method -%>
2
+ raise ArgumentError, "request must be provided" if request.nil?
3
+
4
+ request = Gapic::Protobuf.coerce request, to: <%= method.request_type %>
@@ -0,0 +1,9 @@
1
+ <%- assert_locals method -%>
2
+ unless request.is_a? Enumerable
3
+ raise ArgumentError, "request must be an Enumerable" unless request.respond_to? :to_enum
4
+ request = request.to_enum
5
+ end
6
+
7
+ request = request.lazy.map do |req|
8
+ Gapic::Protobuf.coerce req, to: <%= method.request_type %>
9
+ end
@@ -0,0 +1 @@
1
+ <%- assert_locals method -%>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ <%- if method.paged? -%>
3
+ <%= render partial: "service/client/method/def/response_paged", locals: { method: method } -%>
4
+ <%- else -%>
5
+ <%= render partial: "service/client/method/def/response_normal", locals: { method: method } -%>
6
+ <%- end -%>
@@ -0,0 +1,8 @@
1
+ <%- assert_locals method -%>
2
+ @<%= method.service.stub_name %>.call_rpc :<%= method.name %>, request, options: options do |response, operation|
3
+ <%- if method.lro? -%>
4
+ response = Gapic::Operation.new response, <%= method.service.lro_client_ivar %>
5
+ <%- end -%>
6
+ yield response, operation if block_given?
7
+ return response
8
+ end
@@ -0,0 +1,9 @@
1
+ <%- assert_locals method -%>
2
+ @<%= method.service.stub_name %>.call_rpc :<%= method.name %>, request, options: options do |response, operation|
3
+ <%- if method.lro? -%>
4
+ wrap_lro_operation = ->(op_response) { Gapic::Operation.new op_response, <%= method.service.lro_client_ivar %> }
5
+ <%- end -%>
6
+ response = Gapic::PagedEnumerable.new @<%= method.service.stub_name %>, :<%= method.name %>, request, response, operation, options<%- if method.lro? -%>, format_resource: wrap_lro_operation<%- end -%>
7
+ yield response, operation if block_given?
8
+ return response
9
+ end
@@ -0,0 +1,2 @@
1
+ <%- assert_locals method -%>
2
+ # @raise [GRPC::BadStatus] if the RPC is aborted.
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ <%- if method.client_streaming? -%>
3
+ <%= render partial: "service/client/method/docs/request_streaming", locals: { method: method } -%>
4
+ <%- else -%>
5
+ <%= render partial: "service/client/method/docs/request_normal", locals: { method: method } -%>
6
+ <%- end -%>
@@ -0,0 +1,7 @@
1
+ <%- assert_locals field -%>
2
+ <%- _key, value = field -%>
3
+ <%- if value.is_a? Hash -%>
4
+ <%= render partial: "service/client/method/docs/request_field/hash", locals: { field: field, comma: false } -%>
5
+ <%- else -%>
6
+ <%= render partial: "service/client/method/docs/request_field/arg", locals: { field: field } -%>
7
+ <%- end -%>
@@ -0,0 +1,20 @@
1
+ <%- assert_locals method -%>
2
+ # @overload <%= method.name %>(request, options = nil)
3
+ # @param request [<%= method.request_type %> | Hash]
4
+ <%- if method.doc_description -%>
5
+ <%= indent method.doc_description, "# " %>
6
+ <%- end -%>
7
+ # @param options [Gapic::CallOptions, Hash]
8
+ # Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
9
+ <%-if method.arguments.any?-%>
10
+ #
11
+ <%- arg_list = method.arguments.map { |arg| "#{arg.name}: nil"}.join ", " -%>
12
+ # @overload <%= method.name %>(<%= arg_list %>)
13
+ <%- method.arguments.each do |arg| -%>
14
+ # @param <%= arg.name %> [<%= arg.doc_types %>]
15
+ <%- if arg.doc_description -%>
16
+ <%= indent arg.doc_description, "# " %>
17
+ <%- end -%>
18
+ <%- end -%>
19
+ <%- end -%>
20
+ #
@@ -0,0 +1,5 @@
1
+ <%- assert_locals method -%>
2
+ # @param request [Gapic::StreamInput, Enumerable<<%= method.request_type %> | Hash>]
3
+ # An enumerable of {<%= method.request_type %>} instances.
4
+ # @param options [Gapic::CallOptions, Hash]
5
+ # Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ # @yield [response, operation] Access the result along with the RPC operation
3
+ # @yieldparam response [<%= method.doc_response_type %>]
4
+ # @yieldparam operation [GRPC::ActiveCall::Operation]
5
+ #
6
+ # @return [<%= method.doc_response_type %>]
@@ -0,0 +1,20 @@
1
+ <%- assert_locals method, sample -%>
2
+ require "<%= method.service.service_require %>"
3
+
4
+ client = <%= method.service.client_name_full %>.new
5
+ <%- if sample.input_parameters.any? -%>
6
+
7
+ <%- end -%>
8
+ <%- sample.input_parameters.each do |field| -%>
9
+ <%- if field.value_is_file -%>
10
+ <%= field.input_parameter %> = File.read <%= field.value %>
11
+ <%- else -%>
12
+ <%= field.input_parameter %> = <%= field.value %>
13
+ <%- end -%>
14
+ <%- end -%>
15
+
16
+ <%- sample.fields.each do |field| -%>
17
+ <%= render partial: "service/client/method/docs/request_field", locals: { field: field } -%>
18
+ <%- end -%>
19
+
20
+ <%= render partial: "service/client/method/docs/sample_response", locals: { method: method, sample: sample } -%>
@@ -0,0 +1,24 @@
1
+ <%- assert_locals method, sample -%>
2
+ <%- if method.server_streaming? || method.paged? -%>
3
+ responses = client.<%= method.name %> <%= sample.kwargs %>
4
+
5
+ responses.each do |response|
6
+ <%- if method.lro? -%>
7
+ # Wait until the long running operation is done
8
+ response.wait_until_done!
9
+ <%- end -%>
10
+ <%- sample.response_raw.each do |resp_hash| -%>
11
+ <%= indent render(partial: "service/client/method/docs/sample_response/#{resp_hash.keys.first}", locals: { values: resp_hash.values.first }), " " %>
12
+ <%- end -%>
13
+ end
14
+ <%- else -%>
15
+ response = client.<%= method.name %> <%= sample.kwargs %>
16
+ <%- if method.lro? -%>
17
+
18
+ # Wait until the long running operation is done
19
+ response.wait_until_done!
20
+ <%- end -%>
21
+ <%- sample.response_raw.each do |resp_hash| -%>
22
+ <%= render partial: "service/client/method/docs/sample_response/#{resp_hash.keys.first}", locals: { values: resp_hash.values.first } -%>
23
+ <%- end -%>
24
+ <%- end -%>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ <%- method.samples.each do |sample| -%>
3
+ # @example <%= sample.description %>
4
+ <%= indent render(partial: "service/client/method/docs/sample", locals: { method: method, sample: sample }), "# " %>
5
+ #
6
+ <%- end -%>
@@ -0,0 +1,10 @@
1
+ <%- assert_locals field -%>
2
+ <%- key, value = field -%>
3
+ <%- if value.comment -%>
4
+ <%= indent value.comment, "# " %>
5
+ <%- end -%>
6
+ <%- if value.value_is_file && !value.input_parameter -%>
7
+ <%= key %> = File.read <%= value.value %>
8
+ <%- else -%>
9
+ <%= key %> = <%= value.input_parameter || value.value %>
10
+ <%- end -%>
@@ -0,0 +1,19 @@
1
+ <%- assert_locals field, comma -%>
2
+ <%- key, value = field -%>
3
+ <%- if value.is_a? Hash -%>
4
+ <%= key %> = {
5
+ <%- value.each_with_index do |nested_field, index| -%>
6
+ <%- nested_comma = index != value.count - 1 -%>
7
+ <%= indent render(partial: "service/client/method/docs/request_field/hash", locals: { field: nested_field, comma: nested_comma }), " " %>
8
+ <%- end -%>
9
+ }<%= "," if comma %>
10
+ <%- else -%>
11
+ <%- if value.comment -%>
12
+ <%= indent value.comment, "# " %>
13
+ <%- end -%>
14
+ <%- if value.value_is_file && !value.input_parameter -%>
15
+ <%= key %>: File.read(<%= value.value %>)<%= "," if comma %>
16
+ <%- else -%>
17
+ <%= key %>: <%= value.input_parameter || value.value %><%= "," if comma %>
18
+ <%- end -%>
19
+ <%- end -%>
@@ -0,0 +1,5 @@
1
+ <%- assert_locals values -%>
2
+
3
+ <%- Array(values).each do |comment| -%>
4
+ # <%= comment %>
5
+ <%- end -%>
@@ -0,0 +1,2 @@
1
+ <%- assert_locals values -%>
2
+ <%= values.gsub "$resp", "response" %>
@@ -0,0 +1,12 @@
1
+ <%- assert_locals values -%>
2
+ <%- if values["map"] -%>
3
+ <%= values["map"].gsub("$resp", "response") %>.each do |<%= values["key"] %>, <%= values["value"] %>|
4
+ <%- elsif values["variable"] -%>
5
+ <%= values["collection"].gsub("$resp", "response") %>.each do |<%= values["variable"] %>|
6
+ <%- else -%>
7
+ <%= values["collection"].gsub("$resp", "response") %>.each do |<%= values["key"] %>, <%= values["value"] %>|
8
+ <%- end -%>
9
+ <%- values["body"].each do |b| -%>
10
+ <%= indent render(partial: "service/client/method/docs/sample_response/#{b.keys.first}", locals: { values: b.values.first }), " " %>
11
+ <%- end -%>
12
+ end
@@ -0,0 +1,2 @@
1
+ <%- assert_locals values -%>
2
+ puts "<%= values[0].gsub("%s", "\#{%s}") % values[1..-1].map { |value| value.gsub("$resp", "response") } %>"
@@ -0,0 +1,2 @@
1
+ <%- assert_locals values -%>
2
+ File.write <%= values["file_name"].inspect %>, <%= values["contents"].gsub("$resp", "response") %>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals pattern -%>
2
+ <%- pattern.arguments[0...-1].each do |arg| -%>
3
+ raise ArgumentError, "<%= arg %> cannot contain /" if <%= arg %>.to_s.include? "/"
4
+ <%- end -%>
5
+
6
+ "<%= pattern.path_string %>"
@@ -0,0 +1,8 @@
1
+ <%- assert_locals pattern -%>
2
+ The resource will be in the following format:
3
+
4
+ `<%= pattern.template %>`
5
+
6
+ <%- pattern.arguments.each do |arg| -%>
7
+ @param <%= arg %> [String]
8
+ <%- end -%>
@@ -0,0 +1,28 @@
1
+ <%- assert_locals resource -%>
2
+ ##
3
+ # Create a fully-qualified <%= resource.name %> resource string.
4
+ #
5
+ <%- resource.patterns.each do |pattern| -%>
6
+ <%- args_doc_sig = pattern.arguments.map { |arg| "#{arg}:" }.join ", " -%>
7
+ # @overload <%= resource.path_helper %>(<%= args_doc_sig %>)
8
+ <%= indent render(partial: "service/client/resource/doc", locals: { pattern: pattern }), "# " %>
9
+ #
10
+ <%- end -%>
11
+ # @return [String]
12
+ def <%= resource.path_helper %> **args
13
+ resources = {
14
+ <%- last_pattern_index = resource.patterns.count - 1 -%>
15
+ <%- resource.patterns.each_with_index do |pattern, index| -%>
16
+ <%- comma = last_pattern_index == index ? "" : "," -%>
17
+ <%- args_key = pattern.arguments.sort.join(":").inspect -%>
18
+ <%- args_sig = pattern.arguments.map { |arg| "#{arg}:" }.join ", " -%>
19
+ <%= args_key %> => (proc do |<%= args_sig %>|
20
+ <%= indent render(partial: "service/client/resource/def", locals: { pattern: pattern }), 6 %>
21
+ end)<%= comma %>
22
+ <%- end -%>
23
+ }
24
+
25
+ resource = resources[args.keys.sort.join(":")]
26
+ raise ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
27
+ resource.call(**args)
28
+ end
@@ -0,0 +1,11 @@
1
+ <%- assert_locals resource -%>
2
+ ##
3
+ # Create a fully-qualified <%= resource.name %> resource string.
4
+ #
5
+ <%= indent render(partial: "service/client/resource/doc", locals: { pattern: resource.patterns.first }), "# " %>
6
+ #
7
+ # @return [String]
8
+ <%- args = resource.patterns.first.arguments.map { |arg| "#{arg}:" }.join ", " -%>
9
+ def <%= resource.path_helper %> <%= args %>
10
+ <%= indent render(partial: "service/client/resource/def", locals: { pattern: resource.patterns.first }), 2 %>
11
+ end
@@ -0,0 +1,6 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "service/client/credentials",
3
+ layout: "layouts/ruby",
4
+ locals: { service: service,
5
+ namespace: service.proto_service_name_full }
6
+ %>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "service/client/operations",
3
+ layout: "layouts/ruby",
4
+ locals: { service: service,
5
+ namespace: service.proto_service_name_full }
6
+ %>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "service/client/paths",
3
+ layout: "layouts/ruby",
4
+ locals: { service: service,
5
+ namespace: service.proto_service_name_full }
6
+ %>
@@ -0,0 +1,24 @@
1
+ <%- assert_locals service -%>
2
+ # frozen_string_literal: true
3
+
4
+ <%= render partial: "shared/license" %>
5
+ require "simplecov"
6
+ require "minitest/autorun"
7
+
8
+ require "gapic/grpc/service_stub"
9
+
10
+ require "<%= service.proto_service_require %>"
11
+ require "<%= service.proto_services_require %>"
12
+ require "<%= service.service_require %>"
13
+
14
+ class <%= service.client_name_full %>Test < Minitest::Test
15
+ <%= indent render(partial: "service/test/method/setup"), 2 %>
16
+
17
+ <% service.methods.each do |method| %>
18
+ <%= indent render(partial: "service/test/method/#{method.kind}",
19
+ locals: { method: method }), 2 %>
20
+ <% if method != service.methods.last %>
21
+
22
+ <% end %>
23
+ <% end %>
24
+ end