class Gapic::Generators::CloudGenerator

The generator orchestrates the rendering of templates for Google Cloud projects.

Public Class Methods

new(api) click to toggle source

Initializes the generator.

@param api [Gapic::Schema::Api] The API model/context to

generate.
Calls superclass method
# File lib/gapic/generators/cloud_generator.rb, line 32
def initialize api
  gem_config = api.configuration[:gem] ||= {}
  gem_config[:homepage] ||= "https://github.com/googleapis/google-cloud-ruby"

  # The gapic metadata generation is disabled by default as per spec.
  # However it should be enabled by default for cloud libraries, otherwise we'll have to
  # enable it in every synth/bazel file.
  api.configuration[:generate_metadata] = true if api.configuration[:generate_metadata].nil?

  super

  # Configure to use prefer Google Cloud templates
  use_templates! File.join __dir__, "../../../templates/cloud"
end
parameter_schema() click to toggle source

Schema of the parameters that the generator accepts @return [Gapic::Schema::ParameterSchema]

# File lib/gapic/generators/cloud_generator.rb, line 114
def self.parameter_schema
  CloudGeneratorParameters.default_schema
end

Public Instance Methods

generate(gem_presenter: nil) click to toggle source

Generates all the files for the API.

@return [Array<

Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
The files that were generated for the API.
Calls superclass method
# File lib/gapic/generators/cloud_generator.rb, line 52
def generate gem_presenter: nil
  gem_config = @api.configuration[:gem] ||= {}
  return generate_wrapper if gem_config[:version_dependencies]

  gem = gem_presenter || Gapic::Presenters.cloud_gem_presenter(@api)
  orig_files = super gem_presenter: gem

  # Additional Gem level files
  cloud_files = []
  cloud_files << g("gem/repo-metadata.erb", ".repo-metadata.json", gem: gem)
  cloud_files << g("gem/yardopts-cloudrad.erb", ".yardopts-cloudrad", gem: gem)
  unless gem.services.empty? || gem.generic_endpoint?
    cloud_files << g("gem/authentication.erb", "AUTHENTICATION.md", gem: gem)
  end

  format_files cloud_files

  orig_files + cloud_files
end
generate_wrapper() click to toggle source

Generates the files for a wrapper.

@return [Array<Google::Protobuf::Compiler::CodeGeneratorResponse::File>]

The files that were generated for the API.
# File lib/gapic/generators/cloud_generator.rb, line 81
def generate_wrapper
  files = []

  gem = Gapic::Presenters.wrapper_gem_presenter @api

  files << g("gem/gitignore.erb",                 ".gitignore",                                    gem: gem)
  files << g("gem/repo-metadata.erb",             ".repo-metadata.json",                           gem: gem)
  files << g("wrapper_gem/rubocop.erb",           ".rubocop.yml",                                  gem: gem)
  files << g("wrapper_gem/yardopts.erb",          ".yardopts",                                     gem: gem)
  files << g("wrapper_gem/yardopts-cloudrad.erb", ".yardopts-cloudrad",                            gem: gem)
  files << g("gem/authentication.erb",            "AUTHENTICATION.md",                             gem: gem) unless gem.generic_endpoint?
  files << g("gem/changelog.erb",                 "CHANGELOG.md",                                  gem: gem)
  files << g("wrapper_gem/gemfile.erb",           "Gemfile",                                       gem: gem)
  files << g("gem/license.erb",                   "LICENSE.md",                                    gem: gem)
  files << g("wrapper_gem/rakefile.erb",          "Rakefile",                                      gem: gem)
  files << g("wrapper_gem/readme.erb",            "README.md",                                     gem: gem)
  files << g("wrapper_gem/gemspec.erb",           "#{gem.name}.gemspec",                           gem: gem)
  files << g("wrapper_gem/entrypoint.erb",        "lib/#{gem.name}.rb",                            gem: gem) if gem.needs_entrypoint?
  files << g("wrapper_gem/main.erb",              "lib/#{gem.namespace_file_path}",                gem: gem)
  files << g("gem/version.erb",                   "lib/#{gem.version_file_path}",                  gem: gem)
  files << g("gem/test_helper.erb",               "test/helper.rb",                                gem: gem)
  files << g("wrapper_gem/client_test.erb",       "test/#{gem.namespace_require}/client_test.rb",  gem: gem)
  files << g("wrapper_gem/version_test.erb",      "test/#{gem.namespace_require}/version_test.rb", gem: gem)

  format_files files

  files
end

Private Instance Methods

format_config() click to toggle source

Override the default rubocop config file to be used.

# File lib/gapic/generators/cloud_generator.rb, line 123
def format_config
  @api.configuration[:format_config] ||
    google_style_config
end
google_style_config() click to toggle source

Path to the rubocop file for this project, which uses google-style

# File lib/gapic/generators/cloud_generator.rb, line 130
def google_style_config
  File.expand_path File.join __dir__, "../../../cloud-rubocop.yml"
end