gapic-generator 0.2.3 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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,