gapic-generator 0.4.0 → 0.6.1

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/lib/gapic/file_formatter.rb +0 -1
  4. data/lib/gapic/formatting_utils.rb +6 -6
  5. data/lib/gapic/generator/version.rb +1 -1
  6. data/lib/gapic/generators/default_generator.rb +16 -14
  7. data/lib/gapic/helpers/filepath_helper.rb +1 -0
  8. data/lib/gapic/helpers/namespace_helper.rb +8 -1
  9. data/lib/gapic/{path_template.rb → path_pattern.rb} +9 -8
  10. data/lib/gapic/path_pattern/parser.rb +146 -0
  11. data/lib/gapic/path_pattern/pattern.rb +80 -0
  12. data/lib/gapic/path_pattern/segment.rb +276 -0
  13. data/lib/gapic/presenters/field_presenter.rb +9 -9
  14. data/lib/gapic/presenters/file_presenter.rb +1 -1
  15. data/lib/gapic/presenters/gem_presenter.rb +39 -3
  16. data/lib/gapic/presenters/method_presenter.rb +19 -19
  17. data/lib/gapic/presenters/package_presenter.rb +4 -3
  18. data/lib/gapic/presenters/resource_presenter.rb +48 -36
  19. data/lib/gapic/presenters/service_presenter.rb +20 -14
  20. data/lib/gapic/schema/api.rb +7 -0
  21. data/lib/gapic/schema/wrappers.rb +13 -19
  22. data/lib/gapic/uri_template.rb +36 -0
  23. data/lib/gapic/uri_template/parser.rb +50 -0
  24. data/templates/default/gem/gemfile.erb +3 -0
  25. data/templates/default/gem/gemspec.erb +7 -6
  26. data/templates/default/gem/rakefile.erb +1 -0
  27. data/templates/default/gem/test_helper.erb +8 -0
  28. data/templates/default/layouts/_ruby.erb +5 -4
  29. data/templates/default/lib/_service.erb +2 -0
  30. data/templates/default/proto_docs/_message.erb +2 -2
  31. data/templates/default/service/client/_client.erb +7 -4
  32. data/templates/default/service/client/_config.erb +33 -29
  33. data/templates/default/service/client/_credentials.erb +1 -1
  34. data/templates/default/service/client/_operations.erb +3 -1
  35. data/templates/default/service/client/method/def/_options_defaults.erb +2 -2
  36. data/templates/default/service/client/method/def/_request_normal.erb +2 -2
  37. data/templates/default/service/client/method/def/_request_streaming.erb +3 -3
  38. data/templates/default/service/client/method/def/_response_normal.erb +1 -1
  39. data/templates/default/service/client/method/def/_response_paged.erb +2 -2
  40. data/templates/default/service/client/method/docs/_error.erb +1 -1
  41. data/templates/default/service/client/method/docs/_request_normal.erb +2 -2
  42. data/templates/default/service/client/method/docs/_request_streaming.erb +2 -2
  43. data/templates/default/service/client/method/docs/_response.erb +1 -1
  44. data/templates/default/service/client/resource/_def.erb +1 -1
  45. data/templates/default/service/client/resource/_doc.erb +1 -1
  46. data/templates/default/service/client/resource/_multi.erb +4 -7
  47. data/templates/default/service/client/resource/_single.erb +2 -3
  48. data/templates/default/service/test/_resource.erb +16 -0
  49. data/templates/default/service/test/client.erb +2 -5
  50. data/templates/default/service/test/client_operations.erb +2 -5
  51. data/templates/default/service/test/client_paths.erb +15 -0
  52. metadata +12 -6
  53. data/lib/gapic/path_template/parser.rb +0 -83
  54. data/lib/gapic/path_template/segment.rb +0 -67
@@ -64,8 +64,10 @@ class <%= service.operations_name %>
64
64
  if credentials.is_a?(String) || credentials.is_a?(Hash)
65
65
  credentials = Credentials.new credentials, scope: @config.scope
66
66
  end
67
+ @quota_project_id = @config.quota_project
68
+ @quota_project_id ||= credentials.quota_project_id if credentials.respond_to? :quota_project_id
67
69
 
68
- @<%= service.lro_service.stub_name %> = Gapic::ServiceStub.new(
70
+ @<%= service.lro_service.stub_name %> = ::Gapic::ServiceStub.new(
69
71
  <%= service.lro_service.proto_service_stub_name_full %>,
70
72
  credentials: credentials,
71
73
  endpoint: @config.endpoint,
@@ -1,12 +1,12 @@
1
1
  <%- assert_locals method -%>
2
2
  # Converts hash and nil to an options object
3
- options = Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h
3
+ options = ::Gapic::CallOptions.new(**options.to_h) if options.respond_to? :to_h
4
4
 
5
5
  # Customize the options with defaults
6
6
  metadata = @config.rpcs.<%= method.name %>.metadata.to_h
7
7
 
8
8
  # Set x-goog-api-client and x-goog-user-project headers
9
- metadata[:"x-goog-api-client"] ||= Gapic::Headers.x_goog_api_client \
9
+ metadata[:"x-goog-api-client"] ||= ::Gapic::Headers.x_goog_api_client \
10
10
  lib_name: @config.lib_name, lib_version: @config.lib_version,
11
11
  gapic_version: ::<%= method.service.gem.version_name_full %>
12
12
  metadata[:"x-goog-user-project"] = @quota_project_id if @quota_project_id
@@ -1,4 +1,4 @@
1
1
  <%- assert_locals method -%>
2
- raise ArgumentError, "request must be provided" if request.nil?
2
+ raise ::ArgumentError, "request must be provided" if request.nil?
3
3
 
4
- request = Gapic::Protobuf.coerce request, to: <%= method.request_type %>
4
+ request = ::Gapic::Protobuf.coerce request, to: <%= method.request_type %>
@@ -1,9 +1,9 @@
1
1
  <%- assert_locals method -%>
2
- unless request.is_a? Enumerable
3
- raise ArgumentError, "request must be an Enumerable" unless request.respond_to? :to_enum
2
+ unless request.is_a? ::Enumerable
3
+ raise ::ArgumentError, "request must be an Enumerable" unless request.respond_to? :to_enum
4
4
  request = request.to_enum
5
5
  end
6
6
 
7
7
  request = request.lazy.map do |req|
8
- Gapic::Protobuf.coerce req, to: <%= method.request_type %>
8
+ ::Gapic::Protobuf.coerce req, to: <%= method.request_type %>
9
9
  end
@@ -1,7 +1,7 @@
1
1
  <%- assert_locals method -%>
2
2
  @<%= method.service.stub_name %>.call_rpc :<%= method.name %>, request, options: options do |response, operation|
3
3
  <%- if method.lro? -%>
4
- response = Gapic::Operation.new response, <%= method.service.lro_client_ivar %>, options: options
4
+ response = ::Gapic::Operation.new response, <%= method.service.lro_client_ivar %>, options: options
5
5
  <%- end -%>
6
6
  yield response, operation if block_given?
7
7
  return response
@@ -1,9 +1,9 @@
1
1
  <%- assert_locals method -%>
2
2
  @<%= method.service.stub_name %>.call_rpc :<%= method.name %>, request, options: options do |response, operation|
3
3
  <%- if method.lro? -%>
4
- wrap_lro_operation = ->(op_response) { Gapic::Operation.new op_response, <%= method.service.lro_client_ivar %> }
4
+ wrap_lro_operation = ->(op_response) { ::Gapic::Operation.new op_response, <%= method.service.lro_client_ivar %> }
5
5
  <%- end -%>
6
- response = Gapic::PagedEnumerable.new @<%= method.service.stub_name %>, :<%= method.name %>, request, response, operation, options<%- if method.lro? -%>, format_resource: wrap_lro_operation<%- end -%>
6
+ response = ::Gapic::PagedEnumerable.new @<%= method.service.stub_name %>, :<%= method.name %>, request, response, operation, options<%- if method.lro? -%>, format_resource: wrap_lro_operation<%- end -%>
7
7
  yield response, operation if block_given?
8
8
  return response
9
9
  end
@@ -1,2 +1,2 @@
1
1
  <%- assert_locals method -%>
2
- # @raise [GRPC::BadStatus] if the RPC is aborted.
2
+ # @raise [::GRPC::BadStatus] if the RPC is aborted.
@@ -3,10 +3,10 @@
3
3
  # Pass arguments to `<%= method.name %>` via a request object, either of type
4
4
  # {<%= method.request_type %>} or an equivalent Hash.
5
5
  #
6
- # @param request [<%= method.request_type %>, Hash]
6
+ # @param request [<%= method.request_type %>, ::Hash]
7
7
  # A request object representing the call parameters. Required. To specify no
8
8
  # parameters, or to keep all the default parameter values, pass an empty Hash.
9
- # @param options [Gapic::CallOptions, Hash]
9
+ # @param options [::Gapic::CallOptions, ::Hash]
10
10
  # Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
11
11
  <%-if method.arguments.any?-%>
12
12
  #
@@ -1,5 +1,5 @@
1
1
  <%- assert_locals method -%>
2
- # @param request [Gapic::StreamInput, Enumerable<<%= method.request_type %>, Hash>]
2
+ # @param request [::Gapic::StreamInput, ::Enumerable<<%= method.request_type %>, ::Hash>]
3
3
  # An enumerable of {<%= method.request_type %>} instances.
4
- # @param options [Gapic::CallOptions, Hash]
4
+ # @param options [::Gapic::CallOptions, ::Hash]
5
5
  # Overrides the default settings for this call, e.g, timeout, retries, etc. Optional.
@@ -1,6 +1,6 @@
1
1
  <%- assert_locals method -%>
2
2
  # @yield [response, operation] Access the result along with the RPC operation
3
3
  # @yieldparam response [<%= method.doc_response_type %>]
4
- # @yieldparam operation [GRPC::ActiveCall::Operation]
4
+ # @yieldparam operation [::GRPC::ActiveCall::Operation]
5
5
  #
6
6
  # @return [<%= method.doc_response_type %>]
@@ -1,6 +1,6 @@
1
1
  <%- assert_locals pattern -%>
2
2
  <%- pattern.arguments[0...-1].each do |arg| -%>
3
- raise ArgumentError, "<%= arg %> cannot contain /" if <%= arg %>.to_s.include? "/"
3
+ raise ::ArgumentError, "<%= arg %> cannot contain /" if <%= arg %>.to_s.include? "/"
4
4
  <%- end -%>
5
5
 
6
6
  "<%= pattern.path_string %>"
@@ -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]
@@ -3,26 +3,23 @@
3
3
  # Create a fully-qualified <%= resource.name %> resource string.
4
4
  #
5
5
  <%- resource.patterns.each do |pattern| -%>
6
- <%- args_doc_sig = pattern.arguments.map { |arg| "#{arg}:" }.join ", " -%>
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 -%>
11
- # @return [String]
10
+ # @return [::String]
12
11
  def <%= resource.path_helper %> **args
13
12
  resources = {
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
- <%- args_key = pattern.arguments.sort.join(":").inspect -%>
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 -%>
23
20
  }
24
21
 
25
22
  resource = resources[args.keys.sort.join(":")]
26
- raise ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
23
+ raise ::ArgumentError, "no resource found for values #{args.keys}" if resource.nil?
27
24
  resource.call(**args)
28
25
  end
@@ -4,8 +4,7 @@
4
4
  #
5
5
  <%= indent render(partial: "service/client/resource/doc", locals: { pattern: resource.patterns.first }), "# " %>
6
6
  #
7
- # @return [String]
8
- <%- args = resource.patterns.first.arguments.map { |arg| "#{arg}:" }.join ", " -%>
9
- def <%= resource.path_helper %> <%= args %>
7
+ # @return [::String]
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
@@ -1,9 +1,6 @@
1
1
  <%- assert_locals service -%>
2
- # frozen_string_literal: true
3
-
4
- <%= render partial: "shared/license" %>
5
- require "simplecov"
6
- require "minitest/autorun"
2
+ <%= render partial: "shared/header" %>
3
+ require "helper"
7
4
 
8
5
  require "gapic/grpc/service_stub"
9
6
 
@@ -1,9 +1,6 @@
1
1
  <%- assert_locals service -%>
2
- # frozen_string_literal: true
3
-
4
- <%= render partial: "shared/license" %>
5
- require "simplecov"
6
- require "minitest/autorun"
2
+ <%= render partial: "shared/header" %>
3
+ require "helper"
7
4
 
8
5
  require "gapic/grpc/service_stub"
9
6
 
@@ -0,0 +1,15 @@
1
+ <%- assert_locals service -%>
2
+ <%= render partial: "shared/header" %>
3
+ require "helper"
4
+
5
+ require "gapic/grpc/service_stub"
6
+
7
+ require "<%= service.service_require %>"
8
+
9
+ class <%= service.client_name_full %>PathsTest < Minitest::Test
10
+ <%- service.references.each do |resource| -%>
11
+ <%= indent render(partial: "service/test/resource",
12
+ locals: { resource: resource, service: service }), 2 %>
13
+
14
+ <%- end %>
15
+ 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.0
4
+ version: 0.6.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: 2020-04-20 00:00:00.000000000 Z
13
+ date: 2020-06-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -217,9 +217,10 @@ files:
217
217
  - lib/gapic/grpc_service_config/service_config.rb
218
218
  - lib/gapic/helpers/filepath_helper.rb
219
219
  - 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
220
+ - lib/gapic/path_pattern.rb
221
+ - lib/gapic/path_pattern/parser.rb
222
+ - lib/gapic/path_pattern/pattern.rb
223
+ - lib/gapic/path_pattern/segment.rb
223
224
  - lib/gapic/presenters.rb
224
225
  - lib/gapic/presenters/enum_presenter.rb
225
226
  - lib/gapic/presenters/enum_value_presenter.rb
@@ -239,6 +240,8 @@ files:
239
240
  - lib/gapic/schema/api.rb
240
241
  - lib/gapic/schema/loader.rb
241
242
  - lib/gapic/schema/wrappers.rb
243
+ - lib/gapic/uri_template.rb
244
+ - lib/gapic/uri_template/parser.rb
242
245
  - lib/google/api/annotations.pb.rb
243
246
  - lib/google/api/client.pb.rb
244
247
  - lib/google/api/field_behavior.pb.rb
@@ -260,6 +263,7 @@ files:
260
263
  - templates/default/gem/rakefile.erb
261
264
  - templates/default/gem/readme.erb
262
265
  - templates/default/gem/rubocop.erb
266
+ - templates/default/gem/test_helper.erb
263
267
  - templates/default/gem/version.erb
264
268
  - templates/default/gem/yardopts.erb
265
269
  - templates/default/helpers/default_helper.rb
@@ -319,8 +323,10 @@ files:
319
323
  - templates/default/service/credentials.erb
320
324
  - templates/default/service/operations.erb
321
325
  - templates/default/service/paths.erb
326
+ - templates/default/service/test/_resource.erb
322
327
  - templates/default/service/test/client.erb
323
328
  - templates/default/service/test/client_operations.erb
329
+ - templates/default/service/test/client_paths.erb
324
330
  - templates/default/service/test/method/_assert_response.erb
325
331
  - templates/default/service/test/method/_bidi.erb
326
332
  - templates/default/service/test/method/_client.erb
@@ -351,7 +357,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
351
357
  - !ruby/object:Gem::Version
352
358
  version: '0'
353
359
  requirements: []
354
- rubygems_version: 3.1.2
360
+ rubygems_version: 3.0.3
355
361
  signing_key:
356
362
  specification_version: 4
357
363
  summary: An API Client Generator for Ruby in Ruby!
@@ -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,67 +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
- # @private
60
- def == other
61
- return false unless other.is_a? self.class
62
-
63
- (name == other.name) && (pattern == other.pattern)
64
- end
65
- end
66
- end
67
- end