gapic-generator 0.6.0 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/gem_templates/entrypoint.erb +1 -0
  4. data/gem_templates/gemspec.erb +0 -1
  5. data/lib/gapic/file_formatter.rb +1 -2
  6. data/lib/gapic/generator/version.rb +1 -1
  7. data/lib/gapic/{path_template.rb → path_pattern.rb} +9 -8
  8. data/lib/gapic/path_pattern/parser.rb +146 -0
  9. data/lib/gapic/path_pattern/pattern.rb +80 -0
  10. data/lib/gapic/path_pattern/segment.rb +276 -0
  11. data/lib/gapic/presenters/field_presenter.rb +12 -0
  12. data/lib/gapic/presenters/gem_presenter.rb +16 -2
  13. data/lib/gapic/presenters/method_presenter.rb +7 -3
  14. data/lib/gapic/presenters/resource_presenter.rb +23 -31
  15. data/lib/gapic/presenters/service_presenter.rb +2 -1
  16. data/lib/gapic/runner.rb +3 -1
  17. data/lib/gapic/schema/api.rb +17 -1
  18. data/lib/gapic/schema/wrappers.rb +24 -20
  19. data/lib/gapic/uri_template.rb +36 -0
  20. data/lib/gapic/uri_template/parser.rb +50 -0
  21. data/lib/google/protobuf/compiler/plugin.pb.rb +5 -1
  22. data/lib/google/protobuf/descriptor.pb.rb +1 -0
  23. data/templates/default/gem/gemfile.erb +0 -3
  24. data/templates/default/gem/readme.erb +1 -1
  25. data/templates/default/service/client/resource/_doc.erb +1 -1
  26. data/templates/default/service/client/resource/_multi.erb +4 -0
  27. data/templates/default/service/test/client.erb +1 -3
  28. data/templates/default/service/test/client_operations.erb +1 -3
  29. data/templates/default/service/test/client_paths.erb +1 -3
  30. data/templates/default/service/test/method/_bidi.erb +10 -2
  31. data/templates/default/service/test/method/_client.erb +10 -2
  32. data/templates/default/service/test/method/_normal.erb +6 -0
  33. data/templates/default/service/test/method/_server.erb +9 -1
  34. data/templates/default/service/test/method/_setup.erb +2 -2
  35. metadata +10 -21
  36. data/lib/gapic/path_template/parser.rb +0 -83
  37. data/lib/gapic/path_template/segment.rb +0 -74
@@ -190,6 +190,7 @@ module Google
190
190
  optional :int32, :oneof_index, 9
191
191
  optional :string, :json_name, 10
192
192
  optional ::Google::Protobuf::FieldOptions, :options, 8
193
+ optional :bool, :proto3_optional, 17
193
194
  end
194
195
 
195
196
  class OneofDescriptorProto
@@ -2,6 +2,3 @@
2
2
  source "https://rubygems.org"
3
3
 
4
4
  gemspec
5
-
6
- # google-protobuf 3.12.0 requires Ruby 2.5 or later, so pin to 3.11 on older Rubies
7
- gem "google-protobuf", (RUBY_VERSION < "2.5" ? "~> 3.11.4" : "~> 3.12")
@@ -16,7 +16,7 @@ $ gem install <%= gem.name %>
16
16
 
17
17
  ```ruby
18
18
  require "<%= gem.entrypoint_require %>"
19
- <%- service = gem.packages.first&.services.first -%>
19
+ <%- service = gem.first_non_common_service -%>
20
20
  <%- method = service&.methods.first -%>
21
21
  <%- if service && method -%>
22
22
 
@@ -1,7 +1,7 @@
1
1
  <%- assert_locals pattern -%>
2
2
  The resource will be in the following format:
3
3
 
4
- `<%= pattern.template %>`
4
+ `<%= pattern.pattern %>`
5
5
 
6
6
  <%- pattern.arguments.each do |arg| -%>
7
7
  @param <%= arg %> [String]
@@ -13,7 +13,11 @@ def <%= resource.path_helper %> **args
13
13
  <%- last_pattern_index = resource.patterns.count - 1 -%>
14
14
  <%- resource.patterns.each_with_index do |pattern, index| -%>
15
15
  <%- comma = last_pattern_index == index ? "" : "," -%>
16
+ <%- if pattern.formal_arguments.empty? -%>
17
+ <%= pattern.arguments_key.inspect %> => (proc do
18
+ <%- else -%>
16
19
  <%= pattern.arguments_key.inspect %> => (proc do |<%= pattern.formal_arguments %>|
20
+ <%- end -%>
17
21
  <%= indent render(partial: "service/client/resource/def", locals: { pattern: pattern }), 6 %>
18
22
  end)<%= comma %>
19
23
  <%- end -%>
@@ -1,7 +1,5 @@
1
1
  <%- assert_locals service -%>
2
- # frozen_string_literal: true
3
-
4
- <%= render partial: "shared/license" %>
2
+ <%= render partial: "shared/header" %>
5
3
  require "helper"
6
4
 
7
5
  require "gapic/grpc/service_stub"
@@ -1,7 +1,5 @@
1
1
  <%- assert_locals service -%>
2
- # frozen_string_literal: true
3
-
4
- <%= render partial: "shared/license" %>
2
+ <%= render partial: "shared/header" %>
5
3
  require "helper"
6
4
 
7
5
  require "gapic/grpc/service_stub"
@@ -1,7 +1,5 @@
1
1
  <%- assert_locals service -%>
2
- # frozen_string_literal: true
3
-
4
- <%= render partial: "shared/license" %>
2
+ <%= render partial: "shared/header" %>
5
3
  require "helper"
6
4
 
7
5
  require "gapic/grpc/service_stub"
@@ -86,13 +86,21 @@ def test_<%= method.name %>
86
86
  request.to_a.each do |r|
87
87
  assert_kind_of <%= method.request_type %>, r
88
88
  <%- fields.each do |field| -%>
89
- <%- if field.message? && field.repeated? -%>
90
- assert_kind_of <%= field.type_name_full %>, request.<%= field.name %>.first
89
+ <%- if field.message? && field.repeated? && !field.map? -%>
90
+ assert_kind_of <%= field.type_name_full %>, r.<%= field.name %>.first
91
+ <%- elsif field.map? -%>
92
+ assert_equal(<%= field.default_value %>, r.<%= field.name %>.to_h)
91
93
  <%- elsif field.message? -%>
92
94
  assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), r.<%= field.name %>
93
95
  <%- else -%>
94
96
  assert_equal <%= field.default_value %>, r.<%= field.name %>
95
97
  <%- end -%>
98
+ <%- if field.oneof? && !field.proto3_optional? -%>
99
+ assert_equal :<%= field.name %>, r.<%= field.oneof_name %>
100
+ <%- end -%>
101
+ <%- if field.proto3_optional? -%>
102
+ assert r.has_<%= field.name %>?
103
+ <%- end -%>
96
104
  <%- end -%>
97
105
  end
98
106
  end
@@ -70,13 +70,21 @@ def test_<%= method.name %>
70
70
  request.to_a.each do |r|
71
71
  assert_kind_of <%= method.request_type %>, r
72
72
  <%- fields.each do |field| -%>
73
- <%- if field.message? && field.repeated? -%>
74
- assert_kind_of <%= field.type_name_full %>, request.<%= field.name %>.first
73
+ <%- if field.message? && field.repeated? && !field.map? -%>
74
+ assert_kind_of <%= field.type_name_full %>, r.<%= field.name %>.first
75
+ <%- elsif field.map? -%>
76
+ assert_equal(<%= field.default_value %>, r.<%= field.name %>.to_h)
75
77
  <%- elsif field.message? -%>
76
78
  assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), r.<%= field.name %>
77
79
  <%- else -%>
78
80
  assert_equal <%= field.default_value %>, r.<%= field.name %>
79
81
  <%- end -%>
82
+ <%- if field.oneof? && !field.proto3_optional? -%>
83
+ assert_equal :<%= field.name %>, r.<%= field.oneof_name %>
84
+ <%- end -%>
85
+ <%- if field.proto3_optional? -%>
86
+ assert r.has_<%= field.name %>?
87
+ <%- end -%>
80
88
  <%- end -%>
81
89
  end
82
90
  end
@@ -26,6 +26,12 @@ def test_<%= method.name %>
26
26
  <%- else -%>
27
27
  assert_equal <%= field.default_value %>, request.<%= field.name %>
28
28
  <%- end -%>
29
+ <%- if field.oneof? && !field.proto3_optional? -%>
30
+ assert_equal :<%= field.name %>, request.<%= field.oneof_name %>
31
+ <%- end -%>
32
+ <%- if field.proto3_optional? -%>
33
+ assert request.has_<%= field.name %>?
34
+ <%- end -%>
29
35
  <%- end -%>
30
36
  refute_nil options
31
37
  end
@@ -17,13 +17,21 @@ def test_<%= method.name %>
17
17
  assert_equal :<%= method.name %>, name
18
18
  assert_kind_of <%= method.request_type %>, request
19
19
  <%- fields.each do |field| -%>
20
- <%- if field.message? && field.repeated? -%>
20
+ <%- if field.message? && field.repeated? && !field.map? -%>
21
21
  assert_kind_of <%= field.type_name_full %>, request.<%= field.name %>.first
22
+ <%- elsif field.map? -%>
23
+ assert_equal(<%= field.default_value %>, request.<%= field.name %>.to_h)
22
24
  <%- elsif field.message? -%>
23
25
  assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), request.<%= field.name %>
24
26
  <%- else -%>
25
27
  assert_equal <%= field.default_value %>, request.<%= field.name %>
26
28
  <%- end -%>
29
+ <%- if field.oneof? && !field.proto3_optional? -%>
30
+ assert_equal :<%= field.name %>, request.<%= field.oneof_name %>
31
+ <%- end -%>
32
+ <%- if field.proto3_optional? -%>
33
+ assert request.has_<%= field.name %>?
34
+ <%- end -%>
27
35
  <%- end -%>
28
36
  refute_nil options
29
37
  end
@@ -9,10 +9,10 @@ class ClientStub
9
9
  @requests = []
10
10
  end
11
11
 
12
- def call_rpc *args
12
+ def call_rpc *args, **kwargs
13
13
  @call_rpc_count += 1
14
14
 
15
- @requests << @block&.call(*args)
15
+ @requests << @block&.call(*args, **kwargs)
16
16
 
17
17
  yield @response, @operation if block_given?
18
18
 
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.6.0
4
+ version: 0.6.5
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-06-02 00:00:00.000000000 Z
13
+ date: 2020-07-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -40,20 +40,6 @@ dependencies:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '3.8'
43
- - !ruby/object:Gem::Dependency
44
- name: bundler
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '2.1'
50
- type: :development
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - "~>"
55
- - !ruby/object:Gem::Version
56
- version: '2.1'
57
43
  - !ruby/object:Gem::Dependency
58
44
  name: google-style
59
45
  requirement: !ruby/object:Gem::Requirement
@@ -74,14 +60,14 @@ dependencies:
74
60
  requirements:
75
61
  - - "~>"
76
62
  - !ruby/object:Gem::Version
77
- version: '1.19'
63
+ version: 1.30.1
78
64
  type: :development
79
65
  prerelease: false
80
66
  version_requirements: !ruby/object:Gem::Requirement
81
67
  requirements:
82
68
  - - "~>"
83
69
  - !ruby/object:Gem::Version
84
- version: '1.19'
70
+ version: 1.30.1
85
71
  - !ruby/object:Gem::Dependency
86
72
  name: minitest
87
73
  requirement: !ruby/object:Gem::Requirement
@@ -217,9 +203,10 @@ files:
217
203
  - lib/gapic/grpc_service_config/service_config.rb
218
204
  - lib/gapic/helpers/filepath_helper.rb
219
205
  - lib/gapic/helpers/namespace_helper.rb
220
- - lib/gapic/path_template.rb
221
- - lib/gapic/path_template/parser.rb
222
- - lib/gapic/path_template/segment.rb
206
+ - lib/gapic/path_pattern.rb
207
+ - lib/gapic/path_pattern/parser.rb
208
+ - lib/gapic/path_pattern/pattern.rb
209
+ - lib/gapic/path_pattern/segment.rb
223
210
  - lib/gapic/presenters.rb
224
211
  - lib/gapic/presenters/enum_presenter.rb
225
212
  - lib/gapic/presenters/enum_value_presenter.rb
@@ -239,6 +226,8 @@ files:
239
226
  - lib/gapic/schema/api.rb
240
227
  - lib/gapic/schema/loader.rb
241
228
  - lib/gapic/schema/wrappers.rb
229
+ - lib/gapic/uri_template.rb
230
+ - lib/gapic/uri_template/parser.rb
242
231
  - lib/google/api/annotations.pb.rb
243
232
  - lib/google/api/client.pb.rb
244
233
  - lib/google/api/field_behavior.pb.rb
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright 2019 Google LLC
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # https://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- require "gapic/path_template/segment"
18
-
19
- module Gapic
20
- module PathTemplate
21
- # A URI path template parser.
22
- #
23
- # @see https://tools.ietf.org/html/rfc6570 URI Template
24
- #
25
- # @!attribute [r] path_template
26
- # @return [String] The URI path template to be parsed.
27
- # @!attribute [r] segments
28
- # @return [Array<Segment|String>] The segments of the parsed URI path
29
- # template.
30
- class Parser
31
- # @private
32
- # /((?<positional>\*\*?)|{(?<name>[^\/]+?)(?:=(?<template>.+?))?})/
33
- PATH_TEMPLATE = %r{
34
- (
35
- (?<positional>\*\*?)
36
- |
37
- {(?<name>[^\/]+?)(?:=(?<template>.+?))?}
38
- )
39
- }x.freeze
40
-
41
- attr_reader :path_template, :segments
42
-
43
- # Create a new URI path template parser.
44
- #
45
- # @param path_template [String] The URI path template to be parsed.
46
- def initialize path_template
47
- @path_template = path_template
48
- @segments = parse! path_template
49
- end
50
-
51
- protected
52
-
53
- def parse! path_template
54
- # segments contain either Strings or segment objects
55
- segments = []
56
- segment_pos = 0
57
-
58
- while (match = PATH_TEMPLATE.match path_template)
59
- # The String before the match needs to be added to the segments
60
- segments << match.pre_match unless match.pre_match.empty?
61
-
62
- segment, segment_pos = segment_and_pos_from_match match, segment_pos
63
- segments << segment
64
-
65
- path_template = match.post_match
66
- end
67
-
68
- # Whatever String is unmatched needs to be added to the segments
69
- segments << path_template unless path_template.empty?
70
-
71
- segments
72
- end
73
-
74
- def segment_and_pos_from_match match, pos
75
- if match[:positional]
76
- [Segment.new(pos, match[:positional]), pos + 1]
77
- else
78
- [Segment.new(match[:name], match[:template]), pos]
79
- end
80
- end
81
- end
82
- end
83
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright 2019 Google LLC
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # https://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- module Gapic
18
- module PathTemplate
19
- # A segment in a URI path template.
20
- #
21
- # @see https://tools.ietf.org/html/rfc6570 URI Template
22
- #
23
- # @!attribute [r] name
24
- # @return [String, Integer] The name of a named segment, or the position
25
- # of a positional segment.
26
- # @!attribute [r] pattern
27
- # @return [String, nil] The pattern of the segment, nil if not set.
28
- class Segment
29
- attr_reader :name, :pattern
30
-
31
- def initialize name, pattern
32
- @name = name
33
- @pattern = pattern
34
- end
35
-
36
- # Determines if the segment is positional (has a number for a name).
37
- #
38
- # @return [Boolean]
39
- def positional?
40
- name.is_a? Integer
41
- end
42
-
43
- # Determines if the segment is named (has a string for a name).
44
- #
45
- # @return [Boolean]
46
- def named?
47
- !positional?
48
- end
49
-
50
- # Determines if the segment has a pattern. Positional segments always
51
- # have a pattern. Named segments may have a pattern if provided in the
52
- # URI path template.
53
- #
54
- # @return [Boolean]
55
- def pattern?
56
- !@pattern.nil?
57
- end
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
-
66
- # @private
67
- def == other
68
- return false unless other.is_a? self.class
69
-
70
- (name == other.name) && (pattern == other.pattern)
71
- end
72
- end
73
- end
74
- end