Class: Gapic::Generators::CloudGenerator

Inherits:
DefaultGenerator
  • Object
show all
Defined in:
lib/gapic/generators/cloud_generator.rb

Overview

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ CloudGenerator

Initializes the generator.

Parameters:

  • api (Gapic::Schema::Api)

    The API model/context to generate.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 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

Class Method Details

.parameter_schemaGapic::Schema::ParameterSchema

Schema of the parameters that the generator accepts

Returns:

  • (Gapic::Schema::ParameterSchema)


112
113
114
# File 'lib/gapic/generators/cloud_generator.rb', line 112

def self.parameter_schema
  CloudGeneratorParameters.default_schema
end

Instance Method Details

#generate(gem_presenter: nil) ⇒ Array< Google::Protobuf::Compiler::CodeGeneratorResponse::File>

Generates all the files for the API.

Returns:

  • (Array< Google::Protobuf::Compiler::CodeGeneratorResponse::File>)

    The files that were generated for the API.



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 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)
  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_wrapperArray<Google::Protobuf::Compiler::CodeGeneratorResponse::File>

Generates the files for a wrapper.

Returns:

  • (Array<Google::Protobuf::Compiler::CodeGeneratorResponse::File>)

    The files that were generated for the API.



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/gapic/generators/cloud_generator.rb', line 80

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("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