gapic-generator 0.4.2 → 0.5.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 +8 -0
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/default_generator.rb +13 -11
- data/lib/gapic/path_template/segment.rb +7 -0
- data/lib/gapic/presenters/resource_presenter.rb +55 -35
- data/lib/gapic/presenters/service_presenter.rb +4 -0
- data/templates/default/gem/gemfile.erb +3 -0
- data/templates/default/gem/gemspec.erb +3 -1
- data/templates/default/gem/rakefile.erb +1 -0
- data/templates/default/gem/test_helper.erb +8 -0
- data/templates/default/service/client/_client.erb +2 -1
- data/templates/default/service/client/_config.erb +14 -10
- data/templates/default/service/client/resource/_multi.erb +2 -5
- data/templates/default/service/client/resource/_single.erb +1 -2
- data/templates/default/service/test/_resource.erb +16 -0
- data/templates/default/service/test/client.erb +1 -2
- data/templates/default/service/test/client_operations.erb +1 -2
- data/templates/default/service/test/client_paths.erb +17 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d91e35272532a7605649615f5267d364c30a05a91f3e8f36414994260dc2d22
|
4
|
+
data.tar.gz: 18642517ba285a7aefd2620356e7d78d6a276ad987935d41358b80eb5de78858
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 897662bfc6bae108225577e384cf043aa1ce2861597685a472d50b6fd034c960d7d535152d89a4f5d1d4bcedb01311bc427fc517cc702f8ea52d5ad7f61cf3df
|
7
|
+
data.tar.gz: 401ae995df47b01fd1ede289ed91a05dbac03ffaabc82996259c859b2996868ccd3058b35a7a6a88849de802d4047a25e034bec6b5609ed6f1c77d4264c6ad65
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Release History for gapic-generator
|
2
2
|
|
3
|
+
### 0.5.0 / 2020-05-19
|
4
|
+
|
5
|
+
* Add quota_project to the generated configs.
|
6
|
+
* Allow resource patterns with a star as a segment template.
|
7
|
+
* Generate tests for resource path helpers.
|
8
|
+
* Pin protobuf dependency for Ruby < 2.5.
|
9
|
+
* Create a test helper in for generated tests.
|
10
|
+
|
3
11
|
### 0.4.2 / 2020-04-28
|
4
12
|
|
5
13
|
* Prepend double-colon to absolute/global namespaces to prevent conflicts.
|
@@ -58,22 +58,24 @@ module Gapic
|
|
58
58
|
files << g("service/paths.erb", "lib/#{service.paths_file_path}", service: service) if service.paths?
|
59
59
|
files << g("service/operations.erb", "lib/#{service.operations_file_path}", service: service) if service.lro?
|
60
60
|
files << g("service/test/client.erb", "test/#{service.test_client_file_path}", service: service)
|
61
|
+
files << g("service/test/client_paths.erb", "test/#{service.test_paths_file_path}", service: service) if service.paths?
|
61
62
|
files << g("service/test/client_operations.erb", "test/#{service.test_client_operations_file_path}", service: service) if service.lro?
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
65
66
|
# Gem level files
|
66
|
-
files << g("gem/gitignore.erb",
|
67
|
-
files << g("gem/version.erb",
|
68
|
-
files << g("gem/
|
69
|
-
files << g("gem/
|
70
|
-
files << g("gem/
|
71
|
-
files << g("gem/
|
72
|
-
files << g("gem/
|
73
|
-
files << g("gem/
|
74
|
-
files << g("gem/
|
75
|
-
files << g("gem/
|
76
|
-
files << g("gem/
|
67
|
+
files << g("gem/gitignore.erb", ".gitignore", gem: gem)
|
68
|
+
files << g("gem/version.erb", "lib/#{gem.version_file_path}", gem: gem)
|
69
|
+
files << g("gem/test_helper.erb", "test/helper.rb", gem: gem)
|
70
|
+
files << g("gem/gemspec.erb", "#{gem.name}.gemspec", gem: gem)
|
71
|
+
files << g("gem/gemfile.erb", "Gemfile", gem: gem)
|
72
|
+
files << g("gem/rakefile.erb", "Rakefile", gem: gem)
|
73
|
+
files << g("gem/readme.erb", "README.md", gem: gem)
|
74
|
+
files << g("gem/changelog.erb", "CHANGELOG.md", gem: gem)
|
75
|
+
files << g("gem/rubocop.erb", ".rubocop.yml", gem: gem)
|
76
|
+
files << g("gem/yardopts.erb", ".yardopts", gem: gem)
|
77
|
+
files << g("gem/license.erb", "LICENSE.md", gem: gem)
|
78
|
+
files << g("gem/entrypoint.erb", "lib/#{gem.name}.rb", gem: gem)
|
77
79
|
|
78
80
|
gem.proto_files.each do |proto_file|
|
79
81
|
files << g("proto_docs/proto_file.erb", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
|
@@ -56,6 +56,13 @@ module Gapic
|
|
56
56
|
!@pattern.nil?
|
57
57
|
end
|
58
58
|
|
59
|
+
# Determines if the segment has a nontrivial pattern (i.e. not `*` or `**`).
|
60
|
+
#
|
61
|
+
# @return [Boolean]
|
62
|
+
def nontrivial_pattern?
|
63
|
+
@pattern && @pattern != "*" && @pattern != "**"
|
64
|
+
end
|
65
|
+
|
59
66
|
# @private
|
60
67
|
def == other
|
61
68
|
return false unless other.is_a? self.class
|
@@ -15,7 +15,6 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "gapic/path_template"
|
18
|
-
require "ostruct"
|
19
18
|
require "active_support/inflector"
|
20
19
|
|
21
20
|
module Gapic
|
@@ -28,20 +27,10 @@ module Gapic
|
|
28
27
|
def initialize resource
|
29
28
|
@resource = resource
|
30
29
|
|
31
|
-
@patterns = resource.pattern.map
|
32
|
-
segments = Gapic::PathTemplate.parse template
|
33
|
-
OpenStruct.new(
|
34
|
-
template: template,
|
35
|
-
segments: segments,
|
36
|
-
arguments: arguments_for(segments),
|
37
|
-
path_string: path_string_for(segments)
|
38
|
-
)
|
39
|
-
end
|
30
|
+
@patterns = resource.pattern.map { |template| PatternPresenter.new template }
|
40
31
|
|
41
32
|
# Keep only patterns that can be used to create path helpers
|
42
|
-
@patterns.
|
43
|
-
named_arg_patterns?(pattern.segments) || positional_args?(pattern.segments)
|
44
|
-
end
|
33
|
+
@patterns.filter!(&:useful_for_helpers?)
|
45
34
|
end
|
46
35
|
|
47
36
|
def name
|
@@ -60,33 +49,64 @@ module Gapic
|
|
60
49
|
"#{ActiveSupport::Inflector.underscore name}_path"
|
61
50
|
end
|
62
51
|
|
63
|
-
|
52
|
+
##
|
53
|
+
# A presenter for a particular pattern
|
54
|
+
#
|
55
|
+
class PatternPresenter
|
56
|
+
def initialize template
|
57
|
+
@template = template
|
58
|
+
@segments = Gapic::PathTemplate.parse template
|
59
|
+
@arguments = arg_segments.map(&:name)
|
60
|
+
@path_string = build_path_string
|
61
|
+
end
|
64
62
|
|
65
|
-
|
66
|
-
arg_segments(segments).map(&:name)
|
67
|
-
end
|
63
|
+
attr_reader :template, :segments, :arguments, :path_string
|
68
64
|
|
69
|
-
|
70
|
-
|
71
|
-
|
65
|
+
def useful_for_helpers?
|
66
|
+
arg_segments.none?(&:nontrivial_pattern?) && arg_segments.none?(&:positional?)
|
67
|
+
end
|
72
68
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
"\#{#{segment.name}}"
|
77
|
-
else
|
78
|
-
# Should be a String
|
79
|
-
segment
|
80
|
-
end
|
81
|
-
end.join
|
82
|
-
end
|
69
|
+
def formal_arguments
|
70
|
+
arguments.map { |arg| "#{arg}:" }.join ", "
|
71
|
+
end
|
83
72
|
|
84
|
-
|
85
|
-
|
86
|
-
|
73
|
+
def arguments_key
|
74
|
+
arguments.sort.join ":"
|
75
|
+
end
|
76
|
+
|
77
|
+
def arguments_with_dummy_values
|
78
|
+
arguments.each_with_index.map { |arg, index| "#{arg}: \"value#{index}\"" }.join ", "
|
79
|
+
end
|
80
|
+
|
81
|
+
def expected_path_for_dummy_values
|
82
|
+
index = -1
|
83
|
+
segments.map do |segment|
|
84
|
+
if segment.is_a? Gapic::PathTemplate::Segment
|
85
|
+
index += 1
|
86
|
+
"value#{index}"
|
87
|
+
else
|
88
|
+
# Should be a String
|
89
|
+
segment
|
90
|
+
end
|
91
|
+
end.join
|
92
|
+
end
|
87
93
|
|
88
|
-
|
89
|
-
|
94
|
+
private
|
95
|
+
|
96
|
+
def arg_segments
|
97
|
+
segments.select { |segment| segment.is_a? Gapic::PathTemplate::Segment }
|
98
|
+
end
|
99
|
+
|
100
|
+
def build_path_string
|
101
|
+
segments.map do |segment|
|
102
|
+
if segment.is_a? Gapic::PathTemplate::Segment
|
103
|
+
"\#{#{segment.name}}"
|
104
|
+
else
|
105
|
+
# Should be a String
|
106
|
+
segment
|
107
|
+
end
|
108
|
+
end.join
|
109
|
+
end
|
90
110
|
end
|
91
111
|
end
|
92
112
|
end
|
@@ -272,6 +272,10 @@ module Gapic
|
|
272
272
|
service_file_path.sub ".rb", "_test.rb"
|
273
273
|
end
|
274
274
|
|
275
|
+
def test_paths_file_path
|
276
|
+
service_file_path.sub ".rb", "_paths_test.rb"
|
277
|
+
end
|
278
|
+
|
275
279
|
def test_client_operations_file_path
|
276
280
|
service_file_path.sub ".rb", "_operations_test.rb"
|
277
281
|
end
|
@@ -29,7 +29,9 @@ Gem::Specification.new do |gem|
|
|
29
29
|
<%- end -%>
|
30
30
|
|
31
31
|
gem.add_development_dependency "google-style", "~> 1.24.0"
|
32
|
-
gem.add_development_dependency "minitest", "~> 5.
|
32
|
+
gem.add_development_dependency "minitest", "~> 5.14"
|
33
|
+
gem.add_development_dependency "minitest-focus", "~> 1.1"
|
34
|
+
gem.add_development_dependency "minitest-rg", "~> 5.2"
|
33
35
|
gem.add_development_dependency "rake", ">= 12.0"
|
34
36
|
gem.add_development_dependency "redcarpet", "~> 3.0"
|
35
37
|
gem.add_development_dependency "simplecov", "~> 0.18"
|
@@ -100,7 +100,8 @@ class <%= service.client_name %>
|
|
100
100
|
if credentials.is_a?(String) || credentials.is_a?(Hash)
|
101
101
|
credentials = Credentials.new credentials, scope: @config.scope
|
102
102
|
end
|
103
|
-
@quota_project_id =
|
103
|
+
@quota_project_id = @config.quota_project
|
104
|
+
@quota_project_id ||= credentials.quota_project_id if credentials.respond_to? :quota_project_id
|
104
105
|
|
105
106
|
<%- if service.lro? -%>
|
106
107
|
<%= service.lro_client_ivar %> = <%= service.operations_name %>.new do |config|
|
@@ -78,24 +78,28 @@
|
|
78
78
|
# * `:retry_codes` (*type:* `Array<String>`) - The error codes that should
|
79
79
|
# trigger a retry.
|
80
80
|
# @return [::Hash]
|
81
|
+
# @!attribute [rw] quota_project
|
82
|
+
# A separate project against which to charge quota.
|
83
|
+
# @return [::String]
|
81
84
|
#
|
82
85
|
class Configuration
|
83
86
|
extend ::Gapic::Config
|
84
87
|
|
85
|
-
config_attr :endpoint,
|
86
|
-
config_attr :credentials,
|
88
|
+
config_attr :endpoint, <%= service.client_endpoint.inspect %>, ::String
|
89
|
+
config_attr :credentials, nil do |value|
|
87
90
|
allowed = [::String, ::Hash, ::Proc, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
|
88
91
|
allowed += [::GRPC::Core::Channel, ::GRPC::Core::ChannelCredentials] if defined? ::GRPC
|
89
92
|
allowed.any? { |klass| klass === value }
|
90
93
|
end
|
91
|
-
config_attr :scope,
|
92
|
-
config_attr :lib_name,
|
93
|
-
config_attr :lib_version,
|
94
|
-
config_attr(:channel_args,
|
95
|
-
config_attr :interceptors,
|
96
|
-
config_attr :timeout,
|
97
|
-
config_attr :metadata,
|
98
|
-
config_attr :retry_policy,
|
94
|
+
config_attr :scope, nil, ::String, ::Array, nil
|
95
|
+
config_attr :lib_name, nil, ::String, nil
|
96
|
+
config_attr :lib_version, nil, ::String, nil
|
97
|
+
config_attr(:channel_args, <%= service.config_channel_args.inspect %>, ::Hash, nil)
|
98
|
+
config_attr :interceptors, nil, ::Array, nil
|
99
|
+
config_attr :timeout, nil, ::Numeric, nil
|
100
|
+
config_attr :metadata, nil, ::Hash, nil
|
101
|
+
config_attr :retry_policy, nil, ::Hash, ::Proc, nil
|
102
|
+
config_attr :quota_project, nil, ::String, nil
|
99
103
|
|
100
104
|
# @private
|
101
105
|
def initialize parent_config = nil
|
@@ -3,8 +3,7 @@
|
|
3
3
|
# Create a fully-qualified <%= resource.name %> resource string.
|
4
4
|
#
|
5
5
|
<%- resource.patterns.each do |pattern| -%>
|
6
|
-
|
7
|
-
# @overload <%= resource.path_helper %>(<%= args_doc_sig %>)
|
6
|
+
# @overload <%= resource.path_helper %>(<%= pattern.formal_arguments %>)
|
8
7
|
<%= indent render(partial: "service/client/resource/doc", locals: { pattern: pattern }), "# " %>
|
9
8
|
#
|
10
9
|
<%- end -%>
|
@@ -14,9 +13,7 @@ def <%= resource.path_helper %> **args
|
|
14
13
|
<%- last_pattern_index = resource.patterns.count - 1 -%>
|
15
14
|
<%- resource.patterns.each_with_index do |pattern, index| -%>
|
16
15
|
<%- comma = last_pattern_index == index ? "" : "," -%>
|
17
|
-
|
18
|
-
<%- args_sig = pattern.arguments.map { |arg| "#{arg}:" }.join ", " -%>
|
19
|
-
<%= args_key %> => (proc do |<%= args_sig %>|
|
16
|
+
<%= pattern.arguments_key.inspect %> => (proc do |<%= pattern.formal_arguments %>|
|
20
17
|
<%= indent render(partial: "service/client/resource/def", locals: { pattern: pattern }), 6 %>
|
21
18
|
end)<%= comma %>
|
22
19
|
<%- end -%>
|
@@ -5,7 +5,6 @@
|
|
5
5
|
<%= indent render(partial: "service/client/resource/doc", locals: { pattern: resource.patterns.first }), "# " %>
|
6
6
|
#
|
7
7
|
# @return [::String]
|
8
|
-
|
9
|
-
def <%= resource.path_helper %> <%= args %>
|
8
|
+
def <%= resource.path_helper %> <%= resource.patterns.first.formal_arguments %>
|
10
9
|
<%= indent render(partial: "service/client/resource/def", locals: { pattern: resource.patterns.first }), 2 %>
|
11
10
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%- assert_locals resource -%>
|
2
|
+
<%- assert_locals service -%>
|
3
|
+
<%- full_client_name = defined?(client_name_full) ? client_name_full : service.client_name_full -%>
|
4
|
+
def test_<%= resource.path_helper%>
|
5
|
+
grpc_channel = ::GRPC::Core::Channel.new "localhost:8888", nil, :this_channel_is_insecure
|
6
|
+
::Gapic::ServiceStub.stub :new, nil do
|
7
|
+
client = <%= full_client_name %>.new do |config|
|
8
|
+
config.credentials = grpc_channel
|
9
|
+
end
|
10
|
+
<%- resource.patterns.each do |pattern| -%>
|
11
|
+
|
12
|
+
path = client.<%= resource.path_helper%> <%= pattern.arguments_with_dummy_values %>
|
13
|
+
assert_equal <%= pattern.expected_path_for_dummy_values.inspect %>, path
|
14
|
+
<%- end -%>
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%- assert_locals service -%>
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
<%= render partial: "shared/license" %>
|
5
|
+
require "helper"
|
6
|
+
|
7
|
+
require "gapic/grpc/service_stub"
|
8
|
+
|
9
|
+
require "<%= service.service_require %>"
|
10
|
+
|
11
|
+
class <%= service.client_name_full %>PathsTest < Minitest::Test
|
12
|
+
<%- service.references.each do |resource| -%>
|
13
|
+
<%= indent render(partial: "service/test/resource",
|
14
|
+
locals: { resource: resource, service: service }), 2 %>
|
15
|
+
|
16
|
+
<%- end %>
|
17
|
+
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.5.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: 2020-
|
13
|
+
date: 2020-05-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: actionpack
|
@@ -260,6 +260,7 @@ files:
|
|
260
260
|
- templates/default/gem/rakefile.erb
|
261
261
|
- templates/default/gem/readme.erb
|
262
262
|
- templates/default/gem/rubocop.erb
|
263
|
+
- templates/default/gem/test_helper.erb
|
263
264
|
- templates/default/gem/version.erb
|
264
265
|
- templates/default/gem/yardopts.erb
|
265
266
|
- templates/default/helpers/default_helper.rb
|
@@ -319,8 +320,10 @@ files:
|
|
319
320
|
- templates/default/service/credentials.erb
|
320
321
|
- templates/default/service/operations.erb
|
321
322
|
- templates/default/service/paths.erb
|
323
|
+
- templates/default/service/test/_resource.erb
|
322
324
|
- templates/default/service/test/client.erb
|
323
325
|
- templates/default/service/test/client_operations.erb
|
326
|
+
- templates/default/service/test/client_paths.erb
|
324
327
|
- templates/default/service/test/method/_assert_response.erb
|
325
328
|
- templates/default/service/test/method/_bidi.erb
|
326
329
|
- templates/default/service/test/method/_client.erb
|