gapic-generator 0.2.3 → 0.4.2

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/lib/gapic/formatting_utils.rb +9 -7
  4. data/lib/gapic/generator/version.rb +1 -1
  5. data/lib/gapic/generators/default_generator.rb +11 -10
  6. data/lib/gapic/helpers/filepath_helper.rb +1 -0
  7. data/lib/gapic/helpers/namespace_helper.rb +8 -1
  8. data/lib/gapic/presenters/field_presenter.rb +9 -9
  9. data/lib/gapic/presenters/file_presenter.rb +1 -1
  10. data/lib/gapic/presenters/gem_presenter.rb +4 -0
  11. data/lib/gapic/presenters/method_presenter.rb +24 -18
  12. data/lib/gapic/presenters/package_presenter.rb +16 -1
  13. data/lib/gapic/presenters/resource_presenter.rb +3 -9
  14. data/lib/gapic/presenters/service_presenter.rb +58 -13
  15. data/lib/gapic/resource_lookup.rb +23 -45
  16. data/lib/gapic/ruby_info.rb +93 -0
  17. data/lib/gapic/schema/api.rb +102 -1
  18. data/lib/gapic/schema/loader.rb +9 -2
  19. data/lib/gapic/schema/wrappers.rb +109 -22
  20. data/templates/default/gem/entrypoint.erb +8 -0
  21. data/templates/default/gem/gemspec.erb +1 -1
  22. data/templates/default/gem/readme.erb +15 -1
  23. data/templates/default/gem/rubocop.erb +13 -41
  24. data/templates/default/layouts/_ruby.erb +5 -4
  25. data/templates/default/lib/_package.erb +17 -0
  26. data/templates/default/lib/_service.erb +32 -0
  27. data/templates/default/package.erb +5 -5
  28. data/templates/default/proto_docs/_message.erb +2 -2
  29. data/templates/default/service.erb +5 -7
  30. data/templates/default/service/_helpers.erb +3 -0
  31. data/templates/default/service/client.erb +1 -1
  32. data/templates/default/service/client/_client.erb +13 -19
  33. data/templates/default/service/client/_config.erb +26 -26
  34. data/templates/default/service/client/_credentials.erb +1 -1
  35. data/templates/default/service/client/_operations.erb +1 -5
  36. data/templates/default/service/client/_resource.erb +1 -1
  37. data/templates/default/service/client/method/def/_options_defaults.erb +2 -2
  38. data/templates/default/service/client/method/def/_request_normal.erb +2 -2
  39. data/templates/default/service/client/method/def/_request_streaming.erb +3 -3
  40. data/templates/default/service/client/method/def/_response_normal.erb +1 -1
  41. data/templates/default/service/client/method/def/_response_paged.erb +2 -2
  42. data/templates/default/service/client/method/docs/_error.erb +1 -1
  43. data/templates/default/service/client/method/docs/_request_normal.erb +11 -6
  44. data/templates/default/service/client/method/docs/_request_streaming.erb +2 -2
  45. data/templates/default/service/client/method/docs/_response.erb +1 -1
  46. data/templates/default/service/client/resource/_def.erb +1 -1
  47. data/templates/default/service/client/resource/_multi.erb +2 -2
  48. data/templates/default/service/client/resource/_single.erb +1 -1
  49. data/templates/default/service/credentials.erb +1 -1
  50. data/templates/default/service/operations.erb +1 -1
  51. data/templates/default/service/paths.erb +1 -1
  52. data/templates/default/service/test/client.erb +16 -2
  53. data/templates/default/service/test/client_operations.erb +2 -2
  54. data/templates/default/service/test/method/_configure.erb +19 -0
  55. metadata +9 -4
  56. data/templates/default/service/client/_helpers.erb +0 -9
@@ -0,0 +1,8 @@
1
+ <%- assert_locals gem -%>
2
+ <%= render partial: "shared/header" -%>
3
+
4
+ # This gem does not autoload during Bundler.require. To load this gem,
5
+ # issue explicit require statements for the packages desired, e.g.:
6
+ <%- gem.packages.each do |package| -%>
7
+ # require "<%= package.package_require %>"
8
+ <%- end -%>
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
25
25
 
26
26
  gem.add_dependency "gapic-common", "~> 0.2"
27
27
  <%- if gem.iam_dependency? -%>
28
- gem.add_dependency "grpc-google-iam-v1", "~> 0.6.9"
28
+ gem.add_dependency "grpc-google-iam-v1", ">= 0.6.10", "< 2.0"
29
29
  <%- end -%>
30
30
 
31
31
  gem.add_development_dependency "google-style", "~> 1.24.0"
@@ -1,4 +1,4 @@
1
- # <%= gem.title %>
1
+ # Ruby Client for the <%= gem.title %> API
2
2
 
3
3
  <%= gem.summary %>
4
4
 
@@ -12,6 +12,20 @@
12
12
  $ gem install <%= gem.name %>
13
13
  ```
14
14
 
15
+ ## Quick Start
16
+
17
+ ```ruby
18
+ require "<%= gem.entrypoint_require %>"
19
+ <%- service = gem.packages.first&.services.first -%>
20
+ <%- method = service&.methods.first -%>
21
+ <%- if service && method -%>
22
+
23
+ client = <%= service.create_client_call %>
24
+ request = my_create_request
25
+ response = client.<%= method.name %> request
26
+ <%- end -%>
27
+ ```
28
+
15
29
  ## Supported Ruby Versions
16
30
 
17
31
  This library is supported on Ruby 2.4+.
@@ -9,53 +9,25 @@ AllCops:
9
9
  - "test/**/*"
10
10
 
11
11
  Metrics/AbcSize:
12
- Exclude:
13
- <%- gem.packages.each do |package| -%>
14
- <%- package.services.each do |service| -%>
15
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
16
- <%- end -%>
17
- <%- end -%>
12
+ Enabled: false
18
13
  Metrics/ClassLength:
19
- Exclude:
20
- <%- gem.packages.each do |package| -%>
21
- <%- package.services.each do |service| -%>
22
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
23
- <%- end -%>
24
- <%- end -%>
14
+ Enabled: false
25
15
  Metrics/CyclomaticComplexity:
26
- Exclude:
27
- <%- gem.packages.each do |package| -%>
28
- <%- package.services.each do |service| -%>
29
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
30
- <%- end -%>
31
- <%- end -%>
16
+ Enabled: false
32
17
  Metrics/LineLength:
33
- Exclude:
34
- <%- gem.packages.each do |package| -%>
35
- <%- package.services.each do |service| -%>
36
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
37
- <%- end -%>
38
- <%- end -%>
18
+ Enabled: false
39
19
  Metrics/MethodLength:
40
- Exclude:
41
- <%- gem.packages.each do |package| -%>
42
- <%- package.services.each do |service| -%>
43
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
44
- <%- end -%>
45
- <%- end -%>
20
+ Enabled: false
21
+ Metrics/ModuleLength:
22
+ Enabled: false
46
23
  Metrics/PerceivedComplexity:
24
+ Enabled: false
25
+ Naming/FileName:
47
26
  Exclude:
48
- <%- gem.packages.each do |package| -%>
49
- <%- package.services.each do |service| -%>
50
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
51
- <%- end -%>
52
- <%- end -%>
27
+ - "lib/<%= gem.name %>.rb"
53
28
  Style/CaseEquality:
54
- Exclude:
55
- <%- gem.packages.each do |package| -%>
56
- <%- package.services.each do |service| -%>
57
- - "lib/<%= service.client_file_path.sub "client.rb", "*.rb" %>"
58
- <%- end -%>
59
- <%- end -%>
29
+ Enabled: false
30
+ Style/IfUnlessModifier:
31
+ Enabled: false
60
32
  Style/ModuleFunction:
61
33
  Enabled: false
@@ -5,12 +5,13 @@
5
5
  <%= @requires -%>
6
6
  <%- end -%>
7
7
 
8
- <%- namespace.split("::").each_with_index do |ns, i| -%>
8
+ <%- namespace_components = namespace.split("::").reject(&:empty?) -%>
9
+ <%- namespace_components.each_with_index do |ns, i| -%>
9
10
  <%= indent "module #{ns}", i*2 %>
10
11
  <%- end -%>
11
- <%= indent yield, namespace.split("::").count*2 %>
12
- <%- namespace.split("::").count.times do |i| -%>
13
- <%= indent "end", (namespace.split("::").count-1-i)*2 %>
12
+ <%= indent yield, namespace_components.count*2 %>
13
+ <%- namespace_components.count.times do |i| -%>
14
+ <%= indent "end", (namespace_components.count-1-i)*2 %>
14
15
  <%- end -%>
15
16
  <%- if instance_variable_defined? :@footer -%>
16
17
 
@@ -0,0 +1,17 @@
1
+ <%- assert_locals package -%>
2
+ <% @requires = capture do %>
3
+ <%- package.services.each do |service| -%>
4
+ require "<%= service.service_require %>"
5
+ <%- end -%>
6
+ require "<%= package.gem.version_require %>"
7
+ <% end %>
8
+ <%- unless package.empty? -%>
9
+ ##
10
+ # To load this package, including all its services, and instantiate a client:
11
+ #
12
+ # require "<%= package.package_require %>"
13
+ # client = <%= package.services.first.create_client_call %>
14
+ #
15
+ <%- end -%>
16
+ module <%= package.module_name %>
17
+ end
@@ -0,0 +1,32 @@
1
+ <%- assert_locals service -%>
2
+ <% @requires = capture do %>
3
+ require "gapic/common"
4
+ require "gapic/config"
5
+ require "gapic/config/method"
6
+
7
+ require "<%= service.gem.version_require %>"
8
+
9
+ require "<%= service.credentials_require %>"
10
+ <%- if service.paths? -%>
11
+ require "<%= service.paths_require %>"
12
+ <%- end -%>
13
+ <%- if service.lro? -%>
14
+ require "<%= service.operations_require %>"
15
+ <%- end -%>
16
+ require "<%= service.client_require %>"
17
+ <% end %>
18
+ ##
19
+ <%- if service.doc_description -%>
20
+ <%= indent service.doc_description, "# " %>
21
+ #
22
+ <%- end -%>
23
+ # To load this service and instantiate a client:
24
+ #
25
+ # require "<%= service.service_require %>"
26
+ # client = <%= service.create_client_call %>
27
+ #
28
+ module <%= service.module_name %>
29
+ end
30
+ <% @footer = capture do %>
31
+ <%= render partial: "service/helpers", locals: { service: service} -%>
32
+ <% end %>
@@ -1,6 +1,6 @@
1
1
  <%- assert_locals package -%>
2
- <%= render partial: "shared/header" -%>
3
-
4
- <% package.services.each do |service| %>
5
- require "<%= service.service_require %>"
6
- <% end %>
2
+ <%= render partial: "lib/package",
3
+ layout: "layouts/ruby",
4
+ locals: { package: package,
5
+ namespace: package.parent_namespace }
6
+ %>
@@ -10,8 +10,8 @@
10
10
  <%- end -%>
11
11
  <%- end -%>
12
12
  class <%= message.name %>
13
- include Google::Protobuf::MessageExts
14
- extend Google::Protobuf::MessageExts::ClassMethods
13
+ include ::Google::Protobuf::MessageExts
14
+ extend ::Google::Protobuf::MessageExts::ClassMethods
15
15
  <%- message.nested_messages.each do |submsg| -%>
16
16
 
17
17
  <%= indent_tail render(partial: "proto_docs/message", locals: { message: submsg }), 2 %>
@@ -1,8 +1,6 @@
1
1
  <%- assert_locals service -%>
2
- <%= render partial: "shared/header" -%>
3
-
4
- require "<%= service.client_require %>"
5
- <%- if service.lro? -%>
6
- require "<%= service.operations_require %>"
7
- <%- end -%>
8
- require "<%= service.credentials_require %>"
2
+ <%= render partial: "lib/service",
3
+ layout: "layouts/ruby",
4
+ locals: { service: service,
5
+ namespace: service.namespace }
6
+ %>
@@ -0,0 +1,3 @@
1
+ <%- assert_locals service -%>
2
+ helper_path = ::File.join __dir__, "<%= service.service_directory_name%>", "helpers.rb"
3
+ require "<%= service.helpers_require %>" if ::File.file? helper_path
@@ -2,5 +2,5 @@
2
2
  <%= render partial: "service/client/client",
3
3
  layout: "layouts/ruby",
4
4
  locals: { service: service,
5
- namespace: service.proto_service_name_full }
5
+ namespace: service.service_name_full }
6
6
  %>
@@ -1,19 +1,7 @@
1
1
  <%- assert_locals service -%>
2
2
  <% @requires = capture do %>
3
- require "gapic/common"
4
- require "gapic/config"
5
- require "gapic/config/method"
6
-
7
3
  <%= render partial: "service/client/requires", locals: { service: service} -%>
8
- require "<%= service.gem.version_require %>"
9
4
  require "<%= service.proto_service_require %>"
10
- require "<%= service.credentials_require %>"
11
- <%- if service.paths? -%>
12
- require "<%= service.paths_require %>"
13
- <%- end -%>
14
- <%- if service.lro? -%>
15
- require "<%= service.operations_require %>"
16
- <%- end -%>
17
5
  <% end %>
18
6
  ##
19
7
  # Client for the <%= service.name %> service.
@@ -41,7 +29,7 @@ class <%= service.client_name %>
41
29
  # To modify the configuration for all <%= service.name %> clients:
42
30
  #
43
31
  # <%= service.client_name_full %>.configure do |config|
44
- # config.timeout = 10_000
32
+ # config.timeout = 10.0
45
33
  # end
46
34
  #
47
35
  # @yield [config] Configure the <%= service.client_name %> client.
@@ -87,7 +75,7 @@ class <%= service.client_name %>
87
75
  # configuration:
88
76
  #
89
77
  # client = <%= service.client_name_full %>.new do |config|
90
- # config.timeout = 10_000
78
+ # config.timeout = 10.0
91
79
  # end
92
80
  #
93
81
  # @yield [config] Configure the <%= service.name %> client.
@@ -117,10 +105,11 @@ class <%= service.client_name %>
117
105
  <%- if service.lro? -%>
118
106
  <%= service.lro_client_ivar %> = <%= service.operations_name %>.new do |config|
119
107
  config.credentials = credentials
108
+ config.endpoint = @config.endpoint
120
109
  end
121
110
 
122
111
  <%- end -%>
123
- @<%= service.stub_name %> = Gapic::ServiceStub.new(
112
+ @<%= service.stub_name %> = ::Gapic::ServiceStub.new(
124
113
  <%= service.proto_service_stub_name_full %>,
125
114
  credentials: credentials,
126
115
  endpoint: @config.endpoint,
@@ -129,6 +118,15 @@ class <%= service.client_name %>
129
118
  )
130
119
  end
131
120
 
121
+ <%- if service.lro? -%>
122
+ ##
123
+ # Get the associated client for long-running operations.
124
+ #
125
+ # @return [<%= service.operations_name_full %>]
126
+ #
127
+ attr_reader :<%= service.lro_client_var %>
128
+
129
+ <%- end -%>
132
130
  # Service calls
133
131
  <%- service.methods.each do |method| -%>
134
132
 
@@ -137,7 +135,3 @@ class <%= service.client_name %>
137
135
 
138
136
  <%= indent_tail render(partial: "service/client/config", locals: { service: service }), 2 %>
139
137
  end
140
-
141
- <% @footer = capture do %>
142
- <%= render partial: "service/client/helpers", locals: { service: service} %>
143
- <% end %>
@@ -20,22 +20,22 @@
20
20
  # to 20 seconds, and all remaining timeouts to 10 seconds:
21
21
  #
22
22
  # <%= service.client_name_full %>.configure do |config|
23
- # config.timeout = 10_000
24
- # config.rpcs.<%= method_service.methods.first.name %>.timeout = 20_000
23
+ # config.timeout = 10.0
24
+ # config.rpcs.<%= method_service.methods.first.name %>.timeout = 20.0
25
25
  # end
26
26
  #
27
27
  # To apply the above configuration only to a new client:
28
28
  #
29
29
  # client = <%= service.client_name_full %>.new do |config|
30
- # config.timeout = 10_000
31
- # config.rpcs.<%= method_service.methods.first.name %>.timeout = 20_000
30
+ # config.timeout = 10.0
31
+ # config.rpcs.<%= method_service.methods.first.name %>.timeout = 20.0
32
32
  # end
33
33
  #
34
34
  <%- end -%>
35
35
  # @!attribute [rw] endpoint
36
36
  # The hostname or hostname:port of the service endpoint.
37
37
  # Defaults to `<%= service.client_endpoint.inspect %>`.
38
- # @return [String]
38
+ # @return [::String]
39
39
  # @!attribute [rw] credentials
40
40
  # Credentials to send with calls. You may provide any of the following types:
41
41
  # * (`String`) The path to a service account key file in JSON format
@@ -47,29 +47,29 @@
47
47
  # * (`GRPC::Core::Channel`) a gRPC channel with included credentials
48
48
  # * (`GRPC::Core::ChannelCredentials`) a gRPC credentails object
49
49
  # * (`nil`) indicating no credentials
50
- # @return [Object]
50
+ # @return [::Object]
51
51
  # @!attribute [rw] scope
52
52
  # The OAuth scopes
53
- # @return [Array<String>]
53
+ # @return [::Array<::String>]
54
54
  # @!attribute [rw] lib_name
55
55
  # The library name as recorded in instrumentation and logging
56
- # @return [String]
56
+ # @return [::String]
57
57
  # @!attribute [rw] lib_version
58
58
  # The library version as recorded in instrumentation and logging
59
- # @return [String]
59
+ # @return [::String]
60
60
  # @!attribute [rw] channel_args
61
61
  # Extra parameters passed to the gRPC channel. Note: this is ignored if a
62
62
  # `GRPC::Core::Channel` object is provided as the credential.
63
- # @return [Hash]
63
+ # @return [::Hash]
64
64
  # @!attribute [rw] interceptors
65
65
  # An array of interceptors that are run before calls are executed.
66
- # @return [Array<GRPC::ClientInterceptor>]
66
+ # @return [::Array<::GRPC::ClientInterceptor>]
67
67
  # @!attribute [rw] timeout
68
- # The call timeout in milliseconds.
69
- # @return [Numeric]
68
+ # The call timeout in seconds.
69
+ # @return [::Numeric]
70
70
  # @!attribute [rw] metadata
71
71
  # Additional gRPC headers to be sent with the call.
72
- # @return [Hash{Symbol=>String}]
72
+ # @return [::Hash{::Symbol=>::String}]
73
73
  # @!attribute [rw] retry_policy
74
74
  # The retry policy. The value is a hash with the following keys:
75
75
  # * `:initial_delay` (*type:* `Numeric`) - The initial delay in seconds.
@@ -77,10 +77,10 @@
77
77
  # * `:multiplier` (*type:* `Numeric`) - The incremental backoff multiplier.
78
78
  # * `:retry_codes` (*type:* `Array<String>`) - The error codes that should
79
79
  # trigger a retry.
80
- # @return [Hash]
80
+ # @return [::Hash]
81
81
  #
82
82
  class Configuration
83
- extend Gapic::Config
83
+ extend ::Gapic::Config
84
84
 
85
85
  config_attr :endpoint, <%= service.client_endpoint.inspect %>, String
86
86
  config_attr :credentials, nil do |value|
@@ -88,14 +88,14 @@ class Configuration
88
88
  allowed += [::GRPC::Core::Channel, ::GRPC::Core::ChannelCredentials] if defined? ::GRPC
89
89
  allowed.any? { |klass| klass === value }
90
90
  end
91
- config_attr :scope, nil, String, Array, nil
92
- config_attr :lib_name, nil, String, nil
93
- config_attr :lib_version, nil, String, nil
94
- config_attr(:channel_args, <%= service.config_channel_args.inspect %>, Hash, nil)
95
- config_attr :interceptors, nil, Array, nil
96
- config_attr :timeout, nil, Numeric, nil
97
- config_attr :metadata, nil, Hash, nil
98
- config_attr :retry_policy, nil, Hash, Proc, nil
91
+ config_attr :scope, nil, ::String, ::Array, nil
92
+ config_attr :lib_name, nil, ::String, nil
93
+ config_attr :lib_version, nil, ::String, nil
94
+ config_attr(:channel_args, <%= service.config_channel_args.inspect %>, ::Hash, nil)
95
+ config_attr :interceptors, nil, ::Array, nil
96
+ config_attr :timeout, nil, ::Numeric, nil
97
+ config_attr :metadata, nil, ::Hash, nil
98
+ config_attr :retry_policy, nil, ::Hash, Proc, nil
99
99
 
100
100
  # @private
101
101
  def initialize parent_config = nil
@@ -137,7 +137,7 @@ class Configuration
137
137
  <%- method_service.methods.each do |method| -%>
138
138
  ##
139
139
  # RPC-specific configuration for `<%= method.name %>`
140
- # @return [Gapic::Config::Method]
140
+ # @return [::Gapic::Config::Method]
141
141
  #
142
142
  attr_reader :<%= method.name %>
143
143
  <%- end -%>
@@ -146,7 +146,7 @@ class Configuration
146
146
  def initialize parent_rpcs = nil
147
147
  <%- method_service.methods.each do |method| -%>
148
148
  <%= method.name %>_config = parent_rpcs&.<%= method.name %> if parent_rpcs&.respond_to? :<%= method.name %>
149
- @<%= method.name %> = Gapic::Config::Method.new <%= method.name %>_config
149
+ @<%= method.name %> = ::Gapic::Config::Method.new <%= method.name %>_config
150
150
  <%- end -%>
151
151
 
152
152
  yield self if block_given?
@@ -3,7 +3,7 @@
3
3
  require "googleauth"
4
4
  <% end %>
5
5
  # Credentials for the <%= service.name %> API.
6
- class <%= service.credentials_name %> < Google::Auth::Credentials
6
+ class <%= service.credentials_name %> < ::Google::Auth::Credentials
7
7
  <%- if service.client_scopes.any? -%>
8
8
  self.scope = [
9
9
  <%- service.client_scopes.each_with_index do |client_scope, index| -%>
@@ -1,10 +1,6 @@
1
1
  <%- assert_locals service -%>
2
2
  <% @requires = capture do %>
3
- require "gapic/common"
4
3
  require "gapic/operation"
5
-
6
- require "<%= service.gem.version_require %>"
7
- require "<%= service.client_require %>"
8
4
  require "<%= service.lro_service.proto_service_require %>"
9
5
  <% end %>
10
6
  # Service that implements Longrunning Operations API.
@@ -69,7 +65,7 @@ class <%= service.operations_name %>
69
65
  credentials = Credentials.new credentials, scope: @config.scope
70
66
  end
71
67
 
72
- @<%= service.lro_service.stub_name %> = Gapic::ServiceStub.new(
68
+ @<%= service.lro_service.stub_name %> = ::Gapic::ServiceStub.new(
73
69
  <%= service.lro_service.proto_service_stub_name_full %>,
74
70
  credentials: credentials,
75
71
  endpoint: @config.endpoint,