gapic-generator 0.7.1 → 0.9.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +47 -0
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/default_generator.rb +18 -5
- data/lib/gapic/generators/default_generator_parameters.rb +8 -4
- data/lib/gapic/presenters.rb +4 -0
- data/lib/gapic/presenters/field_presenter.rb +44 -0
- data/lib/gapic/presenters/gem_presenter.rb +55 -10
- data/lib/gapic/presenters/method_presenter.rb +40 -16
- data/lib/gapic/presenters/method_rest_presenter.rb +194 -0
- data/lib/gapic/presenters/package_presenter.rb +18 -0
- data/lib/gapic/presenters/service_config_presenter.rb +48 -0
- data/lib/gapic/presenters/service_presenter.rb +60 -4
- data/lib/gapic/presenters/service_rest_presenter.rb +139 -0
- data/lib/gapic/presenters/snippet_presenter.rb +103 -0
- data/lib/gapic/runner.rb +2 -1
- data/lib/gapic/schema/api.rb +58 -16
- data/lib/gapic/schema/request_param_parser.rb +46 -12
- data/lib/google/protobuf/any.pb.rb +1 -1
- data/lib/google/protobuf/compiler/plugin.pb.rb +9 -6
- data/lib/google/protobuf/descriptor.pb.rb +2 -2
- data/lib/google/protobuf/empty.pb.rb +1 -1
- data/templates/default/gem/readme.erb +3 -3
- data/templates/default/lib/_package.erb +11 -1
- data/templates/default/lib/_service.erb +31 -1
- data/templates/default/lib/rest/_rest.erb +11 -0
- data/templates/default/service/client/_client.erb +1 -1
- data/templates/default/service/client/_credentials.erb +2 -0
- data/templates/default/service/client/_operations.erb +1 -1
- data/templates/default/service/client/_self_configure_defaults.erb +2 -2
- data/templates/default/service/rest.erb +6 -0
- data/templates/default/service/rest/client.erb +6 -0
- data/templates/default/service/rest/client/_client.erb +115 -0
- data/templates/default/service/rest/client/_config.erb +74 -0
- data/templates/default/service/rest/client/_requires.erb +1 -0
- data/templates/default/service/rest/client/method/_def.erb +18 -0
- data/templates/default/service/rest/client/method/def/_options_defaults.erb +15 -0
- data/templates/default/service/rest/client/method/def/_rescue.erb +3 -0
- data/templates/default/service/rest/client/method/def/_response_normal.erb +17 -0
- data/templates/default/service/rest/client/method/docs/_error.erb +2 -0
- data/templates/default/service/rest/client/method/docs/_request.erb +27 -0
- data/templates/default/service/rest/client/method/docs/_result.erb +6 -0
- data/templates/default/service/rest/grpc_transcoding.erb +6 -0
- data/templates/default/service/rest/grpc_transcoding/_grpc_transcoding.erb +9 -0
- data/templates/default/service/rest/grpc_transcoding/method/_def.erb +21 -0
- data/templates/default/service/rest/grpc_transcoding/method/def/_query_string_param.erb +8 -0
- data/templates/default/service/rest/test/client.erb +18 -0
- data/templates/default/service/rest/test/method/_assert_response.erb +2 -0
- data/templates/default/service/rest/test/method/_configure.erb +19 -0
- data/templates/default/service/rest/test/method/_normal.erb +71 -0
- data/templates/default/service/rest/test/method/_setup.erb +38 -0
- data/templates/default/snippets/gemfile.erb +17 -0
- data/templates/default/snippets/snippet/_structure.erb +71 -0
- data/templates/default/snippets/standalone.erb +6 -0
- metadata +32 -4
- data/templates/default/service/client/_self_configure_retry_policy.erb +0 -15
@@ -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,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 -%>
|
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.
|
4
|
+
version: 0.9.0
|
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-
|
13
|
+
date: 2021-06-30 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.
|
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
|
-
}
|