gapic-generator 0.1.4

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 (150) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +13 -0
  3. data/CHANGELOG.md +43 -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/formatting_utils.rb +109 -0
  30. data/lib/gapic/gem_builder.rb +98 -0
  31. data/lib/gapic/generator.rb +30 -0
  32. data/lib/gapic/generator/version.rb +21 -0
  33. data/lib/gapic/generators/base_generator.rb +91 -0
  34. data/lib/gapic/generators/default_generator.rb +101 -0
  35. data/lib/gapic/grpc_service_config/method_config.rb +49 -0
  36. data/lib/gapic/grpc_service_config/parser.rb +218 -0
  37. data/lib/gapic/grpc_service_config/parsing_error.rb +25 -0
  38. data/lib/gapic/grpc_service_config/retry_policy.rb +51 -0
  39. data/lib/gapic/grpc_service_config/service_config.rb +42 -0
  40. data/lib/gapic/path_template.rb +35 -0
  41. data/lib/gapic/path_template/parser.rb +83 -0
  42. data/lib/gapic/path_template/segment.rb +67 -0
  43. data/lib/gapic/resource_lookup.rb +91 -0
  44. data/lib/gapic/runner.rb +76 -0
  45. data/lib/gapic/schema.rb +17 -0
  46. data/lib/gapic/schema/api.rb +264 -0
  47. data/lib/gapic/schema/loader.rb +269 -0
  48. data/lib/gapic/schema/wrappers.rb +717 -0
  49. data/lib/google/api/annotations.pb.rb +39 -0
  50. data/lib/google/api/client.pb.rb +43 -0
  51. data/lib/google/api/field_behavior.pb.rb +51 -0
  52. data/lib/google/api/http.pb.rb +60 -0
  53. data/lib/google/api/resource.pb.rb +80 -0
  54. data/lib/google/longrunning/operations.pb.rb +115 -0
  55. data/lib/google/protobuf/any.pb.rb +40 -0
  56. data/lib/google/protobuf/compiler/plugin.pb.rb +72 -0
  57. data/lib/google/protobuf/descriptor.pb.rb +359 -0
  58. data/lib/google/protobuf/empty.pb.rb +36 -0
  59. data/lib/google/rpc/status.pb.rb +46 -0
  60. data/templates/default/gem/_version.erb +2 -0
  61. data/templates/default/gem/changelog.erb +3 -0
  62. data/templates/default/gem/gemfile.erb +4 -0
  63. data/templates/default/gem/gemspec.erb +37 -0
  64. data/templates/default/gem/gitignore.erb +20 -0
  65. data/templates/default/gem/license.erb +22 -0
  66. data/templates/default/gem/rakefile.erb +27 -0
  67. data/templates/default/gem/readme.erb +24 -0
  68. data/templates/default/gem/rubocop.erb +59 -0
  69. data/templates/default/gem/version.erb +6 -0
  70. data/templates/default/gem/yardopts.erb +12 -0
  71. data/templates/default/helpers/default_helper.rb +50 -0
  72. data/templates/default/helpers/filepath_helper.rb +38 -0
  73. data/templates/default/helpers/namespace_helper.rb +44 -0
  74. data/templates/default/helpers/presenter_helper.rb +24 -0
  75. data/templates/default/helpers/presenters/enum_presenter.rb +35 -0
  76. data/templates/default/helpers/presenters/enum_value_presenter.rb +33 -0
  77. data/templates/default/helpers/presenters/field_presenter.rb +146 -0
  78. data/templates/default/helpers/presenters/file_presenter.rb +53 -0
  79. data/templates/default/helpers/presenters/gem_presenter.rb +140 -0
  80. data/templates/default/helpers/presenters/message_presenter.rb +66 -0
  81. data/templates/default/helpers/presenters/method_presenter.rb +293 -0
  82. data/templates/default/helpers/presenters/package_presenter.rb +65 -0
  83. data/templates/default/helpers/presenters/resource_presenter.rb +92 -0
  84. data/templates/default/helpers/presenters/sample_presenter.rb +74 -0
  85. data/templates/default/helpers/presenters/service_presenter.rb +276 -0
  86. data/templates/default/layouts/_ruby.erb +20 -0
  87. data/templates/default/package.erb +6 -0
  88. data/templates/default/proto_docs/_enum.erb +13 -0
  89. data/templates/default/proto_docs/_message.erb +23 -0
  90. data/templates/default/proto_docs/_proto_file.erb +9 -0
  91. data/templates/default/proto_docs/proto_file.erb +6 -0
  92. data/templates/default/proto_docs/readme.erb +5 -0
  93. data/templates/default/service.erb +8 -0
  94. data/templates/default/service/client.erb +6 -0
  95. data/templates/default/service/client/_client.erb +137 -0
  96. data/templates/default/service/client/_config.erb +155 -0
  97. data/templates/default/service/client/_credentials.erb +21 -0
  98. data/templates/default/service/client/_helpers.erb +9 -0
  99. data/templates/default/service/client/_operations.erb +88 -0
  100. data/templates/default/service/client/_paths.erb +8 -0
  101. data/templates/default/service/client/_requires.erb +1 -0
  102. data/templates/default/service/client/_resource.erb +6 -0
  103. data/templates/default/service/client/_self_configure.erb +9 -0
  104. data/templates/default/service/client/_self_configure_defaults.erb +22 -0
  105. data/templates/default/service/client/_self_configure_retry_policy.erb +15 -0
  106. data/templates/default/service/client/method/_def.erb +21 -0
  107. data/templates/default/service/client/method/def/_options_defaults.erb +29 -0
  108. data/templates/default/service/client/method/def/_request.erb +6 -0
  109. data/templates/default/service/client/method/def/_request_normal.erb +4 -0
  110. data/templates/default/service/client/method/def/_request_streaming.erb +9 -0
  111. data/templates/default/service/client/method/def/_rescue.erb +1 -0
  112. data/templates/default/service/client/method/def/_response.erb +6 -0
  113. data/templates/default/service/client/method/def/_response_normal.erb +8 -0
  114. data/templates/default/service/client/method/def/_response_paged.erb +9 -0
  115. data/templates/default/service/client/method/docs/_error.erb +2 -0
  116. data/templates/default/service/client/method/docs/_request.erb +6 -0
  117. data/templates/default/service/client/method/docs/_request_field.erb +7 -0
  118. data/templates/default/service/client/method/docs/_request_normal.erb +20 -0
  119. data/templates/default/service/client/method/docs/_request_streaming.erb +5 -0
  120. data/templates/default/service/client/method/docs/_response.erb +6 -0
  121. data/templates/default/service/client/method/docs/_sample.erb +20 -0
  122. data/templates/default/service/client/method/docs/_sample_response.erb +24 -0
  123. data/templates/default/service/client/method/docs/_samples.erb +6 -0
  124. data/templates/default/service/client/method/docs/request_field/_arg.erb +10 -0
  125. data/templates/default/service/client/method/docs/request_field/_hash.erb +19 -0
  126. data/templates/default/service/client/method/docs/sample_response/_comment.erb +5 -0
  127. data/templates/default/service/client/method/docs/sample_response/_define.erb +2 -0
  128. data/templates/default/service/client/method/docs/sample_response/_loop.erb +12 -0
  129. data/templates/default/service/client/method/docs/sample_response/_print.erb +2 -0
  130. data/templates/default/service/client/method/docs/sample_response/_write_file.erb +2 -0
  131. data/templates/default/service/client/resource/_def.erb +6 -0
  132. data/templates/default/service/client/resource/_doc.erb +8 -0
  133. data/templates/default/service/client/resource/_multi.erb +28 -0
  134. data/templates/default/service/client/resource/_single.erb +11 -0
  135. data/templates/default/service/credentials.erb +6 -0
  136. data/templates/default/service/operations.erb +6 -0
  137. data/templates/default/service/paths.erb +6 -0
  138. data/templates/default/service/test/client.erb +24 -0
  139. data/templates/default/service/test/client_operations.erb +24 -0
  140. data/templates/default/service/test/method/_assert_response.erb +11 -0
  141. data/templates/default/service/test/method/_bidi.erb +100 -0
  142. data/templates/default/service/test/method/_client.erb +84 -0
  143. data/templates/default/service/test/method/_normal.erb +69 -0
  144. data/templates/default/service/test/method/_server.erb +85 -0
  145. data/templates/default/service/test/method/_setup.erb +21 -0
  146. data/templates/default/service/test/smoke.erb +12 -0
  147. data/templates/default/shared/_header.erb +4 -0
  148. data/templates/default/shared/_license.erb +21 -0
  149. data/templates/default/shared/_warning.erb +1 -0
  150. metadata +351 -0
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Copyright 2018 Google LLC
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # https://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ $LOAD_PATH.unshift ::File.expand_path("../../lib", __FILE__)
19
+ require "gapic/runner"
20
+ require "google/protobuf/compiler/plugin.pb"
21
+
22
+ # Ensure that no encoding conversions are done on STDIN and STDOUT
23
+ # since we are passing binary data back and forth. Otherwise these
24
+ # streams will be mangled on Windows.
25
+ STDIN.binmode
26
+ STDOUT.binmode
27
+
28
+ request = Google::Protobuf::Compiler::CodeGeneratorRequest.decode STDIN.read
29
+
30
+ # Run the request
31
+ response = Gapic::Runner.run request
32
+
33
+ STDOUT.print response.serialize
@@ -0,0 +1,10 @@
1
+ # This file is to be used as the default config for formatting the generated files.
2
+ # We can't reference the generated .rubocop.yml file because Rubocop is so clevar
3
+ # that it won't find the google-style gem unless the file is referenced here.
4
+ inherit_gem:
5
+ google-style: google-style.yml
6
+
7
+ AllCops:
8
+ Exclude:
9
+ - "*.gemspec"
10
+ - "test/**/*"
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ <%= render partial: "shared/header" -%>
4
+
5
+ gem "gapic-generator"
6
+ require "gapic/runner"
7
+ require "google/protobuf/compiler/plugin.pb"
8
+
9
+ # Ensure that no encoding conversions are done on STDIN and STDOUT
10
+ # since we are passing binary data back and forth. Otherwise these
11
+ # streams will be mangled on Windows.
12
+ STDIN.binmode
13
+ STDOUT.binmode
14
+
15
+ request = Google::Protobuf::Compiler::CodeGeneratorRequest.decode STDIN.read
16
+
17
+ # Run the request, specifying the <%= gem_name %> generator
18
+ response = Gapic::Runner.run request, generator: :<%= gem_name %>
19
+
20
+ STDOUT.print response.serialize
@@ -0,0 +1,39 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+ ##
4
+ # Builder image.
5
+ # Creates /workspace/gapic-generator-<%= gem_name %>.gem
6
+ # to be copied into the final runtime image.
7
+ ##
8
+ FROM ruby:2.6-stretch as builder
9
+ WORKDIR /workspace
10
+
11
+ # Copy code from the local directory.
12
+ COPY . /workspace/
13
+
14
+ # Create a build of the gapic-generator-<%= gem_name %> gem from source.
15
+ RUN gem build -o gapic-generator-<%= gem_name %>.gem \
16
+ gapic-generator-<%= gem_name %>.gemspec
17
+
18
+
19
+ ##
20
+ # Runtime image.
21
+ # Installs the generator executables, common protos, and an entrypoint.
22
+ ##
23
+ FROM ruby:2.6-stretch
24
+ WORKDIR /workspace
25
+
26
+ # Install common protos.
27
+ COPY --from=gcr.io/gapic-images/api-common-protos:beta /protos/ /workspace/common-protos/
28
+
29
+ # Copy gems from the builder.
30
+ COPY --from=builder /workspace/*.gem /workspace/
31
+
32
+ # Install the subgenerator and other needed tools.
33
+ RUN gem install grpc-tools gapic-generator-<%= gem_name %>.gem \
34
+ && rm gapic-generator-<%= gem_name %>.gem \
35
+ && mkdir -p --mode=777 /.cache
36
+
37
+ # Install the entrypoint.
38
+ COPY ./docker-entrypoint.sh /workspace/entrypoint.sh
39
+ ENTRYPOINT ["/workspace/entrypoint.sh"]
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+
3
+ <%= render partial: "shared/license" -%>
4
+
5
+ # enable extended globbing for flag pattern matching
6
+ shopt -s extglob
7
+
8
+ # Parse out options.
9
+ while true; do
10
+ case "$1" in
11
+ --ruby-<%= gem_name %>* ) echo "Skipping unrecognized ruby-<%= gem_name %> flag: $1" >&2; shift ;;
12
+ --* | +([[:word:][:punct:]]) ) shift ;;
13
+ * ) break ;;
14
+ esac
15
+ done
16
+
17
+ mkdir -p /workspace/out/lib
18
+ exec grpc_tools_ruby_protoc \
19
+ --proto_path=/workspace/common-protos/ --proto_path=/workspace/in/ \
20
+ --ruby_out=/workspace/out/lib \
21
+ --grpc_out=/workspace/out/lib \
22
+ --ruby_<%= gem_name %>_out=/workspace/out/ \
23
+ --ruby_<%= gem_name %>_opt="configuration=/workspace/config.yml" \
24
+ `find /workspace/in/ -name *.proto`
@@ -0,0 +1,97 @@
1
+ #!/bin/bash
2
+
3
+ <%= render partial: "shared/license" -%>
4
+
5
+ set -e
6
+
7
+ CMD="$0"
8
+
9
+ # Set variables used by this script.
10
+ # All of these are set in options below, and all but PLUGIN_OPTIONS and
11
+ # PROTO_PATH are required.
12
+ IMAGE=
13
+ IN=
14
+ OUT=
15
+ PLUGIN_OPTIONS=
16
+ PROTO_PATH=`pwd`
17
+ GAPIC_SERVICE_CONFIG=
18
+
19
+ # Print help and exit.
20
+ function show_help {
21
+ cat << EOF
22
+ Usage: $CMD --image IMAGE --in IN_DIR --out OUT_DIR [--path PATH_DIR]
23
+
24
+ Required arguments:
25
+ --image The Docker image to use. The script will attempt to pull
26
+ it if it is not present.
27
+ -i, --in A directory containing the protos describing the API
28
+ to be generated.
29
+ -o, --out Destination directory for the completed client library.
30
+ --config Location of the GAPIC service configuration .yml file.
31
+
32
+ Optional arguments:
33
+ -p, --path The base import path for the protos. Assumed to be the
34
+ current working directory if unspecified.
35
+ -h, --help This help information.
36
+ EOF
37
+
38
+ exit 0
39
+ }
40
+
41
+ # Parse out options.
42
+ while true; do
43
+ case "$1" in
44
+ -h | --help ) show_help ;;
45
+ --image ) IMAGE="$2"; shift 2 ;;
46
+ -i | --in ) IN="$2"; shift 2 ;;
47
+ -o | --out ) OUT="$2"; shift 2 ;;
48
+ -p | --path ) PROTO_PATH=$2; shift 2 ;;
49
+ --config ) GAPIC_SERVICE_CONFIG=$2; shift 2 ;;
50
+ --* ) PLUGIN_OPTIONS="$PLUGIN_OPTIONS $1 $2"; shift 2 ;;
51
+ -- ) shift; break; ;;
52
+ * ) break ;;
53
+ esac
54
+ done
55
+
56
+ # Ensure that all required options are set.
57
+ if [ -z "$IMAGE" ] || [ -z "$IN" ] || [ -z "$OUT" ]; then
58
+ cat << EOF
59
+ Required argument missing.
60
+ The --image, --in, and --out arguments are all required.
61
+ Run $CMD --help for more information.
62
+ EOF
63
+
64
+ exit 64
65
+ fi
66
+
67
+ # Ensure that the input directory exists (and is a directory).
68
+ if ! [ -d ${PROTO_PATH}/${IN} ]; then
69
+ cat << EOF
70
+ Directory does not exist: ${PROTO_PATH}/${IN}
71
+ EOF
72
+ exit 2
73
+ fi
74
+
75
+ # Ensure Docker is running and seems healthy.
76
+ # This is mostly a check to bubble useful errors quickly.
77
+ docker ps > /dev/null
78
+
79
+ # If the output directory does not exist, create it.
80
+ mkdir -p $OUT
81
+
82
+ # If the output directory is not empty, warn (but continue).
83
+ if [ "$(ls -A $OUT )" ]; then
84
+ cat << EOF
85
+ Warning: Output directory is not empty.
86
+ EOF
87
+ fi
88
+
89
+ # Generate the client library.
90
+ docker run \
91
+ --mount type=bind,source=${PROTO_PATH}/${IN},destination=/workspace/in/${IN},readonly \
92
+ --mount type=bind,source=${PROTO_PATH}/${GAPIC_SERVICE_CONFIG},destination=/workspace/config.yml,readonly \
93
+ --mount type=bind,source=${PROTO_PATH}/${OUT},destination=/workspace/out \
94
+ --rm \
95
+ --user $UID \
96
+ $IMAGE \
97
+ $PLUGIN_OPTIONS
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in gapic-generator-<%= gem_name %>.gemspec
8
+ gemspec
@@ -0,0 +1,36 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+
4
+ lib = File.expand_path "lib", __dir__
5
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include? lib
6
+ require "gapic/generator/<%= gem_name %>/version"
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "gapic-generator-<%= gem_name %>"
10
+ spec.version = Gapic::Generator::<%= gem_class_prefix %>::VERSION
11
+ spec.authors = ["Ernest Landrito", "Chris Smith", "Mike Moore"]
12
+ spec.email = ["landrito@google.com", "quartzmo@gmail.com",
13
+ "mike@blowmage.com"]
14
+
15
+ spec.licenses = ["Apache-2.0"]
16
+
17
+ spec.summary = "An API Client Generator for Ruby in Ruby!"
18
+ spec.homepage = "https://github.com/googleapis/gapic-generator-ruby"
19
+
20
+ spec.files = Dir.glob("bin/*") + Dir.glob("lib/**/*.rb") +
21
+ Dir.glob("templates/**/*.{rb,erb}") +
22
+ Dir.glob("*.md")
23
+ spec.bindir = "bin"
24
+ spec.executables = ["protoc-gen-ruby_<%= gem_name %>"]
25
+ spec.require_paths = ["lib"]
26
+
27
+ spec.add_dependency "actionpack", "~> 5.2"
28
+ spec.add_dependency "gapic-generator", "~> 0.0.0.dev"
29
+ spec.add_dependency "protobuf", "~> 3.8"
30
+ spec.add_dependency "rubocop", "~> 0.61"
31
+
32
+ spec.add_development_dependency "bundler", "~> 2.1"
33
+ spec.add_development_dependency "minitest", "~> 5.0"
34
+ spec.add_development_dependency "minitest-focus", "~> 1.0"
35
+ spec.add_development_dependency "rake", "~> 10.0"
36
+ end
@@ -0,0 +1,37 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+
4
+ require "gapic/generators/default_generator"
5
+
6
+ module Gapic
7
+ module Generators
8
+ # The generator orchestrates the rendering of templates for
9
+ # <%= gem_class_prefix %> projects.
10
+ class <%= gem_class_prefix %>Generator < DefaultGenerator
11
+ # Initializes the generator.
12
+ #
13
+ # @param api [Gapic::Schema::Api] The API model/context to
14
+ # generate.
15
+ def initialize api
16
+ super
17
+
18
+ # Configure to use prefer <%= gem_class_prefix %> templates
19
+ template_path = File.join __dir__,
20
+ "../../../templates/<%= gem_name %>"
21
+ use_templates! template_path
22
+
23
+ # Configure these helper method to be used by the generator
24
+ # use_helpers! :helper_method1, :helper_method2, :helper_method3
25
+ end
26
+
27
+ # Generates all the files for the API.
28
+ #
29
+ # @return [Array<
30
+ # Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
31
+ # The files that were generated for the API.
32
+ def generate
33
+ super
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,10 @@
1
+ Gemfile.lock
2
+ .DS_STORE
3
+ /.bundle/
4
+ /.yardoc
5
+ /_yardoc/
6
+ /coverage/
7
+ /doc/
8
+ /pkg/
9
+ /spec/reports/
10
+ /tmp/
@@ -0,0 +1,29 @@
1
+ <%= render partial: "shared/header" -%>
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rubocop/rake_task"
5
+ require "rake/testtask"
6
+
7
+ RuboCop::RakeTask.new # Configuration is in .rubocop.yml
8
+ Rake::TestTask.new :test do |t|
9
+ t.libs << "test"
10
+ t.libs << "lib"
11
+ t.test_files = FileList["test/**/*_test.rb"]
12
+ end
13
+
14
+ desc "Run the CI build"
15
+ task :ci do
16
+ puts "\nBUILDING gapic-generator-<%= gem_name %>\n"
17
+ puts "\ngapic-generator-<%= gem_name %> rubocop\n"
18
+ Rake::Task[:rubocop].invoke
19
+ puts "\ngapic-generator-<%= gem_name %> test\n"
20
+ Rake::Task[:test].invoke
21
+ end
22
+
23
+ desc "Build the docker image."
24
+ task :image, :name do |_t, args|
25
+ image_name = args[:name] || "ruby-gapic-generator-<%= gem_name %>"
26
+ sh "docker build -t #{image_name} ."
27
+ end
28
+
29
+ task default: :ci
@@ -0,0 +1,69 @@
1
+ # <%= gem_class_prefix %> Generator for Ruby
2
+
3
+ Create Ruby clients from a protocol buffer description of an API.
4
+
5
+ **Note** This project is a preview. Please try it out and let us know what you think,
6
+ but there are currently no guarantees of stability or support.
7
+
8
+ ## Usage
9
+ ### Install the Proto Compiler
10
+ This generator relies on the Protocol Buffer Compiler to [orchestrate] the
11
+ client generation.
12
+
13
+ ```sh
14
+ # Declare the protobuf version to use.
15
+ $ export PROTOBUF_VERSION=3.6.1
16
+
17
+ # Declare the target installation system.
18
+ # export SYSTEM=osx
19
+ $ export SYSTEM=linux
20
+
21
+ # Get the precompiled protobuf compiler.
22
+ $ curl --location https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip > usr/src/protoc/protoc-${PROTOBUF_VERSION}.zip
23
+ $ cd /usr/src/protoc/
24
+ $ unzip protoc-${PROTOBUF_VERSION}.zip
25
+ $ rm protoc-${PROTOBUF_VERSION}.zip
26
+
27
+ # Link the protoc to the path.
28
+ $ ln -s /usr/src/protoc/bin/protoc /usr/local/bin/protoc
29
+ $ mkdir -p /protos/
30
+
31
+ # Move the common protobuf files to the local include folder.
32
+ $ cp -R /usr/src/protoc/include/* /usr/local/include/
33
+ ```
34
+
35
+ [orchestrate]: https://developers.google.com/protocol-buffers/docs/reference/ruby-generated
36
+
37
+ ### Build and Install the Generator
38
+ This tool is in pre-alpha so it is not yet released to RubyGems. You will have to
39
+ build the generator from scratch.
40
+
41
+ ```sh
42
+ $ git clone https://github.com/googleapis/gapic-generator-ruby.git
43
+ $ cd gapic-generator-ruby
44
+ $ gem build gapic-generator.gemspec
45
+ $ gem install gapic-generator-0.1.0.gem
46
+ $ which protoc-gen-ruby_gapic
47
+ > {Non-empty path}
48
+ ```
49
+
50
+ ### Generate an API
51
+ Installing this generator exposes `protoc-gen-ruby_gapic` on the PATH. By doing
52
+ so, it gives the protobuf compiler the CLI option `--ruby_gapic_out` on which
53
+ you can specify an output path for this generator.
54
+
55
+ If you want to experiment with an already-existing API, one example is available.
56
+ Note: You need to clone the googleapis repository from GitHub, and change
57
+ to a special branch:
58
+ ```sh
59
+ # Get the protos and it's dependencies.
60
+ $ git clone git@github.com:googleapis/api-common-protos.git
61
+ $ git clone git@github.com:googleapis/googleapis.git
62
+ $ cd googleapis
63
+ $ git checkout --track -b input-contract origin/input-contract
64
+
65
+ # Now you're ready to compile the API.
66
+ $ protoc google/<%= gem_name %>/vision/v1/*.proto \
67
+ --proto_path=../api-common-protos/ --proto_path=. \
68
+ --ruby_gapic_out=/dest/
69
+ ```
@@ -0,0 +1,16 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.5
3
+ Exclude:
4
+ - expected_output/**/*
5
+
6
+ Documentation:
7
+ Enabled: false
8
+
9
+ Style/StringLiterals:
10
+ EnforcedStyle: double_quotes
11
+ Style/MethodCallWithArgsParentheses:
12
+ Enabled: true
13
+ EnforcedStyle: omit_parentheses
14
+ AllowParenthesesInMultilineCall: true
15
+ Style/MethodDefParentheses:
16
+ EnforcedStyle: require_no_parentheses