gapic-generator-cloud 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|