gapic-generator-cloud 0.5.0
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.
- checksums.yaml +7 -0
 - data/CHANGELOG.md +117 -0
 - data/CONTRIBUTING.md +28 -0
 - data/LICENSE +202 -0
 - data/README.md +84 -0
 - data/bin/protoc-gen-ruby_cloud +33 -0
 - data/bin/ruby-cloud-docker-entrypoint +130 -0
 - data/cloud-rubocop.yml +14 -0
 - data/lib/gapic/generator/cloud/version.rb +24 -0
 - data/lib/gapic/generators/cloud_generator.rb +119 -0
 - data/lib/gapic/presenters/wrapper_gem_presenter.rb +137 -0
 - data/lib/gapic/presenters/wrapper_service_presenter.rb +53 -0
 - data/templates/cloud/gem/authentication.erb +172 -0
 - data/templates/cloud/gem/gemspec.erb +40 -0
 - data/templates/cloud/gem/gitignore.erb +23 -0
 - data/templates/cloud/gem/license.erb +204 -0
 - data/templates/cloud/gem/rakefile.erb +157 -0
 - data/templates/cloud/gem/readme.erb +93 -0
 - data/templates/cloud/gem/repo-metadata.erb +6 -0
 - data/templates/cloud/gem/rubocop.erb +36 -0
 - data/templates/cloud/gem/yardopts.erb +13 -0
 - data/templates/cloud/service/client/_credentials.erb +30 -0
 - data/templates/cloud/service/client/_requires.erb +2 -0
 - data/templates/cloud/service/client/_self_configure.erb +15 -0
 - data/templates/cloud/service/client/method/def/_rescue.erb +3 -0
 - data/templates/cloud/service/client/method/docs/_error.erb +2 -0
 - data/templates/cloud/shared/_license.erb +13 -0
 - data/templates/cloud/wrapper_gem/_main.erb +102 -0
 - data/templates/cloud/wrapper_gem/client_test.erb +22 -0
 - data/templates/cloud/wrapper_gem/entrypoint.erb +4 -0
 - data/templates/cloud/wrapper_gem/gemfile.erb +14 -0
 - data/templates/cloud/wrapper_gem/gemspec.erb +39 -0
 - data/templates/cloud/wrapper_gem/main.erb +5 -0
 - data/templates/cloud/wrapper_gem/rakefile.erb +190 -0
 - data/templates/cloud/wrapper_gem/readme.erb +95 -0
 - data/templates/cloud/wrapper_gem/rubocop.erb +23 -0
 - data/templates/cloud/wrapper_gem/version_test.erb +11 -0
 - data/templates/cloud/wrapper_gem/yardopts.erb +15 -0
 - metadata +226 -0
 
| 
         @@ -0,0 +1,130 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            # Copyright 2020 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 
     | 
    
         
            +
            #     http://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 
     | 
    
         
            +
            require "optparse"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require "fileutils"
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # Boolean options may have values "true" or "false" (as strings)
         
     | 
| 
      
 22 
     | 
    
         
            +
            bool_option_map = {
         
     | 
| 
      
 23 
     | 
    
         
            +
              ":gem.:free_tier" => "ruby-cloud-free-tier",
         
     | 
| 
      
 24 
     | 
    
         
            +
              ":gem.:yard_strict" => "ruby-cloud-yard-strict"
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            # Value options always take string values.
         
     | 
| 
      
 28 
     | 
    
         
            +
            value_option_map = {
         
     | 
| 
      
 29 
     | 
    
         
            +
              "configuration" => "ruby-cloud-config",
         
     | 
| 
      
 30 
     | 
    
         
            +
              ":gem.:name" => "ruby-cloud-gem-name",
         
     | 
| 
      
 31 
     | 
    
         
            +
              ":gem.:namespace" => "ruby-cloud-gem-namespace",
         
     | 
| 
      
 32 
     | 
    
         
            +
              ":gem.:title" => "ruby-cloud-title",
         
     | 
| 
      
 33 
     | 
    
         
            +
              ":gem.:description" => "ruby-cloud-description",
         
     | 
| 
      
 34 
     | 
    
         
            +
              ":gem.:summary" => "ruby-cloud-summary",
         
     | 
| 
      
 35 
     | 
    
         
            +
              ":gem.:homepage" => "ruby-cloud-homepage",
         
     | 
| 
      
 36 
     | 
    
         
            +
              ":gem.:env_prefix" => "ruby-cloud-env-prefix",
         
     | 
| 
      
 37 
     | 
    
         
            +
              ":gem.:version_dependencies" => "ruby-cloud-wrapper-of",
         
     | 
| 
      
 38 
     | 
    
         
            +
              ":gem.:migration_version" => "ruby-cloud-migration-version",
         
     | 
| 
      
 39 
     | 
    
         
            +
              ":gem.:product_documentation_url" => "ruby-cloud-product-url",
         
     | 
| 
      
 40 
     | 
    
         
            +
              ":gem.:api_id" => "ruby-cloud-api-id",
         
     | 
| 
      
 41 
     | 
    
         
            +
              ":gem.:factory_method_suffix" => "ruby-cloud-factory-method-suffix"
         
     | 
| 
      
 42 
     | 
    
         
            +
            }
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            # Path options take one or more file paths delimited by semicolons.
         
     | 
| 
      
 45 
     | 
    
         
            +
            path_option_map = {
         
     | 
| 
      
 46 
     | 
    
         
            +
              "samples" => ["ruby-cloud-samples", "samples"],
         
     | 
| 
      
 47 
     | 
    
         
            +
              "grpc_service_config" => "ruby-cloud-grpc-service-config"
         
     | 
| 
      
 48 
     | 
    
         
            +
            }
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            # Map options take one or more mappings delimited by semicolons. Each mapping
         
     | 
| 
      
 51 
     | 
    
         
            +
            # must be of the form "key=value". Note that periods in keys are treated as
         
     | 
| 
      
 52 
     | 
    
         
            +
            # literal periods, not subkey delimiters.
         
     | 
| 
      
 53 
     | 
    
         
            +
            map_option_map = {
         
     | 
| 
      
 54 
     | 
    
         
            +
              ":common_services" => "ruby-cloud-common-services",
         
     | 
| 
      
 55 
     | 
    
         
            +
              ":overrides.:file_path" => "ruby-cloud-path-override",
         
     | 
| 
      
 56 
     | 
    
         
            +
              ":overrides.:namespace" => "ruby-cloud-namespace-override"
         
     | 
| 
      
 57 
     | 
    
         
            +
            }
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            # A set of files that, if generated, should be removed.
         
     | 
| 
      
 60 
     | 
    
         
            +
            remove_paths = [
         
     | 
| 
      
 61 
     | 
    
         
            +
              "lib/google/iam/v1/iam_policy_pb.rb",
         
     | 
| 
      
 62 
     | 
    
         
            +
              "lib/google/cloud/common_resources_pb.rb"
         
     | 
| 
      
 63 
     | 
    
         
            +
            ]
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            parameters = {}
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            OptionParser.new do |op|
         
     | 
| 
      
 68 
     | 
    
         
            +
              bool_option_map.each do |key, flags|
         
     | 
| 
      
 69 
     | 
    
         
            +
                flags = Array(flags).map { |f| "--#{f} BOOL" }
         
     | 
| 
      
 70 
     | 
    
         
            +
                op.on(*flags) do |val|
         
     | 
| 
      
 71 
     | 
    
         
            +
                  val = val.downcase
         
     | 
| 
      
 72 
     | 
    
         
            +
                  parameters[key] = val if ["true", "false"].include? val
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
              value_option_map.each do |key, flags|
         
     | 
| 
      
 76 
     | 
    
         
            +
                flags = Array(flags).map { |f| "--#{f} VAL" }
         
     | 
| 
      
 77 
     | 
    
         
            +
                op.on(*flags) do |val|
         
     | 
| 
      
 78 
     | 
    
         
            +
                  parameters[key] = val
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
              path_option_map.each do |key, flags|
         
     | 
| 
      
 82 
     | 
    
         
            +
                flags = Array(flags).map { |f| "--#{f} PATHS" }
         
     | 
| 
      
 83 
     | 
    
         
            +
                op.on(*flags) do |paths|
         
     | 
| 
      
 84 
     | 
    
         
            +
                  parameters[key] = paths.split(";")
         
     | 
| 
      
 85 
     | 
    
         
            +
                                         .map { |path| File.expand_path path, "/in" }
         
     | 
| 
      
 86 
     | 
    
         
            +
                                         .join(";")
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
              map_option_map.each do |key, flags|
         
     | 
| 
      
 90 
     | 
    
         
            +
                flags = Array(flags).map { |f| "--#{f} MAPPING" }
         
     | 
| 
      
 91 
     | 
    
         
            +
                op.on(*flags) do |mapping|
         
     | 
| 
      
 92 
     | 
    
         
            +
                  mapping.split(";").each do |mapping_kv|
         
     | 
| 
      
 93 
     | 
    
         
            +
                    mapping_key, mapping_val = mapping_kv.split("=", 2)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    mapping_key.gsub!(".", "\\\\\\\\.")
         
     | 
| 
      
 95 
     | 
    
         
            +
                    parameters["#{key}.#{mapping_key}"] = mapping_val if mapping_val
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
              end
         
     | 
| 
      
 99 
     | 
    
         
            +
            end.parse! ARGV
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            parameter_strs =
         
     | 
| 
      
 102 
     | 
    
         
            +
              parameters.map do |k, v|
         
     | 
| 
      
 103 
     | 
    
         
            +
                v = v.gsub("\\", "\\\\\\\\").gsub(",", "\\\\,").gsub("=", "\\\\=")
         
     | 
| 
      
 104 
     | 
    
         
            +
                "#{k}=#{v}"
         
     | 
| 
      
 105 
     | 
    
         
            +
              end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            ruby_plugin_args =
         
     | 
| 
      
 108 
     | 
    
         
            +
              if parameters[":gem.:version_dependencies"]
         
     | 
| 
      
 109 
     | 
    
         
            +
                []
         
     | 
| 
      
 110 
     | 
    
         
            +
              else
         
     | 
| 
      
 111 
     | 
    
         
            +
                ["--ruby_out=/out/lib", "--grpc_out=/out/lib"]
         
     | 
| 
      
 112 
     | 
    
         
            +
              end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            protoc_cmd = [
         
     | 
| 
      
 115 
     | 
    
         
            +
              "grpc_tools_ruby_protoc",
         
     | 
| 
      
 116 
     | 
    
         
            +
              # It is important for /in to come before /protos because all input files
         
     | 
| 
      
 117 
     | 
    
         
            +
              # come from /in, and protoc will complain if any of those are also found
         
     | 
| 
      
 118 
     | 
    
         
            +
              # earlier in the proto path.
         
     | 
| 
      
 119 
     | 
    
         
            +
              "--proto_path=/in/", "--proto_path=/protos/"
         
     | 
| 
      
 120 
     | 
    
         
            +
            ] + ruby_plugin_args + [
         
     | 
| 
      
 121 
     | 
    
         
            +
              "--ruby_cloud_out=/out/",
         
     | 
| 
      
 122 
     | 
    
         
            +
              "--ruby_cloud_opt", parameter_strs.join(",")
         
     | 
| 
      
 123 
     | 
    
         
            +
            ] + ARGV + Dir.glob("/in/**/*.proto").sort
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            FileUtils.mkdir_p "/out/lib"
         
     | 
| 
      
 126 
     | 
    
         
            +
            system(*protoc_cmd)
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            remove_paths.each do |path|
         
     | 
| 
      
 129 
     | 
    
         
            +
              FileUtils.rm_f Dir.glob "/out/#{path}"
         
     | 
| 
      
 130 
     | 
    
         
            +
            end
         
     | 
    
        data/cloud-rubocop.yml
    ADDED
    
    | 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This file is to be used as the config for formatting the generated cloud 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 
     | 
    
         
            +
                - "acceptance/**/*"
         
     | 
| 
      
 10 
     | 
    
         
            +
                - "*.gemspec"
         
     | 
| 
      
 11 
     | 
    
         
            +
                - "lib/**/*_pb.rb"
         
     | 
| 
      
 12 
     | 
    
         
            +
                - "Rakefile"
         
     | 
| 
      
 13 
     | 
    
         
            +
                - "support/**/*"
         
     | 
| 
      
 14 
     | 
    
         
            +
                - "test/**/*"
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 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 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            module Gapic
         
     | 
| 
      
 19 
     | 
    
         
            +
              module Generator
         
     | 
| 
      
 20 
     | 
    
         
            +
                module Cloud
         
     | 
| 
      
 21 
     | 
    
         
            +
                  VERSION = "0.5.0"
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,119 @@ 
     | 
|
| 
      
 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/default_generator"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require "gapic/presenters"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require "gapic/presenters/wrapper_gem_presenter"
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            module Gapic
         
     | 
| 
      
 22 
     | 
    
         
            +
              module Generators
         
     | 
| 
      
 23 
     | 
    
         
            +
                # The generator orchestrates the rendering of templates for Google Cloud
         
     | 
| 
      
 24 
     | 
    
         
            +
                # projects.
         
     | 
| 
      
 25 
     | 
    
         
            +
                class CloudGenerator < DefaultGenerator
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # Initializes the generator.
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #
         
     | 
| 
      
 28 
     | 
    
         
            +
                  # @param api [Gapic::Schema::Api] The API model/context to
         
     | 
| 
      
 29 
     | 
    
         
            +
                  #   generate.
         
     | 
| 
      
 30 
     | 
    
         
            +
                  def initialize api
         
     | 
| 
      
 31 
     | 
    
         
            +
                    gem_config = api.configuration[:gem] ||= {}
         
     | 
| 
      
 32 
     | 
    
         
            +
                    gem_config[:homepage] ||= "https://github.com/googleapis/google-cloud-ruby"
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    super
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    # Configure to use prefer Google Cloud templates
         
     | 
| 
      
 37 
     | 
    
         
            +
                    use_templates! File.join __dir__, "../../../templates/cloud"
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  # Generates all the files for the API.
         
     | 
| 
      
 41 
     | 
    
         
            +
                  #
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # @return [Array<
         
     | 
| 
      
 43 
     | 
    
         
            +
                  #   Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  #   The files that were generated for the API.
         
     | 
| 
      
 45 
     | 
    
         
            +
                  def generate
         
     | 
| 
      
 46 
     | 
    
         
            +
                    gem_config = @api.configuration[:gem] ||= {}
         
     | 
| 
      
 47 
     | 
    
         
            +
                    return generate_wrapper if gem_config[:version_dependencies]
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    orig_files = super
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    cloud_files = []
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    gem = Gapic::Presenters.gem_presenter @api
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    # Additional Gem level files
         
     | 
| 
      
 56 
     | 
    
         
            +
                    cloud_files << g("gem/repo-metadata.erb",  ".repo-metadata.json", gem: gem)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    cloud_files << g("gem/authentication.erb", "AUTHENTICATION.md",   gem: gem) unless gem.services.empty?
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                    format_files cloud_files
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    orig_files + cloud_files
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  # Disable Rubocop because we expect generate to grow and violate more
         
     | 
| 
      
 65 
     | 
    
         
            +
                  # and more style rules.
         
     | 
| 
      
 66 
     | 
    
         
            +
                  # rubocop:disable all
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                  # Generates the files for a wrapper.
         
     | 
| 
      
 69 
     | 
    
         
            +
                  #
         
     | 
| 
      
 70 
     | 
    
         
            +
                  # @return [Array<Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
         
     | 
| 
      
 71 
     | 
    
         
            +
                  #   The files that were generated for the API.
         
     | 
| 
      
 72 
     | 
    
         
            +
                  #
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def generate_wrapper
         
     | 
| 
      
 74 
     | 
    
         
            +
                    files = []
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                    gem = Gapic::Presenters.wrapper_gem_presenter @api
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    files << g("gem/gitignore.erb",            ".gitignore",                                    gem: gem)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    files << g("gem/repo-metadata.erb",        ".repo-metadata.json",                           gem: gem)
         
     | 
| 
      
 80 
     | 
    
         
            +
                    files << g("wrapper_gem/rubocop.erb",      ".rubocop.yml",                                  gem: gem)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    files << g("wrapper_gem/yardopts.erb",     ".yardopts",                                     gem: gem)
         
     | 
| 
      
 82 
     | 
    
         
            +
                    files << g("gem/authentication.erb",       "AUTHENTICATION.md",                             gem: gem)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    files << g("gem/changelog.erb",            "CHANGELOG.md",                                  gem: gem)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    files << g("wrapper_gem/gemfile.erb",      "Gemfile",                                       gem: gem)
         
     | 
| 
      
 85 
     | 
    
         
            +
                    files << g("gem/license.erb",              "LICENSE.md",                                    gem: gem)
         
     | 
| 
      
 86 
     | 
    
         
            +
                    files << g("wrapper_gem/rakefile.erb",     "Rakefile",                                      gem: gem)
         
     | 
| 
      
 87 
     | 
    
         
            +
                    files << g("wrapper_gem/readme.erb",       "README.md",                                     gem: gem)
         
     | 
| 
      
 88 
     | 
    
         
            +
                    files << g("wrapper_gem/gemspec.erb",      "#{gem.name}.gemspec",                           gem: gem)
         
     | 
| 
      
 89 
     | 
    
         
            +
                    files << g("wrapper_gem/entrypoint.erb",   "lib/#{gem.name}.rb",                            gem: gem) if gem.needs_entrypoint?
         
     | 
| 
      
 90 
     | 
    
         
            +
                    files << g("wrapper_gem/main.erb",         "lib/#{gem.namespace_file_path}",                gem: gem)
         
     | 
| 
      
 91 
     | 
    
         
            +
                    files << g("gem/version.erb",              "lib/#{gem.version_file_path}",                  gem: gem)
         
     | 
| 
      
 92 
     | 
    
         
            +
                    files << g("gem/test_helper.erb",          "test/helper.rb",                                gem: gem)
         
     | 
| 
      
 93 
     | 
    
         
            +
                    files << g("wrapper_gem/client_test.erb",  "test/#{gem.namespace_require}/client_test.rb",  gem: gem)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    files << g("wrapper_gem/version_test.erb", "test/#{gem.namespace_require}/version_test.rb", gem: gem)
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    format_files files
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    files
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  # rubocop:enable all
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  private
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 106 
     | 
    
         
            +
                  # Override the default rubocop config file to be used.
         
     | 
| 
      
 107 
     | 
    
         
            +
                  def format_config
         
     | 
| 
      
 108 
     | 
    
         
            +
                    @api.configuration[:format_config] ||
         
     | 
| 
      
 109 
     | 
    
         
            +
                      google_style_config
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 113 
     | 
    
         
            +
                  # Path to the rubocop file for this project, which uses google-style
         
     | 
| 
      
 114 
     | 
    
         
            +
                  def google_style_config
         
     | 
| 
      
 115 
     | 
    
         
            +
                    File.expand_path File.join __dir__, "../../../cloud-rubocop.yml"
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
                end
         
     | 
| 
      
 118 
     | 
    
         
            +
              end
         
     | 
| 
      
 119 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,137 @@ 
     | 
|
| 
      
 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/presenters"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require "gapic/presenters/wrapper_service_presenter"
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            module Gapic
         
     | 
| 
      
 21 
     | 
    
         
            +
              module Presenters
         
     | 
| 
      
 22 
     | 
    
         
            +
                ##
         
     | 
| 
      
 23 
     | 
    
         
            +
                # A presenter for wrapper gems.
         
     | 
| 
      
 24 
     | 
    
         
            +
                #
         
     | 
| 
      
 25 
     | 
    
         
            +
                class WrapperGemPresenter < GemPresenter
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def entrypoint_require
         
     | 
| 
      
 27 
     | 
    
         
            +
                    namespace_require
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  def services
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @services ||= begin
         
     | 
| 
      
 32 
     | 
    
         
            +
                      files = @api.generate_files
         
     | 
| 
      
 33 
     | 
    
         
            +
                      files.map(&:services).flatten.map { |s| WrapperServicePresenter.new @api, s }
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def namespace_require
         
     | 
| 
      
 38 
     | 
    
         
            +
                    ruby_file_path @api, namespace
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def main_directory_name
         
     | 
| 
      
 42 
     | 
    
         
            +
                    namespace_require.split("/").last
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  def helpers_require
         
     | 
| 
      
 46 
     | 
    
         
            +
                    "#{namespace_require}/helpers"
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  def namespace_file_path
         
     | 
| 
      
 50 
     | 
    
         
            +
                    "#{namespace_require}.rb"
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  def needs_entrypoint?
         
     | 
| 
      
 54 
     | 
    
         
            +
                    name != namespace_file_path
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def needs_default_config_block?
         
     | 
| 
      
 58 
     | 
    
         
            +
                    needs_entrypoint? && !google_cloud_short_name.nil?
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  def migration_version
         
     | 
| 
      
 62 
     | 
    
         
            +
                    gem_config :migration_version
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  # A description of the versions prior to the migration version.
         
     | 
| 
      
 66 
     | 
    
         
            +
                  # Could be "a.x" if the migration version is 1.0 or later, otherwise
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # falls back to "pre-a.b".
         
     | 
| 
      
 68 
     | 
    
         
            +
                  def pre_migration_version
         
     | 
| 
      
 69 
     | 
    
         
            +
                    match = /^(\d)+\.0/.match migration_version.to_s
         
     | 
| 
      
 70 
     | 
    
         
            +
                    if match
         
     | 
| 
      
 71 
     | 
    
         
            +
                      major = match[1].to_i
         
     | 
| 
      
 72 
     | 
    
         
            +
                      return "#{major - 1}.x" if major.positive?
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
                    "pre-#{migration_version}"
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  def migration?
         
     | 
| 
      
 78 
     | 
    
         
            +
                    migration_version ? true : false
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  def extra_files
         
     | 
| 
      
 82 
     | 
    
         
            +
                    files = ["README.md", "AUTHENTICATION.md", "LICENSE.md", ".yardopts"]
         
     | 
| 
      
 83 
     | 
    
         
            +
                    files << "MIGRATING.md" if migration?
         
     | 
| 
      
 84 
     | 
    
         
            +
                    files
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  def factory_method_suffix
         
     | 
| 
      
 88 
     | 
    
         
            +
                    gem_config(:factory_method_suffix).to_s
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                  def version_dependencies
         
     | 
| 
      
 92 
     | 
    
         
            +
                    gem_config(:version_dependencies).to_s.split(";").map { |str| str.split ":" }
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  def gem_version_dependencies
         
     | 
| 
      
 96 
     | 
    
         
            +
                    version_dependencies.sort_by { |version, _requirement| version }
         
     | 
| 
      
 97 
     | 
    
         
            +
                                        .map { |version, requirement| ["#{name}-#{version}", requirement] }
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  def versioned_gems
         
     | 
| 
      
 101 
     | 
    
         
            +
                    gem_version_dependencies.map { |name, _requirement| name }
         
     | 
| 
      
 102 
     | 
    
         
            +
                  end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                  def default_version
         
     | 
| 
      
 105 
     | 
    
         
            +
                    version_dependencies.first&.first
         
     | 
| 
      
 106 
     | 
    
         
            +
                  end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                  def google_cloud_short_name
         
     | 
| 
      
 109 
     | 
    
         
            +
                    m = /^google-cloud-(.*)$/.match name
         
     | 
| 
      
 110 
     | 
    
         
            +
                    return nil unless m
         
     | 
| 
      
 111 
     | 
    
         
            +
                    m[1].tr "-", "_"
         
     | 
| 
      
 112 
     | 
    
         
            +
                  end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                  def docs_link version: nil, class_name: nil, text: nil
         
     | 
| 
      
 115 
     | 
    
         
            +
                    gem_name = version ? "#{name}-#{version}" : name
         
     | 
| 
      
 116 
     | 
    
         
            +
                    base_url = "https://googleapis.dev/ruby/#{gem_name}/latest"
         
     | 
| 
      
 117 
     | 
    
         
            +
                    if class_name
         
     | 
| 
      
 118 
     | 
    
         
            +
                      path = namespace.gsub "::", "/"
         
     | 
| 
      
 119 
     | 
    
         
            +
                      path = "#{path}/#{version.capitalize}" if version
         
     | 
| 
      
 120 
     | 
    
         
            +
                      class_path = class_name.gsub "::", "/"
         
     | 
| 
      
 121 
     | 
    
         
            +
                      text ||= namespaced_class class_name, version: version
         
     | 
| 
      
 122 
     | 
    
         
            +
                      return "[#{text}](#{base_url}/#{path}/#{class_path}.html)"
         
     | 
| 
      
 123 
     | 
    
         
            +
                    end
         
     | 
| 
      
 124 
     | 
    
         
            +
                    "[#{text || name}](#{base_url})"
         
     | 
| 
      
 125 
     | 
    
         
            +
                  end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                  def namespaced_class name, version: nil
         
     | 
| 
      
 128 
     | 
    
         
            +
                    base = version ? "#{namespace}::#{version.capitalize}" : namespace
         
     | 
| 
      
 129 
     | 
    
         
            +
                    "#{base}::#{name}"
         
     | 
| 
      
 130 
     | 
    
         
            +
                  end
         
     | 
| 
      
 131 
     | 
    
         
            +
                end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                def self.wrapper_gem_presenter api
         
     | 
| 
      
 134 
     | 
    
         
            +
                  WrapperGemPresenter.new api
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
              end
         
     | 
| 
      
 137 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 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/presenters"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require "gapic/ruby_info"
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            module Gapic
         
     | 
| 
      
 21 
     | 
    
         
            +
              module Presenters
         
     | 
| 
      
 22 
     | 
    
         
            +
                ##
         
     | 
| 
      
 23 
     | 
    
         
            +
                # A presenter for wrapper services.
         
     | 
| 
      
 24 
     | 
    
         
            +
                #
         
     | 
| 
      
 25 
     | 
    
         
            +
                class WrapperServicePresenter < ServicePresenter
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def gem
         
     | 
| 
      
 27 
     | 
    
         
            +
                    WrapperGemPresenter.new @api
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  def factory_method_name
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @factory_method_name ||= begin
         
     | 
| 
      
 32 
     | 
    
         
            +
                      method_name = ActiveSupport::Inflector.underscore name
         
     | 
| 
      
 33 
     | 
    
         
            +
                      suffix = gem.factory_method_suffix
         
     | 
| 
      
 34 
     | 
    
         
            +
                      method_name = "#{method_name}#{suffix}" unless method_name.end_with? suffix
         
     | 
| 
      
 35 
     | 
    
         
            +
                      method_name = "#{method_name}_client" if Gapic::RubyInfo.excluded_method_names.include? method_name
         
     | 
| 
      
 36 
     | 
    
         
            +
                      method_name
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def create_client_call
         
     | 
| 
      
 41 
     | 
    
         
            +
                    "#{gem.namespace}.#{factory_method_name}"
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  def configure_client_call
         
     | 
| 
      
 45 
     | 
    
         
            +
                    "#{gem.namespace}.configure"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  def credentials_class_xref
         
     | 
| 
      
 49 
     | 
    
         
            +
                    "`#{credentials_name_full}`"
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     |