gapic-generator 0.7.2 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -0
  3. data/lib/gapic/generator/version.rb +1 -1
  4. data/lib/gapic/generators/default_generator.rb +18 -5
  5. data/lib/gapic/generators/default_generator_parameters.rb +8 -4
  6. data/lib/gapic/presenters.rb +4 -0
  7. data/lib/gapic/presenters/field_presenter.rb +44 -0
  8. data/lib/gapic/presenters/gem_presenter.rb +55 -10
  9. data/lib/gapic/presenters/method_presenter.rb +40 -16
  10. data/lib/gapic/presenters/method_rest_presenter.rb +194 -0
  11. data/lib/gapic/presenters/package_presenter.rb +18 -0
  12. data/lib/gapic/presenters/service_config_presenter.rb +48 -0
  13. data/lib/gapic/presenters/service_presenter.rb +60 -4
  14. data/lib/gapic/presenters/service_rest_presenter.rb +139 -0
  15. data/lib/gapic/presenters/snippet_presenter.rb +103 -0
  16. data/lib/gapic/runner.rb +2 -1
  17. data/lib/gapic/schema/api.rb +69 -22
  18. data/lib/gapic/schema/request_param_parser.rb +46 -12
  19. data/lib/google/protobuf/any.pb.rb +1 -1
  20. data/lib/google/protobuf/compiler/plugin.pb.rb +9 -6
  21. data/lib/google/protobuf/descriptor.pb.rb +2 -2
  22. data/lib/google/protobuf/empty.pb.rb +1 -1
  23. data/templates/default/gem/readme.erb +3 -3
  24. data/templates/default/lib/_package.erb +11 -1
  25. data/templates/default/lib/_service.erb +31 -1
  26. data/templates/default/lib/rest/_rest.erb +11 -0
  27. data/templates/default/service/client/_client.erb +1 -1
  28. data/templates/default/service/client/_credentials.erb +2 -0
  29. data/templates/default/service/client/_operations.erb +1 -1
  30. data/templates/default/service/client/_self_configure_defaults.erb +2 -2
  31. data/templates/default/service/rest.erb +6 -0
  32. data/templates/default/service/rest/client.erb +6 -0
  33. data/templates/default/service/rest/client/_client.erb +115 -0
  34. data/templates/default/service/rest/client/_config.erb +74 -0
  35. data/templates/default/service/rest/client/_requires.erb +1 -0
  36. data/templates/default/service/rest/client/method/_def.erb +18 -0
  37. data/templates/default/service/rest/client/method/def/_options_defaults.erb +15 -0
  38. data/templates/default/service/rest/client/method/def/_rescue.erb +3 -0
  39. data/templates/default/service/rest/client/method/def/_response_normal.erb +17 -0
  40. data/templates/default/service/rest/client/method/docs/_error.erb +2 -0
  41. data/templates/default/service/rest/client/method/docs/_request.erb +27 -0
  42. data/templates/default/service/rest/client/method/docs/_result.erb +6 -0
  43. data/templates/default/service/rest/grpc_transcoding.erb +6 -0
  44. data/templates/default/service/rest/grpc_transcoding/_grpc_transcoding.erb +9 -0
  45. data/templates/default/service/rest/grpc_transcoding/method/_def.erb +21 -0
  46. data/templates/default/service/rest/grpc_transcoding/method/def/_query_string_param.erb +8 -0
  47. data/templates/default/service/rest/test/client.erb +18 -0
  48. data/templates/default/service/rest/test/method/_assert_response.erb +2 -0
  49. data/templates/default/service/rest/test/method/_configure.erb +19 -0
  50. data/templates/default/service/rest/test/method/_normal.erb +71 -0
  51. data/templates/default/service/rest/test/method/_setup.erb +38 -0
  52. data/templates/default/snippets/gemfile.erb +17 -0
  53. data/templates/default/snippets/snippet/_structure.erb +71 -0
  54. data/templates/default/snippets/standalone.erb +6 -0
  55. metadata +32 -4
  56. data/templates/default/service/client/_self_configure_retry_policy.erb +0 -15
@@ -0,0 +1,6 @@
1
+ <%- assert_locals method -%>
2
+ # @yield [result, env] Access the result along with the Faraday environment object
3
+ # @yieldparam result [<%= method.doc_response_type %>]
4
+ # @yieldparam response [::Faraday::Response]
5
+ #
6
+ # @return [<%= method.doc_response_type %>]
@@ -0,0 +1,6 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "service/rest/grpc_transcoding/grpc_transcoding",
3
+ layout: "layouts/ruby",
4
+ locals: { service: service,
5
+ namespace: service.rest.service_name_full }
6
+ %>
@@ -0,0 +1,9 @@
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
@@ -0,0 +1,21 @@
1
+ <%- assert_locals method -%>
2
+ # @param request_pb [<%= method.request_type %>]
3
+ # A request object representing the call parameters. Required.
4
+ # @return [Array(String, [String, nil], Hash{String => String})]
5
+ # Uri, Body, Query string parameters
6
+ def <%= method.rest.transcoding_helper_name %> request_pb
7
+ uri = "<%= method.rest.uri_interpolated %>"
8
+ <%- if method.rest.body? -%>
9
+ body = <%= method.rest.body_interpolated %>
10
+ <%- else -%>
11
+ body = nil
12
+ <%- end -%>
13
+ query_string_params = {}
14
+ <%- if method.rest.query_string_params? -%>
15
+ <%- method.rest.query_string_params.each do |field| -%>
16
+ <%= render partial: "service/rest/grpc_transcoding/method/def/query_string_param", locals: { field: field } -%>
17
+ <%- end -%>
18
+ <%- end -%>
19
+
20
+ [uri, body, query_string_params]
21
+ end
@@ -0,0 +1,8 @@
1
+ <%- assert_locals field -%>
2
+ <%- field_name_interpolated = "request_pb.#{field.name}" -%>
3
+ <%- has_field_name_interpolated = "request_pb.has_#{field.name}?" -%>
4
+ <%- if field.proto3_optional? -%>
5
+ query_string_params["<%= field.camel_name %>"] = <%= field_name_interpolated %>.to_s if <%= has_field_name_interpolated %>
6
+ <%- else -%>
7
+ query_string_params["<%= field.camel_name %>"] = <%= field_name_interpolated %>.to_s
8
+ <%- end -%>
@@ -0,0 +1,18 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "shared/header" %>
3
+ require "helper"
4
+
5
+ require "<%= service.proto_service_require %>"
6
+ require "<%= service.service_require %>"
7
+
8
+
9
+ class <%= service.client_name_full %>Test < Minitest::Test
10
+ <%= indent render(partial: "service/rest/test/method/setup"), 2 %>
11
+
12
+ <% service.methods.each do |method| %>
13
+ <%= indent render(partial: "service/rest/test/method/#{method.kind}",
14
+ locals: { method: method }), 2 %>
15
+
16
+ <% end %>
17
+ <%= indent render(partial: "service/rest/test/method/configure", locals: { service: service }), 2 %>
18
+ end
@@ -0,0 +1,2 @@
1
+ <%- assert_locals method -%>
2
+ assert_equal http_response, response
@@ -0,0 +1,19 @@
1
+ <%- assert_locals service -%>
2
+ <%- full_client_name = defined?(client_name_full) ? client_name_full : service.rest.client_name_full -%>
3
+ def test_configure
4
+ credentials_token = :dummy_value
5
+
6
+ client = block_config = config = nil
7
+ Gapic::Rest::ClientStub.stub :new, nil do
8
+ client = <%= full_client_name =%>.new do |config|
9
+ config.credentials = credentials_token
10
+ end
11
+ end
12
+
13
+ config = client.configure do |c|
14
+ block_config = c
15
+ end
16
+
17
+ assert_same block_config, config
18
+ assert_kind_of <%= full_client_name %>::Configuration, config
19
+ end
@@ -0,0 +1,71 @@
1
+ <%- assert_locals method -%>
2
+ <%- full_client_name = defined?(client_name_full) ? client_name_full : method.service.rest.client_name_full -%>
3
+ <%- fields = method.fields_with_first_oneof -%>
4
+ def test_<%= method.name %>
5
+ # Create test objects.
6
+ client_result = <%= method.return_type %>.new
7
+ http_response = OpenStruct.new body: client_result.to_json
8
+
9
+ call_options = {}
10
+
11
+ # Create request parameters for a unary method.
12
+ <%- fields.each do |field| -%>
13
+ <%= field.name %> = <%= field.default_value %>
14
+ <%- end -%>
15
+
16
+ <%= method.name %>_client_stub = ClientStub.new http_response do |verb, uri:, body:, params:, options:|
17
+ assert_equal :<%= method.rest.verb %>, verb
18
+
19
+ assert options.metadata.key? :"x-goog-api-client"
20
+ assert options.metadata[:"x-goog-api-client"].include? "rest"
21
+ refute options.metadata[:"x-goog-api-client"].include? "grpc"
22
+
23
+ <%- if method.rest.query_string_params? -%>
24
+ <%- method.rest.query_string_params.each do |field| -%>
25
+ assert params.key? "<%= field.camel_name %>"
26
+ <%- end -%>
27
+ <%- end -%>
28
+ <%- if method.rest.body? %>
29
+ refute_nil body
30
+ <%- else -%>
31
+ assert_nil body
32
+ <%- end -%>
33
+ end
34
+
35
+ Gapic::Rest::ClientStub.stub :new, <%= method.name %>_client_stub do
36
+ # Create client
37
+ client = <%= full_client_name %>.new do |config|
38
+ config.credentials = :dummy_value
39
+ end
40
+
41
+ # Use hash object
42
+ client.<%= method.name %>({ <%= fields.map(&:as_kwarg).join ", " %> }) do |result, response|
43
+ <%= indent_tail render(partial: "service/rest/test/method/assert_response", locals: { method: method }), 6 %>
44
+ end
45
+
46
+ <%- if fields.any? -%>
47
+ # Use named arguments
48
+ client.<%= method.name %> <%= fields.map(&:as_kwarg).join ", " %> do |result, response|
49
+ <%= indent_tail render(partial: "service/rest/test/method/assert_response", locals: { method: method }), 6 %>
50
+ end
51
+
52
+ <%- end -%>
53
+ # Use protobuf object
54
+ client.<%= method.name %> <%= method.request_type %>.new(<%= fields.map(&:as_kwarg).join ", " %>) do |result, response|
55
+ <%= indent_tail render(partial: "service/rest/test/method/assert_response", locals: { method: method }), 6 %>
56
+ end
57
+
58
+ # Use hash object with options
59
+ client.<%= method.name %>({ <%= fields.map(&:as_kwarg).join ", " %> }, call_options) do |result, response|
60
+ <%= indent_tail render(partial: "service/rest/test/method/assert_response", locals: { method: method }), 6 %>
61
+ end
62
+
63
+ # Use protobuf object with options
64
+ client.<%= method.name %>(<%= method.request_type %>.new(<%= fields.map(&:as_kwarg).join ", " %>), call_options) do |result, response|
65
+ <%= indent_tail render(partial: "service/rest/test/method/assert_response", locals: { method: method }), 6 %>
66
+ end
67
+
68
+ # Verify method calls
69
+ assert_equal <%= fields.any? ? 5 : 4 %>, <%= method.name %>_client_stub.call_count
70
+ end
71
+ end
@@ -0,0 +1,38 @@
1
+ class ClientStub
2
+ attr_accessor :call_count, :requests
3
+
4
+ def initialize response, &block
5
+ @response = response
6
+ @block = block
7
+ @call_count = 0
8
+ @requests = []
9
+ end
10
+
11
+ def make_get_request uri:, params: {}, options: {}
12
+ make_http_request :get, uri: uri, body: nil, params: params, options: options
13
+ end
14
+
15
+ def make_delete_request uri:, params: {}, options: {}
16
+ make_http_request :delete, uri: uri, body: nil, params: params, options: options
17
+ end
18
+
19
+ def make_post_request uri:, body: nil, params: {}, options: {}
20
+ make_http_request :post, uri: uri, body: body, params: params, options: options
21
+ end
22
+
23
+ def make_patch_request uri:, body:, params: {}, options: {}
24
+ make_http_request :patch, uri: uri, body: body, params: params, options: options
25
+ end
26
+
27
+ def make_put_request uri:, body:, params: {}, options: {}
28
+ make_http_request :put, uri: uri, body: body, params: params, options: options
29
+ end
30
+
31
+ def make_http_request *args, **kwargs
32
+ @call_count += 1
33
+
34
+ @requests << @block&.call(*args, **kwargs)
35
+
36
+ @response
37
+ end
38
+ end
@@ -0,0 +1,17 @@
1
+ <%- assert_locals gem -%>
2
+ <%= render partial: "shared/header" -%>
3
+
4
+ source "https://rubygems.org"
5
+
6
+ if ENV["GOOGLE_CLOUD_SAMPLES_TEST"] == "master"
7
+ gem "<%= gem.name %>", path: "../"
8
+ else
9
+ gem "<%= gem.name %>"
10
+ end
11
+
12
+ group :test do
13
+ gem "google-style", "~> 1.25.1"
14
+ gem "minitest", "~> 5.14"
15
+ gem "minitest-focus", "~> 1.1"
16
+ gem "minitest-hooks", "~> 1.5"
17
+ end
@@ -0,0 +1,71 @@
1
+ <%- assert_locals snippet -%>
2
+ require "<%= snippet.require_path %>"
3
+
4
+ # Create a client object. The client can be reused for multiple calls.
5
+ client = <%= snippet.client_type %>.new
6
+
7
+ <%- if snippet.bidi_streaming? -%>
8
+ # Create an input stream
9
+ input = Gapic::StreamInput.new
10
+
11
+ # Call the <%= snippet.method_name %> method to start streaming.
12
+ output = client.<%= snippet.method_name %> input
13
+
14
+ # Send requests on the stream. For each request, pass in keyword
15
+ # arguments to set fields. Be sure to close the stream when done.
16
+ input << <%= snippet.request_type %>.new
17
+ input << <%= snippet.request_type %>.new
18
+ input.close
19
+
20
+ # Handle streamed responses. These may be interleaved with inputs.
21
+ # Each response is of type <%= snippet.base_response_type %>.
22
+ output.each do |response|
23
+ p response
24
+ end
25
+ <%- else -%>
26
+ <%- if snippet.client_streaming? -%>
27
+ # Create a stream of requests, as an Enumerator.
28
+ # For each request, pass in keyword arguments to set fields.
29
+ request = [
30
+ <%= snippet.request_type %>.new,
31
+ <%= snippet.request_type %>.new
32
+ ].to_enum
33
+ <%- else -%>
34
+ # Create a request. To set request fields, pass in keyword arguments.
35
+ request = <%= snippet.request_type %>.new
36
+ <%- end -%>
37
+
38
+ # Call the <%= snippet.method_name %> method.
39
+ result = client.<%= snippet.method_name %> request
40
+
41
+ <%- case snippet.response_kind -%>
42
+ <%- when :lro -%>
43
+ # The returned object is of type Gapic::Operation. You can use this
44
+ # object to check the status of an operation, cancel it, or wait
45
+ # for results. Here is how to block until completion:
46
+ result.wait_until_done! timeout: 60
47
+ if result.response?
48
+ p result.response
49
+ else
50
+ puts "Error!"
51
+ end
52
+ <%- when :paged -%>
53
+ # The returned object is of type Gapic::PagedEnumerable. You can
54
+ # iterate over all elements by calling #each, and the enumerable
55
+ # will lazily make API calls to fetch subsequent pages. Other
56
+ # methods are also available for managing paging directly.
57
+ result.each do |response|
58
+ # Each element is of type <%= snippet.paged_response_type %>.
59
+ p response
60
+ end
61
+ <%- when :streaming -%>
62
+ # The returned object is a streamed enumerable yielding elements of
63
+ # type <%= snippet.base_response_type %>.
64
+ result.each do |response|
65
+ p response
66
+ end
67
+ <%- else -%>
68
+ # The returned object is of type <%= snippet.return_type %>.
69
+ p result
70
+ <%- end -%>
71
+ <%- end -%>
@@ -0,0 +1,6 @@
1
+ <%- assert_locals snippet -%>
2
+ <%= render partial: "shared/header" -%>
3
+
4
+ # [START <%= snippet.region_tag %>]
5
+ <%= render partial: "snippets/snippet/structure", locals: { snippet: snippet} -%>
6
+ # [END <%= snippet.region_tag %>]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gapic-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernest Landrito
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-03-06 00:00:00.000000000 Z
13
+ date: 2021-07-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -216,10 +216,14 @@ files:
216
216
  - lib/gapic/presenters/gem_presenter.rb
217
217
  - lib/gapic/presenters/message_presenter.rb
218
218
  - lib/gapic/presenters/method_presenter.rb
219
+ - lib/gapic/presenters/method_rest_presenter.rb
219
220
  - lib/gapic/presenters/package_presenter.rb
220
221
  - lib/gapic/presenters/resource_presenter.rb
221
222
  - lib/gapic/presenters/sample_presenter.rb
223
+ - lib/gapic/presenters/service_config_presenter.rb
222
224
  - lib/gapic/presenters/service_presenter.rb
225
+ - lib/gapic/presenters/service_rest_presenter.rb
226
+ - lib/gapic/presenters/snippet_presenter.rb
223
227
  - lib/gapic/resource_lookup.rb
224
228
  - lib/gapic/ruby_info.rb
225
229
  - lib/gapic/runner.rb
@@ -263,6 +267,7 @@ files:
263
267
  - templates/default/layouts/_ruby.erb
264
268
  - templates/default/lib/_package.erb
265
269
  - templates/default/lib/_service.erb
270
+ - templates/default/lib/rest/_rest.erb
266
271
  - templates/default/package.erb
267
272
  - templates/default/proto_docs/_enum.erb
268
273
  - templates/default/proto_docs/_message.erb
@@ -281,7 +286,6 @@ files:
281
286
  - templates/default/service/client/_resource.erb
282
287
  - templates/default/service/client/_self_configure.erb
283
288
  - templates/default/service/client/_self_configure_defaults.erb
284
- - templates/default/service/client/_self_configure_retry_policy.erb
285
289
  - templates/default/service/client/method/_def.erb
286
290
  - templates/default/service/client/method/def/_options_defaults.erb
287
291
  - templates/default/service/client/method/def/_request.erb
@@ -314,6 +318,27 @@ files:
314
318
  - templates/default/service/credentials.erb
315
319
  - templates/default/service/operations.erb
316
320
  - templates/default/service/paths.erb
321
+ - templates/default/service/rest.erb
322
+ - templates/default/service/rest/client.erb
323
+ - templates/default/service/rest/client/_client.erb
324
+ - templates/default/service/rest/client/_config.erb
325
+ - templates/default/service/rest/client/_requires.erb
326
+ - templates/default/service/rest/client/method/_def.erb
327
+ - templates/default/service/rest/client/method/def/_options_defaults.erb
328
+ - templates/default/service/rest/client/method/def/_rescue.erb
329
+ - templates/default/service/rest/client/method/def/_response_normal.erb
330
+ - templates/default/service/rest/client/method/docs/_error.erb
331
+ - templates/default/service/rest/client/method/docs/_request.erb
332
+ - templates/default/service/rest/client/method/docs/_result.erb
333
+ - 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
337
+ - templates/default/service/rest/test/client.erb
338
+ - templates/default/service/rest/test/method/_assert_response.erb
339
+ - templates/default/service/rest/test/method/_configure.erb
340
+ - templates/default/service/rest/test/method/_normal.erb
341
+ - templates/default/service/rest/test/method/_setup.erb
317
342
  - templates/default/service/test/_resource.erb
318
343
  - templates/default/service/test/client.erb
319
344
  - templates/default/service/test/client_operations.erb
@@ -329,6 +354,9 @@ files:
329
354
  - templates/default/shared/_header.erb
330
355
  - templates/default/shared/_license.erb
331
356
  - templates/default/shared/_warning.erb
357
+ - templates/default/snippets/gemfile.erb
358
+ - templates/default/snippets/snippet/_structure.erb
359
+ - templates/default/snippets/standalone.erb
332
360
  homepage: https://github.com/googleapis/gapic-generator-ruby
333
361
  licenses:
334
362
  - Apache-2.0
@@ -348,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
348
376
  - !ruby/object:Gem::Version
349
377
  version: '0'
350
378
  requirements: []
351
- rubygems_version: 3.2.11
379
+ rubygems_version: 3.1.6
352
380
  signing_key:
353
381
  specification_version: 4
354
382
  summary: An API Client Generator for Ruby in Ruby!
@@ -1,15 +0,0 @@
1
- <%- assert_locals retry_policy -%>
2
- {
3
- <%- if retry_policy.initial_delay_seconds -%>
4
- initial_delay: <%= format_number retry_policy.initial_delay_seconds %>,
5
- <%- end -%>
6
- <%- if retry_policy.max_delay_seconds -%>
7
- max_delay: <%= format_number retry_policy.max_delay_seconds %>,
8
- <%- end -%>
9
- <%- if retry_policy.multiplier -%>
10
- multiplier: <%= format_number retry_policy.multiplier %>,
11
- <%- end-%>
12
- <%- if retry_policy.status_codes -%>
13
- retry_codes: <%= retry_policy.status_codes %>
14
- <%- end -%>
15
- }