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
|