gapic-generator 0.9.1 → 0.10.0

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/lib/gapic/generator/version.rb +1 -1
  4. data/lib/gapic/generators/default_generator.rb +1 -1
  5. data/lib/gapic/generators/default_generator_parameters.rb +3 -1
  6. data/lib/gapic/presenters/gem_presenter.rb +12 -1
  7. data/lib/gapic/presenters/method/rest_pagination_info.rb +246 -0
  8. data/lib/gapic/presenters/method_presenter.rb +13 -2
  9. data/lib/gapic/presenters/method_rest_presenter.rb +60 -2
  10. data/lib/gapic/presenters/resource_presenter.rb +8 -0
  11. data/lib/gapic/presenters/service_presenter.rb +51 -0
  12. data/lib/gapic/presenters/service_rest_presenter.rb +42 -16
  13. data/lib/gapic/presenters/snippet_presenter.rb +1 -1
  14. data/lib/gapic/schema/api.rb +6 -1
  15. data/lib/gapic/schema/wrappers.rb +26 -0
  16. data/templates/default/lib/rest/_rest.erb +0 -2
  17. data/templates/default/service/client/_client.erb +17 -19
  18. data/templates/default/service/client/_config.erb +13 -14
  19. data/templates/default/service/client/_paths.erb +1 -1
  20. data/templates/default/service/client/method/_def.erb +2 -0
  21. data/templates/default/service/client/method/def/_options_defaults.erb +3 -1
  22. data/templates/default/service/client/method/docs/_deprecated.erb +5 -0
  23. data/templates/default/service/client/method/docs/_snippets.erb +6 -0
  24. data/templates/default/service/rest/client/_client.erb +14 -23
  25. data/templates/default/service/rest/client/_config.erb +48 -0
  26. data/templates/default/service/rest/client/method/_def.erb +1 -1
  27. data/templates/default/service/rest/client/method/def/_options_defaults.erb +5 -2
  28. data/templates/default/service/rest/client/method/def/_response.erb +6 -0
  29. data/templates/default/service/rest/client/method/def/_response_normal.erb +4 -15
  30. data/templates/default/service/rest/client/method/def/_response_paged.erb +7 -0
  31. data/templates/default/service/rest/client/method/docs/_result.erb +3 -3
  32. data/templates/default/service/rest/service_stub.erb +6 -0
  33. data/templates/default/service/rest/service_stub/_service_stub.erb +25 -0
  34. data/templates/default/service/rest/{grpc_transcoding/method → service_stub/grpc_transcoding_method}/_def.erb +4 -1
  35. data/templates/default/service/rest/{grpc_transcoding/method → service_stub/grpc_transcoding_method}/def/_query_string_param.erb +0 -0
  36. data/templates/default/service/rest/service_stub/method/_def.erb +20 -0
  37. data/templates/default/service/rest/service_stub/method/def/_request.erb +2 -0
  38. data/templates/default/service/rest/service_stub/method/def/_response.erb +17 -0
  39. data/templates/default/service/rest/test/client.erb +1 -1
  40. data/templates/default/service/test/client_paths.erb +1 -1
  41. metadata +19 -11
  42. data/templates/default/service/rest/client/_requires.erb +0 -1
  43. data/templates/default/service/rest/grpc_transcoding/_grpc_transcoding.erb +0 -9
@@ -51,6 +51,9 @@
51
51
  # @!attribute [rw] timeout
52
52
  # The call timeout in seconds.
53
53
  # @return [::Numeric]
54
+ # @!attribute [rw] metadata
55
+ # Additional REST headers to be sent with the call.
56
+ # @return [::Hash{::Symbol=>::String}]
54
57
  #
55
58
  class Configuration
56
59
  extend ::Gapic::Config
@@ -64,6 +67,7 @@ class Configuration
64
67
  config_attr :lib_name, nil, ::String, nil
65
68
  config_attr :lib_version, nil, ::String, nil
66
69
  config_attr :timeout, nil, ::Numeric, nil
70
+ config_attr :metadata, nil, ::Hash, nil
67
71
 
68
72
  # @private
69
73
  def initialize parent_config = nil
@@ -71,4 +75,48 @@ class Configuration
71
75
 
72
76
  yield self if block_given?
73
77
  end
78
+
79
+ ##
80
+ # Configurations for individual RPCs
81
+ # @return [Rpcs]
82
+ #
83
+ def rpcs
84
+ @rpcs ||= begin
85
+ parent_rpcs = nil
86
+ parent_rpcs = @parent_config.rpcs if defined?(@parent_config) && @parent_config.respond_to?(:rpcs)
87
+ Rpcs.new parent_rpcs
88
+ end
89
+ end
90
+
91
+ ##
92
+ # Configuration RPC class for the <%= service.name %> API.
93
+ #
94
+ # Includes fields providing the configuration for each RPC in this service.
95
+ # Each configuration object is of type `Gapic::Config::Method` and includes
96
+ # the following configuration fields:
97
+ #
98
+ # * `timeout` (*type:* `Numeric`) - The call timeout in seconds
99
+ #
100
+ # there is one other field (`retry_policy`) that can be set
101
+ # but is currently not supported for REST Gapic libraries.
102
+ #
103
+ class Rpcs
104
+ <%- method_service.methods.each do |method| -%>
105
+ ##
106
+ # RPC-specific configuration for `<%= method.name %>`
107
+ # @return [::Gapic::Config::Method]
108
+ #
109
+ attr_reader :<%= method.name %>
110
+ <%- end -%>
111
+
112
+ # @private
113
+ def initialize parent_rpcs = nil
114
+ <%- method_service.methods.each do |method| -%>
115
+ <%= method.name %>_config = parent_rpcs.<%= method.name %> if parent_rpcs.respond_to? :<%= method.name %>
116
+ @<%= method.name %> = ::Gapic::Config::Method.new <%= method.name %>_config
117
+ <%- end -%>
118
+
119
+ yield self if block_given?
120
+ end
121
+ end
74
122
  end
@@ -13,6 +13,6 @@ def <%= method.name %> request, options = nil
13
13
 
14
14
  <%= indent render(partial: "service/rest/client/method/def/options_defaults", locals: { method: method }), 2 %>
15
15
 
16
- <%= indent render(partial: "service/rest/client/method/def/response_normal", locals: { method: method }), 2 %>
16
+ <%= indent render(partial: "service/rest/client/method/def/response", locals: { method: method }), 2 %>
17
17
  <%= render partial: "service/rest/client/method/def/rescue", locals: { method: method } -%>
18
18
  end
@@ -3,7 +3,7 @@
3
3
  options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h
4
4
 
5
5
  # Customize the options with defaults
6
- call_metadata = {}
6
+ call_metadata = @config.rpcs.<%= method.name %>.metadata.to_h
7
7
 
8
8
  # Set x-goog-api-client header
9
9
  call_metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
@@ -11,5 +11,8 @@ call_metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
11
11
  gapic_version: ::<%= method.service.gem.version_name_full %>,
12
12
  transports_version_send: [:rest]
13
13
 
14
- options.apply_defaults timeout: @config.timeout,
14
+ options.apply_defaults timeout: @config.rpcs.<%= method.name %>.timeout,
15
15
  metadata: call_metadata
16
+
17
+ options.apply_defaults timeout: @config.timeout,
18
+ metadata: @config.metadata
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ <%- if method.rest.paged? -%>
3
+ <%= render partial: "service/rest/client/method/def/response_paged", locals: { method: method } -%>
4
+ <%- else -%>
5
+ <%= render partial: "service/rest/client/method/def/response_normal", locals: { method: method } -%>
6
+ <%- end -%>
@@ -1,17 +1,6 @@
1
1
  <%- assert_locals method -%>
2
2
 
3
- uri, <%= method.rest.body_var_name %>, <%= method.rest.query_string_params_var_name %> = <%= method.rest.transcoding_helper_name %> request
4
- response = @client_stub.make_<%= method.rest.verb %>_request(
5
- uri: uri,
6
- <%- if method.rest.body? -%>
7
- body: body,
8
- <%- end -%>
9
- <%- if method.rest.query_string_params? -%>
10
- params: query_string_params,
11
- <%- end -%>
12
- options: options
13
- )
14
- result = <%= method.return_type %>.decode_json response.body, ignore_unknown_fields: true
15
-
16
- yield result, response if block_given?
17
- result
3
+ @<%= method.service.stub_name %>.<%= method.name %> request, options do |result, response|
4
+ yield result, response if block_given?
5
+ return result
6
+ end
@@ -0,0 +1,7 @@
1
+ <%- assert_locals method -%>
2
+
3
+ @<%= method.service.stub_name %>.<%= method.name %> request, options do |result, response|
4
+ result = ::Gapic::Rest::PagedEnumerable.new @<%= method.service.stub_name %>, :<%= method.name %>, "<%= method.rest.pagination.response_repeated_field_name %>", request, result, options
5
+ yield result, response if block_given?
6
+ return result
7
+ end
@@ -1,6 +1,6 @@
1
1
  <%- assert_locals method -%>
2
- # @yield [result, env] Access the result along with the Faraday environment object
3
- # @yieldparam result [<%= method.doc_response_type %>]
2
+ # @yield [result, response] Access the result along with the Faraday response object
3
+ # @yieldparam result [<%= method.rest.doc_response_type %>]
4
4
  # @yieldparam response [::Faraday::Response]
5
5
  #
6
- # @return [<%= method.doc_response_type %>]
6
+ # @return [<%= method.rest.doc_response_type %>]
@@ -0,0 +1,6 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "service/rest/service_stub/service_stub",
3
+ layout: "layouts/ruby",
4
+ locals: { service: service,
5
+ namespace: service.rest.service_name_full }
6
+ %>
@@ -0,0 +1,25 @@
1
+ <%- assert_locals service -%>
2
+ <% @requires = capture do %>
3
+ require "<%= service.proto_service_require %>"
4
+ <% end %>
5
+ ##
6
+ # REST service stub for the <%= service.name %> service.
7
+ # service stub contains baseline method implementations
8
+ # including transcoding, making the REST call and deserialing the response
9
+ #
10
+ class <%= service.rest.service_stub_name %>
11
+ def initialize endpoint:, credentials:
12
+ # These require statements are intentionally placed here to initialize
13
+ # the REST modules only when it's required.
14
+ require "gapic/rest"
15
+
16
+ @client_stub = ::Gapic::Rest::ClientStub.new endpoint: endpoint, credentials: credentials
17
+ end
18
+
19
+ <%- service.methods.each do |method| -%>
20
+
21
+ <%= indent_tail render(partial: "service/rest/service_stub/method/def", locals: { method: method }), 2 %>
22
+
23
+ <%= indent_tail render(partial: "service/rest/service_stub/grpc_transcoding_method/def", locals: { method: method }), 2 %>
24
+ <%- end %>
25
+ end
@@ -1,4 +1,7 @@
1
1
  <%- assert_locals method -%>
2
+ ##
3
+ # GRPC transcoding helper method for the <%= method.name %> REST call
4
+ #
2
5
  # @param request_pb [<%= method.request_type %>]
3
6
  # A request object representing the call parameters. Required.
4
7
  # @return [Array(String, [String, nil], Hash{String => String})]
@@ -13,7 +16,7 @@ def <%= method.rest.transcoding_helper_name %> request_pb
13
16
  query_string_params = {}
14
17
  <%- if method.rest.query_string_params? -%>
15
18
  <%- method.rest.query_string_params.each do |field| -%>
16
- <%= render partial: "service/rest/grpc_transcoding/method/def/query_string_param", locals: { field: field } -%>
19
+ <%= render partial: "service/rest/service_stub/grpc_transcoding_method/def/query_string_param", locals: { field: field } -%>
17
20
  <%- end -%>
18
21
  <%- end -%>
19
22
 
@@ -0,0 +1,20 @@
1
+ <%- assert_locals method -%>
2
+ ##
3
+ # Baseline implementation for the <%= method.name %> REST call
4
+ #
5
+ # @param request_pb [<%= method.rest.request_type %>]
6
+ # A request object representing the call parameters. Required.
7
+ # @param options [::Gapic::CallOptions]
8
+ # Overrides the default settings for this call, e.g, timeout, retries etc. Optional.
9
+ #
10
+ # @yield [result, response] Access the result along with the Faraday response object
11
+ # @yieldparam result [<%= method.rest.return_type %>]
12
+ # @yieldparam response [::Faraday::Response]
13
+ #
14
+ # @return [<%= method.rest.return_type %>]
15
+ # A result object deserialized from the server's reply
16
+ def <%= method.name %> request_pb, options = nil
17
+ <%= indent render(partial: "service/rest/service_stub/method/def/request", locals: { method: method }), 2 %>
18
+
19
+ <%= indent render(partial: "service/rest/service_stub/method/def/response", locals: { method: method }), 2 %>
20
+ end
@@ -0,0 +1,2 @@
1
+ <%- assert_locals method -%>
2
+ raise ::ArgumentError, "request must be provided" if request_pb.nil?
@@ -0,0 +1,17 @@
1
+ <%- assert_locals method -%>
2
+
3
+ uri, <%= method.rest.body_var_name %>, <%= method.rest.query_string_params_var_name %> = <%= method.rest.transcoding_helper_name %> request_pb
4
+ response = @client_stub.make_<%= method.rest.verb %>_request(
5
+ uri: uri,
6
+ <%- if method.rest.body? -%>
7
+ body: body,
8
+ <%- end -%>
9
+ <%- if method.rest.query_string_params? -%>
10
+ params: query_string_params,
11
+ <%- end -%>
12
+ options: options
13
+ )
14
+ result = <%= method.return_type %>.decode_json response.body, ignore_unknown_fields: true
15
+
16
+ yield result, response if block_given?
17
+ result
@@ -1,7 +1,7 @@
1
1
  <%- assert_locals service -%>
2
2
  <%= render partial: "shared/header" %>
3
3
  require "helper"
4
-
4
+ require "gapic/rest"
5
5
  require "<%= service.proto_service_require %>"
6
6
  require "<%= service.service_require %>"
7
7
 
@@ -7,7 +7,7 @@ require "gapic/grpc/service_stub"
7
7
  require "<%= service.service_require %>"
8
8
 
9
9
  class <%= service.client_name_full %>PathsTest < Minitest::Test
10
- <%- service.references.each do |resource| -%>
10
+ <%- service.deduped_references.each do |resource| -%>
11
11
  <%= indent render(partial: "service/test/resource",
12
12
  locals: { resource: resource, service: service }), 2 %>
13
13
 
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gapic-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernest Landrito
8
8
  - Chris Smith
9
9
  - Mike Moore
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-07-08 00:00:00.000000000 Z
13
+ date: 2021-08-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -152,7 +152,7 @@ dependencies:
152
152
  - - "~>"
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0.9'
155
- description:
155
+ description:
156
156
  email:
157
157
  - landrito@google.com
158
158
  - quartzmo@gmail.com
@@ -215,6 +215,7 @@ files:
215
215
  - lib/gapic/presenters/file_presenter.rb
216
216
  - lib/gapic/presenters/gem_presenter.rb
217
217
  - lib/gapic/presenters/message_presenter.rb
218
+ - lib/gapic/presenters/method/rest_pagination_info.rb
218
219
  - lib/gapic/presenters/method_presenter.rb
219
220
  - lib/gapic/presenters/method_rest_presenter.rb
220
221
  - lib/gapic/presenters/package_presenter.rb
@@ -295,6 +296,7 @@ files:
295
296
  - templates/default/service/client/method/def/_response.erb
296
297
  - templates/default/service/client/method/def/_response_normal.erb
297
298
  - templates/default/service/client/method/def/_response_paged.erb
299
+ - templates/default/service/client/method/docs/_deprecated.erb
298
300
  - templates/default/service/client/method/docs/_error.erb
299
301
  - templates/default/service/client/method/docs/_request.erb
300
302
  - templates/default/service/client/method/docs/_request_field.erb
@@ -304,6 +306,7 @@ files:
304
306
  - templates/default/service/client/method/docs/_sample.erb
305
307
  - templates/default/service/client/method/docs/_sample_response.erb
306
308
  - templates/default/service/client/method/docs/_samples.erb
309
+ - templates/default/service/client/method/docs/_snippets.erb
307
310
  - templates/default/service/client/method/docs/request_field/_arg.erb
308
311
  - templates/default/service/client/method/docs/request_field/_hash.erb
309
312
  - templates/default/service/client/method/docs/sample_response/_comment.erb
@@ -322,18 +325,23 @@ files:
322
325
  - templates/default/service/rest/client.erb
323
326
  - templates/default/service/rest/client/_client.erb
324
327
  - templates/default/service/rest/client/_config.erb
325
- - templates/default/service/rest/client/_requires.erb
326
328
  - templates/default/service/rest/client/method/_def.erb
327
329
  - templates/default/service/rest/client/method/def/_options_defaults.erb
328
330
  - templates/default/service/rest/client/method/def/_rescue.erb
331
+ - templates/default/service/rest/client/method/def/_response.erb
329
332
  - templates/default/service/rest/client/method/def/_response_normal.erb
333
+ - templates/default/service/rest/client/method/def/_response_paged.erb
330
334
  - templates/default/service/rest/client/method/docs/_error.erb
331
335
  - templates/default/service/rest/client/method/docs/_request.erb
332
336
  - templates/default/service/rest/client/method/docs/_result.erb
333
337
  - templates/default/service/rest/grpc_transcoding.erb
334
- - templates/default/service/rest/grpc_transcoding/_grpc_transcoding.erb
335
- - templates/default/service/rest/grpc_transcoding/method/_def.erb
336
- - templates/default/service/rest/grpc_transcoding/method/def/_query_string_param.erb
338
+ - templates/default/service/rest/service_stub.erb
339
+ - templates/default/service/rest/service_stub/_service_stub.erb
340
+ - templates/default/service/rest/service_stub/grpc_transcoding_method/_def.erb
341
+ - templates/default/service/rest/service_stub/grpc_transcoding_method/def/_query_string_param.erb
342
+ - templates/default/service/rest/service_stub/method/_def.erb
343
+ - templates/default/service/rest/service_stub/method/def/_request.erb
344
+ - templates/default/service/rest/service_stub/method/def/_response.erb
337
345
  - templates/default/service/rest/test/client.erb
338
346
  - templates/default/service/rest/test/method/_assert_response.erb
339
347
  - templates/default/service/rest/test/method/_configure.erb
@@ -361,7 +369,7 @@ homepage: https://github.com/googleapis/gapic-generator-ruby
361
369
  licenses:
362
370
  - Apache-2.0
363
371
  metadata: {}
364
- post_install_message:
372
+ post_install_message:
365
373
  rdoc_options: []
366
374
  require_paths:
367
375
  - lib
@@ -376,8 +384,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
384
  - !ruby/object:Gem::Version
377
385
  version: '0'
378
386
  requirements: []
379
- rubygems_version: 3.1.6
380
- signing_key:
387
+ rubygems_version: 3.2.22
388
+ signing_key:
381
389
  specification_version: 4
382
390
  summary: An API Client Generator for Ruby in Ruby!
383
391
  test_files: []
@@ -1 +0,0 @@
1
- <%- assert_locals service -%>
@@ -1,9 +0,0 @@
1
- <%- assert_locals service -%>
2
- # GRPC transcoding helper methods for the <%= service.name %> REST API.
3
- module GrpcTranscoding
4
- <%- service.methods.each do |method| -%>
5
-
6
- <%= indent_tail render(partial: "service/rest/grpc_transcoding/method/def", locals: { method: method }), 2 %>
7
- <%- end %>
8
- extend self
9
- end