gapic-generator 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +13 -0
  3. data/CHANGELOG.md +34 -0
  4. data/CODE_OF_CONDUCT.md +43 -0
  5. data/CONTRIBUTING.md +28 -0
  6. data/LICENSE +202 -0
  7. data/README.md +72 -0
  8. data/bin/gapic-generator +103 -0
  9. data/bin/protoc-gen-ruby_gapic +33 -0
  10. data/default-rubocop.yml +10 -0
  11. data/gem_templates/binary.erb +20 -0
  12. data/gem_templates/dockerfile.erb +39 -0
  13. data/gem_templates/entrypoint.erb +24 -0
  14. data/gem_templates/gapic_sh.erb +97 -0
  15. data/gem_templates/gemfile.erb +8 -0
  16. data/gem_templates/gemspec.erb +36 -0
  17. data/gem_templates/generator.erb +37 -0
  18. data/gem_templates/gitignore.erb +10 -0
  19. data/gem_templates/rakefile.erb +29 -0
  20. data/gem_templates/readme.erb +69 -0
  21. data/gem_templates/rubocop.erb +16 -0
  22. data/gem_templates/shared/_header.erb +4 -0
  23. data/gem_templates/shared/_license.erb +13 -0
  24. data/gem_templates/shared/_warning.erb +1 -0
  25. data/gem_templates/test_generator.erb +13 -0
  26. data/gem_templates/test_helper.erb +25 -0
  27. data/gem_templates/version.erb +10 -0
  28. data/lib/gapic/file_formatter.rb +62 -0
  29. data/lib/gapic/gem_builder.rb +98 -0
  30. data/lib/gapic/generator.rb +30 -0
  31. data/lib/gapic/generator/version.rb +21 -0
  32. data/lib/gapic/generators/base_generator.rb +91 -0
  33. data/lib/gapic/generators/default_generator.rb +101 -0
  34. data/lib/gapic/grpc_service_config/method_config.rb +49 -0
  35. data/lib/gapic/grpc_service_config/parser.rb +218 -0
  36. data/lib/gapic/grpc_service_config/parsing_error.rb +25 -0
  37. data/lib/gapic/grpc_service_config/retry_policy.rb +51 -0
  38. data/lib/gapic/grpc_service_config/service_config.rb +42 -0
  39. data/lib/gapic/path_template.rb +35 -0
  40. data/lib/gapic/path_template/parser.rb +83 -0
  41. data/lib/gapic/path_template/segment.rb +67 -0
  42. data/lib/gapic/resource_lookup.rb +91 -0
  43. data/lib/gapic/runner.rb +76 -0
  44. data/lib/gapic/schema.rb +17 -0
  45. data/lib/gapic/schema/api.rb +264 -0
  46. data/lib/gapic/schema/loader.rb +269 -0
  47. data/lib/gapic/schema/wrappers.rb +718 -0
  48. data/lib/google/api/annotations.pb.rb +39 -0
  49. data/lib/google/api/client.pb.rb +43 -0
  50. data/lib/google/api/field_behavior.pb.rb +51 -0
  51. data/lib/google/api/http.pb.rb +60 -0
  52. data/lib/google/api/resource.pb.rb +80 -0
  53. data/lib/google/longrunning/operations.pb.rb +115 -0
  54. data/lib/google/protobuf/any.pb.rb +40 -0
  55. data/lib/google/protobuf/compiler/plugin.pb.rb +72 -0
  56. data/lib/google/protobuf/descriptor.pb.rb +359 -0
  57. data/lib/google/protobuf/empty.pb.rb +36 -0
  58. data/lib/google/rpc/status.pb.rb +46 -0
  59. data/templates/default/gem/_version.erb +2 -0
  60. data/templates/default/gem/changelog.erb +3 -0
  61. data/templates/default/gem/gemfile.erb +4 -0
  62. data/templates/default/gem/gemspec.erb +37 -0
  63. data/templates/default/gem/gitignore.erb +18 -0
  64. data/templates/default/gem/license.erb +22 -0
  65. data/templates/default/gem/rakefile.erb +27 -0
  66. data/templates/default/gem/readme.erb +24 -0
  67. data/templates/default/gem/rubocop.erb +59 -0
  68. data/templates/default/gem/version.erb +6 -0
  69. data/templates/default/gem/yardopts.erb +12 -0
  70. data/templates/default/helpers/default_helper.rb +45 -0
  71. data/templates/default/helpers/filepath_helper.rb +38 -0
  72. data/templates/default/helpers/namespace_helper.rb +44 -0
  73. data/templates/default/helpers/presenter_helper.rb +24 -0
  74. data/templates/default/helpers/presenters/enum_presenter.rb +35 -0
  75. data/templates/default/helpers/presenters/enum_value_presenter.rb +33 -0
  76. data/templates/default/helpers/presenters/field_presenter.rb +146 -0
  77. data/templates/default/helpers/presenters/file_presenter.rb +53 -0
  78. data/templates/default/helpers/presenters/gem_presenter.rb +140 -0
  79. data/templates/default/helpers/presenters/message_presenter.rb +66 -0
  80. data/templates/default/helpers/presenters/method_presenter.rb +293 -0
  81. data/templates/default/helpers/presenters/package_presenter.rb +65 -0
  82. data/templates/default/helpers/presenters/resource_presenter.rb +92 -0
  83. data/templates/default/helpers/presenters/sample_presenter.rb +74 -0
  84. data/templates/default/helpers/presenters/service_presenter.rb +276 -0
  85. data/templates/default/layouts/_ruby.erb +20 -0
  86. data/templates/default/package.erb +6 -0
  87. data/templates/default/proto_docs/_enum.erb +13 -0
  88. data/templates/default/proto_docs/_message.erb +23 -0
  89. data/templates/default/proto_docs/_proto_file.erb +9 -0
  90. data/templates/default/proto_docs/proto_file.erb +6 -0
  91. data/templates/default/proto_docs/readme.erb +5 -0
  92. data/templates/default/service.erb +8 -0
  93. data/templates/default/service/client.erb +6 -0
  94. data/templates/default/service/client/_client.erb +137 -0
  95. data/templates/default/service/client/_config.erb +155 -0
  96. data/templates/default/service/client/_credentials.erb +21 -0
  97. data/templates/default/service/client/_helpers.erb +9 -0
  98. data/templates/default/service/client/_operations.erb +88 -0
  99. data/templates/default/service/client/_paths.erb +8 -0
  100. data/templates/default/service/client/_requires.erb +1 -0
  101. data/templates/default/service/client/_resource.erb +6 -0
  102. data/templates/default/service/client/_self_configure.erb +9 -0
  103. data/templates/default/service/client/_self_configure_defaults.erb +22 -0
  104. data/templates/default/service/client/_self_configure_retry_policy.erb +15 -0
  105. data/templates/default/service/client/method/_def.erb +21 -0
  106. data/templates/default/service/client/method/def/_options_defaults.erb +29 -0
  107. data/templates/default/service/client/method/def/_request.erb +6 -0
  108. data/templates/default/service/client/method/def/_request_normal.erb +4 -0
  109. data/templates/default/service/client/method/def/_request_streaming.erb +9 -0
  110. data/templates/default/service/client/method/def/_rescue.erb +1 -0
  111. data/templates/default/service/client/method/def/_response.erb +6 -0
  112. data/templates/default/service/client/method/def/_response_normal.erb +8 -0
  113. data/templates/default/service/client/method/def/_response_paged.erb +9 -0
  114. data/templates/default/service/client/method/docs/_error.erb +2 -0
  115. data/templates/default/service/client/method/docs/_request.erb +6 -0
  116. data/templates/default/service/client/method/docs/_request_field.erb +7 -0
  117. data/templates/default/service/client/method/docs/_request_normal.erb +20 -0
  118. data/templates/default/service/client/method/docs/_request_streaming.erb +5 -0
  119. data/templates/default/service/client/method/docs/_response.erb +6 -0
  120. data/templates/default/service/client/method/docs/_sample.erb +20 -0
  121. data/templates/default/service/client/method/docs/_sample_response.erb +24 -0
  122. data/templates/default/service/client/method/docs/_samples.erb +6 -0
  123. data/templates/default/service/client/method/docs/request_field/_arg.erb +10 -0
  124. data/templates/default/service/client/method/docs/request_field/_hash.erb +19 -0
  125. data/templates/default/service/client/method/docs/sample_response/_comment.erb +5 -0
  126. data/templates/default/service/client/method/docs/sample_response/_define.erb +2 -0
  127. data/templates/default/service/client/method/docs/sample_response/_loop.erb +12 -0
  128. data/templates/default/service/client/method/docs/sample_response/_print.erb +2 -0
  129. data/templates/default/service/client/method/docs/sample_response/_write_file.erb +2 -0
  130. data/templates/default/service/client/resource/_def.erb +6 -0
  131. data/templates/default/service/client/resource/_doc.erb +8 -0
  132. data/templates/default/service/client/resource/_multi.erb +28 -0
  133. data/templates/default/service/client/resource/_single.erb +11 -0
  134. data/templates/default/service/credentials.erb +6 -0
  135. data/templates/default/service/operations.erb +6 -0
  136. data/templates/default/service/paths.erb +6 -0
  137. data/templates/default/service/test/client.erb +24 -0
  138. data/templates/default/service/test/client_operations.erb +24 -0
  139. data/templates/default/service/test/method/_assert_response.erb +11 -0
  140. data/templates/default/service/test/method/_bidi.erb +100 -0
  141. data/templates/default/service/test/method/_client.erb +84 -0
  142. data/templates/default/service/test/method/_normal.erb +69 -0
  143. data/templates/default/service/test/method/_server.erb +85 -0
  144. data/templates/default/service/test/method/_setup.erb +21 -0
  145. data/templates/default/service/test/smoke.erb +12 -0
  146. data/templates/default/shared/_header.erb +4 -0
  147. data/templates/default/shared/_license.erb +21 -0
  148. data/templates/default/shared/_warning.erb +1 -0
  149. metadata +350 -0
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ <%= render partial: "shared/license" %>
4
+ <%= render partial: "shared/warning" -%>
@@ -0,0 +1,13 @@
1
+ # Copyright [yyyy] [name of copyright owner]
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
@@ -0,0 +1 @@
1
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
@@ -0,0 +1,13 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+ require "test_helper"
4
+ require "gapic/generators/<%= gem_name %>_generator"
5
+
6
+ class <%= gem_class_prefix %>GeneratorTest < GeneratorTest
7
+ def test_speech_generate
8
+ generator = Gapic::Generators::<%= gem_class_prefix %>Generator.new api(:speech)
9
+ generator.generate.each do |file|
10
+ assert_equal expected_content("<%= gem_name %>/#{file.name}"), file.content
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,25 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
+ require "gapic/generators/<%= gem_name %>_generator"
5
+
6
+ require "minitest/autorun"
7
+ require "minitest/focus"
8
+
9
+ class GeneratorTest < Minitest::Test
10
+ def proto_input service
11
+ File.binread "proto_input/#{service}_desc.bin"
12
+ end
13
+
14
+ def request service
15
+ Google::Protobuf::Compiler::CodeGeneratorRequest.decode proto_input(service)
16
+ end
17
+
18
+ def api service
19
+ Gapic::Schema::Api.new request(service)
20
+ end
21
+
22
+ def expected_content filename
23
+ File.read "expected_output/#{filename}"
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+
4
+ module Gapic
5
+ module Generator
6
+ module <%= gem_class_prefix %>
7
+ VERSION = "0.1.0"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,62 @@
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 "tmpdir"
18
+ require "fileutils"
19
+
20
+ module Gapic
21
+ ##
22
+ # File Formatter
23
+ class FileFormatter
24
+ attr_reader :configuration, :files
25
+
26
+ ##
27
+ # Create a new file formatter object
28
+ #
29
+ # @param path_template [String] The URI path template to be parsed.
30
+ def initialize configuration, files
31
+ @configuration = configuration
32
+ @files = format! configuration, files
33
+ end
34
+
35
+ protected
36
+
37
+ def format! configuration, files
38
+ Dir.mktmpdir do |dir|
39
+ files.each do |file|
40
+ write_file dir, file
41
+ end
42
+
43
+ system "rubocop -x #{dir} -o #{dir}/rubocop.out -c #{configuration}"
44
+
45
+ files.each do |file|
46
+ read_file dir, file
47
+ end
48
+ end
49
+ end
50
+
51
+ def write_file dir, file
52
+ tmp_file = File.join dir, file.name
53
+ FileUtils.mkdir_p File.dirname tmp_file
54
+ File.write tmp_file, file.content
55
+ end
56
+
57
+ def read_file dir, file
58
+ tmp_file = File.join dir, file.name
59
+ file.content = File.read tmp_file
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,98 @@
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 "fileutils"
18
+ require "action_controller"
19
+ require "active_support/inflector"
20
+
21
+ module Gapic
22
+ ##
23
+ # The builder created files for new extension gems.
24
+ class GemBuilder
25
+ ##
26
+ # Initializes the builder.
27
+ #
28
+ # @param name [String] The name of the new extension gem.
29
+ # @param path [String] The directory to write the gem files.
30
+ #
31
+ def initialize name, path
32
+ @name = name
33
+ @path = path
34
+ end
35
+
36
+ ##
37
+ # Writes all the files for the gem.
38
+ #
39
+ def bootstrap
40
+ gen "readme.erb", "README.md"
41
+ gen "gemspec.erb", "gapic-generator-#{gem_name}.gemspec"
42
+ gen "rakefile.erb", "Rakefile"
43
+ gen "gemfile.erb", "Gemfile"
44
+ gen "gitignore.erb", ".gitignore"
45
+ gen "rubocop.erb", ".rubocop.yml"
46
+ gen "dockerfile.erb", "Dockerfile"
47
+ gen "entrypoint.erb", "docker-entrypoint.sh"
48
+ gen "gapic_sh.erb", "gapic.sh"
49
+ gen "binary.erb", "bin/protoc-gen-ruby_#{gem_name}"
50
+ gen "generator.erb",
51
+ "lib/gapic/generators/#{gem_name}_generator.rb"
52
+ gen "version.erb",
53
+ "lib/gapic/generator/#{gem_name}/version.rb"
54
+ gen "test_helper.erb", "test/test_helper.rb"
55
+ gen "test_generator.erb", "test/generators/#{gem_name}_test.rb"
56
+ cp "speech_desc.bin", "proto_input/speech_desc.bin"
57
+ end
58
+
59
+ private
60
+
61
+ def template_path
62
+ File.join __dir__, "../../gem_templates"
63
+ end
64
+
65
+ def gem_name
66
+ ActiveSupport::Inflector.underscore @name
67
+ end
68
+
69
+ def gem_class_prefix
70
+ ActiveSupport::Inflector.camelize @name
71
+ end
72
+
73
+ def controller
74
+ @controller ||= Class.new(ActionController::Base).new.tap do |c|
75
+ # Configure the controller to know about the templates
76
+ c.prepend_view_path template_path
77
+ end
78
+ end
79
+
80
+ def cp from, to
81
+ input_path = File.join template_path, from
82
+ target_path = File.join @path, to
83
+ FileUtils.mkdir_p File.dirname(target_path)
84
+ FileUtils.cp input_path, target_path
85
+ end
86
+
87
+ def gen template, filename
88
+ content = controller.render_to_string(
89
+ template: template,
90
+ formats: :text,
91
+ locals: { gem_name: gem_name, gem_class_prefix: gem_class_prefix }
92
+ )
93
+ target_path = File.join @path, filename
94
+ FileUtils.mkdir_p File.dirname(target_path)
95
+ File.write target_path, content
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 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 "active_support/inflector"
18
+
19
+ module Gapic
20
+ # TODO: Enter docs
21
+ # Dooooooooocs!!!
22
+ module Generator
23
+ def self.find type = nil
24
+ type ||= "default"
25
+ type_const = ActiveSupport::Inflector.camelize type
26
+ require "gapic/generators/#{type}_generator"
27
+ Kernel.const_get "Gapic::Generators::#{type_const}Generator"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 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 Generator
19
+ VERSION = "0.1.2"
20
+ end
21
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 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/file_formatter"
18
+ require "action_controller"
19
+ require "google/protobuf/compiler/plugin.pb"
20
+ require "tempfile"
21
+
22
+ module Gapic
23
+ module Generators
24
+ # The generator orchestrates the rendering of templates.
25
+ class BaseGenerator
26
+ # Initializes the generator.
27
+ #
28
+ # @param api [Gapic::Schema::Api] The API model/context to
29
+ # generate.
30
+ def initialize api
31
+ @api = api
32
+ end
33
+
34
+ # Generates all the files for the API.
35
+ #
36
+ # @return [Array<
37
+ # Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
38
+ # The files that were generated for the API.
39
+ def generate
40
+ raise "must implement"
41
+ end
42
+
43
+ private
44
+
45
+ def use_templates! template_path
46
+ template_path = File.expand_path template_path
47
+ helpers_path = File.join template_path, "helpers"
48
+
49
+ # Configure Dependencies to know how to load helpers
50
+ ActiveSupport::Dependencies.autoload_paths.prepend helpers_path
51
+
52
+ # Configure the controller to know about the templates and helpers
53
+ controller.prepend_view_path template_path
54
+ controller.class.helper \
55
+ controller.class.all_helpers_from_path helpers_path
56
+ end
57
+
58
+ def use_helpers! *helper_methods
59
+ helper_methods.each do |helper_method|
60
+ define_singleton_method helper_method do |*args|
61
+ controller.class.helpers.method(helper_method).call(*args)
62
+ end
63
+ end
64
+ end
65
+
66
+ def controller
67
+ # Each controller gets a new class, so multiple generators can be
68
+ # active at the same time without stomping on each other.
69
+ @controller ||= Class.new(ActionController::Base).new
70
+ end
71
+
72
+ def generate_file template, filename, **args
73
+ content = controller.render_to_string(
74
+ template: template, formats: :text, locals: args
75
+ )
76
+ Google::Protobuf::Compiler::CodeGeneratorResponse::File.new(
77
+ name: filename, content: content
78
+ )
79
+ end
80
+ alias_method :g, :generate_file
81
+
82
+ def format_files files
83
+ FileFormatter.new(format_config, files).files
84
+ end
85
+
86
+ def format_config
87
+ File.expand_path File.join __dir__, "../../../default-rubocop.yml"
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 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/generators/base_generator"
18
+
19
+ module Gapic
20
+ module Generators
21
+ # The generator orchestrates the rendering of templates.
22
+ class DefaultGenerator < BaseGenerator
23
+ # Initializes the generator.
24
+ #
25
+ # @param api [Gapic::Schema::Api] The API model/context to
26
+ # generate.
27
+ def initialize api
28
+ super
29
+
30
+ # Configure to use a custom templates directory
31
+ use_templates! File.join __dir__, "../../../templates/default"
32
+
33
+ # Configure these helper method to be used by the generator
34
+ use_helpers! :gem_presenter
35
+ end
36
+
37
+ # Disable Rubocop because we expect generate to grow and violate more
38
+ # and more style rules.
39
+ # rubocop:disable all
40
+
41
+ # Generates all the files for the API.
42
+ #
43
+ # @return [Array<
44
+ # Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
45
+ # The files that were generated for the API.
46
+ def generate
47
+ files = []
48
+
49
+ gem = gem_presenter @api
50
+
51
+ gem.packages.each do |package|
52
+ # Package level files
53
+ files << g("package.erb", "lib/#{package.package_file_path}", package: package)
54
+
55
+ package.services.each do |service|
56
+ # Service level files
57
+ files << g("service.erb", "lib/#{service.service_file_path}", service: service)
58
+ files << g("service/client.erb", "lib/#{service.client_file_path}", service: service)
59
+ files << g("service/credentials.erb", "lib/#{service.credentials_file_path}", service: service)
60
+ files << g("service/paths.erb", "lib/#{service.paths_file_path}", service: service) if service.paths?
61
+ files << g("service/operations.erb", "lib/#{service.operations_file_path}", service: service) if service.lro?
62
+ files << g("service/test/client.erb", "test/#{service.test_client_file_path}", service: service)
63
+ files << g("service/test/client_operations.erb", "test/#{service.test_client_operations_file_path}", service: service) if service.lro?
64
+ end
65
+ end
66
+
67
+ # Gem level files
68
+ files << g("gem/gitignore.erb", ".gitignore", gem: gem)
69
+ files << g("gem/version.erb", "lib/#{gem.version_file_path}", 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
+
79
+ gem.proto_files.each do |proto_file|
80
+ files << g("proto_docs/proto_file.erb", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
81
+ end
82
+ files << g("proto_docs/readme.erb", "proto_docs/README.md", gem: gem)
83
+
84
+ format_files files
85
+
86
+ files
87
+ end
88
+
89
+ # rubocop:enable all
90
+
91
+ private
92
+
93
+ ##
94
+ # Override the default rubocop config file to be used.
95
+ def format_config
96
+ @api.configuration[:format_config] ||
97
+ super
98
+ end
99
+ end
100
+ end
101
+ end