Class: Gapic::Presenters::WrapperGemPresenter

Inherits:
CloudGemPresenter show all
Defined in:
lib/gapic/presenters/wrapper_gem_presenter.rb

Overview

A presenter for wrapper gems.

Constant Summary

Constants inherited from CloudGemPresenter

CloudGemPresenter::NON_CLOUD_GEMS, CloudGemPresenter::PSEUDO_CLOUD_GEMS

Instance Method Summary collapse

Methods inherited from CloudGemPresenter

#cloud_env_prefix, #cloud_product?, #gemspec_description, #generator_args_for_metadata, #has_wrapper?, #library_documentation_url, #license_name, #wrapper_name

Instance Method Details

#default_versionObject



157
158
159
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 157

def default_version
  version_dependencies.first&.first
end

#default_versioned_gemObject



161
162
163
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 161

def default_versioned_gem
  versioned_gems.first
end

#dependenciesObject



165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 165

def dependencies
  @dependencies ||= begin
    deps = { "google-cloud-core" => "~> 1.6" }
    version_dependencies.each do |version, requirement|
      # For pre-release dependencies on versioned clients, support both
      # 0.x and 1.x versions to ease the transition to 1.0 (GA) releases
      # for those dependencies. (Note the 0.x->1.0 transition is
      # generally not breaking.)
      deps["#{renamed_from}-#{version}"] =
        if requirement.start_with? "0."
          [">= #{requirement}", "< 2.a"]
        else
          "~> #{requirement}"
        end
    end
    extra_deps = gem_config_dependencies
    deps.merge! extra_deps if extra_deps
    deps
  end
end


192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 192

def docs_link version: nil, class_name: nil, text: nil, gem_name: nil
  gem_name ||= version ? "#{renamed_from}-#{version}" : name
  base_url =
    if cloud_product?
      "https://cloud.google.com/ruby/docs/reference/#{gem_name}/latest"
    else
      "https://rubydoc.info/gems/#{gem_name}"
    end
  if class_name
    separator = cloud_product? ? "-" : "/"
    path = namespace.gsub "::", separator
    path = "#{path}#{separator}#{version.capitalize}" if version
    class_path = class_name.gsub "::", separator
    text ||= namespaced_class class_name, version: version
    return "[#{text}](#{base_url}/#{path}#{separator}#{class_path})"
  end
  "[#{text || name}](#{base_url})"
end

#entrypoint_requireObject



27
28
29
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 27

def entrypoint_require
  namespace_require
end

#extra_filesObject



97
98
99
100
101
102
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 97

def extra_files
  files = ["README.md", "LICENSE.md", ".yardopts"]
  files.insert 1, "AUTHENTICATION.md" unless generic_endpoint?
  files.append "MIGRATING.md" if migration?
  files
end

#factory_method_suffixObject



104
105
106
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 104

def factory_method_suffix
  gem_config(:factory_method_suffix).to_s
end

#gem_namespaceObject



137
138
139
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 137

def gem_namespace
  fix_namespace(@api, name.split("-").map(&:camelize).join("::"))
end

#google_cloud_short_nameObject



186
187
188
189
190
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 186

def google_cloud_short_name
  m = /^google-cloud-(.*)$/.match renamed_from
  return nil unless m
  m[1].tr "-", "_"
end

#helpers_requireObject



49
50
51
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 49

def helpers_require
  "#{namespace_require}/helpers"
end

#main_directory_nameObject



45
46
47
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 45

def main_directory_name
  namespace_require.split("/").last
end

#migration?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 93

def migration?
  migration_version ? true : false
end

#migration_versionObject



65
66
67
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 65

def migration_version
  gem_config :migration_version
end

#namespaceObject



132
133
134
135
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 132

def namespace
  gem_config(:namespace) ||
    fix_namespace(@api, renamed_from.split("-").map(&:camelize).join("::"))
end

#namespace_file_pathObject



53
54
55
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 53

def namespace_file_path
  "#{namespace_require}.rb"
end

#namespace_requireObject



41
42
43
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 41

def namespace_require
  ruby_file_path @api, namespace
end

#namespaced_class(name, version: nil) ⇒ Object



211
212
213
214
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 211

def namespaced_class name, version: nil
  base = version ? "#{namespace}::#{version.capitalize}" : namespace
  "#{base}::#{name}"
end

#needs_default_config_block?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 61

def needs_default_config_block?
  needs_entrypoint? && !google_cloud_short_name.nil?
end

#needs_entrypoint?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 57

def needs_entrypoint?
  name != namespace_require
end

#pre_migration_versionObject

A description of the versions prior to the migration version. Could be "a.x" if the migration version is 1.0 or later, otherwise falls back to "pre-a.b".



84
85
86
87
88
89
90
91
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 84

def pre_migration_version
  match = /^(\d)+\.0/.match migration_version.to_s
  if match
    major = match[1].to_i
    return "#{major - 1}.x" if major.positive?
  end
  "pre-#{migration_version}"
end

#readme_descriptionArray<String>

Generates a description text for README files, accounting for markdown rendering, properly escaping variables and disabling xrefs in the wrapper.

Returns:

  • (Array<String>)

    The description text as an array of lines.



75
76
77
78
79
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 75

def readme_description
  has_markdown = description.strip.start_with? "#"
  desc = has_markdown ? description.split("\n") : [description.gsub(/\s+/, " ").strip]
  Gapic::FormattingUtils.format_doc_lines @api, desc, disable_xrefs: true
end

#renamed_fromString

The canonical gem name prior to renaming.

In some cases, a wrapper gem cannot be published under its canonical name because a conflicting gem already exists on RubyGems.org. For example:

  • "google-cloud-run" was renamed to "google-cloud-run-client" because RubyGems already had an existing gem named "google_cloud_run".
  • "google-iam" was renamed to "google-iam-client" because RubyGems already had an unrelated gem named "google-iam".

Even though the wrapper gem itself is renamed with a "-client" suffix, it still wraps versioned client gems named after the canonical name (e.g. "google-cloud-run-v2", "google-iam-v2") and defines classes in the canonical namespace (e.g. "Google::Cloud::Run", "Google::Iam").

Returns:

  • (String)


124
125
126
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 124

def renamed_from
  gem_config(:renamed_from) || name
end

#renamed_gem?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 128

def renamed_gem?
  renamed_from != name
end

#servicesObject



31
32
33
34
35
36
37
38
39
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 31

def services
  @services ||= begin
    @api.generate_files
        .map(&:services)
        .flatten
        .map { |s| WrapperServicePresenter.new self, @api, s }
        .find_all { |s| !s.is_hosted_mixin? }
  end
end

#version_dependenciesObject



149
150
151
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 149

def version_dependencies
  gem_config(:version_dependencies).to_s.split(";").map { |str| str.split ":" }
end

#version_name_fullObject



141
142
143
144
145
146
147
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 141

def version_name_full
  if renamed_gem?
    "#{gem_namespace}::VERSION"
  else
    "#{namespace}::VERSION"
  end
end

#versioned_gemsObject



153
154
155
# File 'lib/gapic/presenters/wrapper_gem_presenter.rb', line 153

def versioned_gems
  version_dependencies.map { |version, _requirement| "#{renamed_from}-#{version}" }.sort
end