Class: Gapic::Generators::DefaultGenerator

Inherits:
BaseGenerator show all
Defined in:
lib/gapic/generators/default_generator.rb

Overview

The generator orchestrates the rendering of templates.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ DefaultGenerator

Initializes the generator.

Parameters:



30
31
32
33
34
35
# File 'lib/gapic/generators/default_generator.rb', line 30

def initialize api
  super

  # Configure to use a custom templates directory
  use_templates! File.join __dir__, "../../../templates/default"
end

Class Method Details

.parameter_schemaGapic::Schema::ParameterSchema

Schema of the parameters that the generator accepts



147
148
149
# File 'lib/gapic/generators/default_generator.rb', line 147

def self.parameter_schema
  DefaultGeneratorParameters.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.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/gapic/generators/default_generator.rb', line 46

def generate gem_presenter: nil
  files = []

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

  if @api.generate_rest_clients? && gem.packages.find(&:generate_rest_clients?).nil?
    raise "Rest transport specified but no services have HTTP bindings"
  end

  gem.packages.each do |package|
    package_snippets = PackageSnippets.new snippet_dir: "snippets",
                                           proto_package: package.name,
                                           gem_name: gem.name

    # Package level files
    files << g("package", "lib/#{package.package_file_path}", package: package)
    files << g("package_rest", "lib/#{package.package_rest_file_path}", package: package) if package.generate_rest_clients?
    files << g("binding_override", "lib/#{package.mixin_binding_overrides_file_path}", package: package) if package.mixin_binding_overrides? && package.generate_rest_clients?

    package.services.each do |service|
      should_generate_grpc = service.generate_grpc_clients?
      should_generate_rest = service.generate_rest_clients?

      # Service level files
      files << g("service",                        "lib/#{service.service_file_path}",                 service: service)
      files << g("service/credentials",            "lib/#{service.credentials_file_path}",             service: service) unless gem.generic_endpoint?
      files << g("service/paths",                  "lib/#{service.paths_file_path}",                   service: service) if service.paths?

      # Rest module file
      files << g("service/rest",                   "lib/#{service.rest.service_rest_file_path}",       service: service) if should_generate_rest

      # client.rb
      files << g("service/client",                 "lib/#{service.client_file_path}",                  service: service) if should_generate_grpc
      files << g("service/rest/client",            "lib/#{service.rest.client_file_path}",             service: service) if should_generate_rest

      # Standard LRO shim
      files << g("service/operations",             "lib/#{service.operations_file_path}",              service: service) if service.lro? && should_generate_grpc
      files << g("service/rest/operations",        "lib/#{service.rest.operations_file_path}",         service: service) if service.rest.lro? && should_generate_rest

      # Nonstandard LRO shim
      files << g("service/nonstandard_lro",        "lib/#{service.nonstandard_lro_file_path}",         service: service) if service.nonstandard_lro_provider? && should_generate_grpc
      files << g("service/rest/nonstandard_lro",   "lib/#{service.rest.nonstandard_lro_file_path}",    service: service) if service.rest.nonstandard_lro_provider? && should_generate_rest
      
      # Rest-only `service.stub` file
      files << g("service/rest/service_stub",      "lib/#{service.rest.service_stub_file_path}",       service: service) if should_generate_rest

      # Unit tests for `client.rb`
      files << g("service/test/client",            "test/#{service.test_client_file_path}",            service: service) if should_generate_grpc
      files << g("service/rest/test/client",       "test/#{service.rest.test_client_file_path}",       service: service) if should_generate_rest

      # Unit tests for `paths.rb`
      files << g("service/test/client_paths",      "test/#{service.test_paths_file_path}",             service: service) if service.paths? && should_generate_grpc

      # Unit tests for standard LRO shim
      files << g("service/test/client_operations", "test/#{service.test_client_operations_file_path}", service: service) if service.lro? && should_generate_grpc

      if @api.generate_standalone_snippets?
        service.methods.each do |method|
          method.all_snippets.each do |snippet|
            snippet_file = g("snippets/standalone", "snippets/#{snippet.snippet_file_path}", snippet: snippet)
            package_snippets.add(method_presenter: method, snippet_presenter: snippet, snippet_file: snippet_file)
          end
        end
      end
    end

    files += package_snippets.files if @api.generate_standalone_snippets?
  end

  # Gem level files
  files << g("gem/gitignore",           ".gitignore",                   gem: gem)
  files << g("gem/version",             "lib/#{gem.version_file_path}", gem: gem)
  files << g("gem/test_helper",         "test/helper.rb",               gem: gem)
  files << g("gem/gemspec",             "#{gem.name}.gemspec",          gem: gem)
  files << g("gem/gemfile",             "Gemfile",                      gem: gem)
  files << g("gem/rakefile",            "Rakefile",                     gem: gem)
  files << g("gem/readme",              "README.md",                    gem: gem)
  files << g("gem/changelog",           "CHANGELOG.md",                 gem: gem)
  files << g("gem/rubocop",             ".rubocop.yml",                 gem: gem)
  files << g("gem/toys",                ".toys.rb",                     gem: gem)
  files << g("gem/yardopts",            ".yardopts",                    gem: gem)
  files << g("gem/license",             "LICENSE.md",                   gem: gem)
  files << g("gem/entrypoint",          "lib/#{gem.name}.rb",           gem: gem)
  files << g("gem/gapic_metadata_json", "gapic_metadata.json",          gem: gem) if @api.

  files << g("snippets/gemfile",        "snippets/Gemfile",             gem: gem) if @api.generate_standalone_snippets?

  gem.proto_files.each do |proto_file|
    files << g("proto_docs/proto_file", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
  end
  files << g("proto_docs/readme",       "proto_docs/README.md", gem: gem)

  format_files files

  files
end