class Gapic::Presenters::GemPresenter

A presenter for gems.

Public Class Methods

new(api) click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 31
def initialize api
  @api = api
end

Public Instance Methods

address() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 69
def address
  name.split("-").map(&:camelize)
end
api_id() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 145
def api_id
  raw_id = gem_config :api_id
  return nil unless raw_id
  raw_id.include?(".") ? raw_id : "#{raw_id}.googleapis.com"
end
api_shortname() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 151
def api_shortname
  gem_config :api_shortname
end
authors() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 104
def authors
  gem_config(:authors) ||
    ["Google LLC"]
end
dependencies() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 193
def dependencies
  @dependencies ||= begin
    deps = { "gapic-common" => [">= 0.7", "< 2.a"] }
    deps["grpc-google-iam-v1"] = [">= 0.6.10", "< 2.a"] if iam_dependency?
    extra_deps = gem_config_dependencies
    deps.merge! extra_deps if extra_deps
    deps
  end
end
dependency_list() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 203
def dependency_list
  dependencies.to_a
              .map { |name, requirements| [name, Array(requirements)] }
              .sort_by { |name, _requirements| name }
end
description() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 114
def description
  gem_config(:description) ||
    "#{name} is the official client library for the #{title} API."
end
email() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 109
def email
  gem_config(:email) ||
    "googleapis-packages@google.com"
end
entrypoint_require() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 181
def entrypoint_require
  packages.first.package_require
end
env_prefix() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 129
def env_prefix
  gem_config(:env_prefix)&.upcase
end
extra_files() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 189
def extra_files
  ["README.md", "LICENSE.md", ".yardopts"]
end
first_non_common_service() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 56
def first_non_common_service
  services.find { |service| service.common_service_delegate.nil? }
end
first_package_drift_json() click to toggle source

Returns a drift manifest of the first package in a pretty JSON string form

@return [String]

# File lib/gapic/presenters/gem_presenter.rb, line 226
def first_package_drift_json
  JSON.pretty_generate first_package_drift_manifest
end
first_package_drift_manifest() click to toggle source

Returns a hash with a drift_manifest of a first package in this gem (while the behaviour in case of multiple packages is clarified). See github.com/googleapis/googleapis/blob/master/gapic/metadata/gapic_metadata.proto

@return [Hash]

# File lib/gapic/presenters/gem_presenter.rb, line 216
def first_package_drift_manifest
  return {} unless packages?
  packages[0].drift_manifest
end
free_tier?() click to toggle source

@return [Boolean]

# File lib/gapic/presenters/gem_presenter.rb, line 162
def free_tier?
  gem_config(:free_tier) || false
end
generic_endpoint?() click to toggle source

@return [Boolean]

# File lib/gapic/presenters/gem_presenter.rb, line 177
def generic_endpoint?
  gem_config(:generic_endpoint) || false
end
homepage() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 124
def homepage
  gem_config(:homepage) ||
    "https://github.com/googleapis/googleapis"
end
iam_dependency?() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 133
def iam_dependency?
  @api.files.map(&:name).any? { |f| f.start_with? "google/iam/v1/" }
end
issue_tracker_url() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 155
def issue_tracker_url
  gem_config :issue_tracker_url
end
library_documentation_url() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 137
def library_documentation_url
  gem_config(:library_documentation_url) || "https://googleapis.dev/ruby/#{name}/latest"
end
license_name() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 185
def license_name
  "MIT"
end
name() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 73
def name
  gem_config :name
end
namespace() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 77
def namespace
  gem_config(:namespace) ||
    fix_namespace(@api, name.split("-").map(&:camelize).join("::"))
end
packages() click to toggle source

@return [Enumerable<Gapic::Presenters::PackagePresenter>]

# File lib/gapic/presenters/gem_presenter.rb, line 38
def packages
  @packages ||= begin
    packages = @api.generate_files.map(&:package).uniq.sort
    packages.map { |p| PackagePresenter.new self, @api, p }.delete_if(&:empty?)
  end
end
packages?() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 45
def packages?
  !packages.empty?
end
product_documentation_url() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 141
def product_documentation_url
  gem_config :product_documentation_url
end
proto_files() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 60
def proto_files
  @proto_files ||= begin
    files = @api.files
    files = files.reject { |f| blacklist_protos.include? f.name }
    files = files.reject { |f| f.messages.empty? && f.enums.empty? }
    files.map { |f| FilePresenter.new @api, f }
  end
end
quick_start_service() click to toggle source

The service to use for quick start samples. Normally this is simply the {#first_non_common_service}, but it can be overridden via a gem config.

@return [Gapic::Presenters::ServicePresenter]

# File lib/gapic/presenters/gem_presenter.rb, line 236
def quick_start_service
  preferred_service = gem_config :quick_start_service
  result = services.find { |svc| svc.name == preferred_service } if preferred_service
  result || first_non_common_service
end
services() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 49
def services
  @services ||= begin
    files = @api.generate_files
    files.map(&:services).flatten.map { |s| ServicePresenter.new self, @api, s }
  end
end
show_grpc_logging_docs?() click to toggle source

Whether the “Enabling (gRPC) Logging” section of the readme should appear. This is true if there is a quick-start service displayed in the readme, AND it uses gRPC.

@return [Boolean]

# File lib/gapic/presenters/gem_presenter.rb, line 249
def show_grpc_logging_docs?
  packages? && quick_start_service.usable_service_presenter.is_a?(ServicePresenter)
end
summary() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 119
def summary
  gem_config(:summary) ||
    "API Client library for the #{title} API"
end
title() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 82
def title
  gem_config(:title) ||
    namespace.split("::").join(" ")
end
version() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 87
def version
  gem_config(:version) ||
    "0.0.1"
end
version_file_path() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 96
def version_file_path
  "#{version_require}.rb"
end
version_name_full() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 100
def version_name_full
  "#{namespace}::VERSION"
end
version_require() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 92
def version_require
  ruby_file_path @api, version_name_full
end
yard_strict?() click to toggle source

@return [Boolean]

# File lib/gapic/presenters/gem_presenter.rb, line 169
def yard_strict?
  # Default to true unless the config is explicitly set to "false"
  gem_config(:yard_strict).nil? || gem_config(:yard_strict)
end

Private Instance Methods

blacklist_protos() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 281
def blacklist_protos
  blacklist = gem_config :blacklist

  return default_blacklist_protos if blacklist.nil?
  return default_blacklist_protos if blacklist[:protos].nil?

  default_blacklist_protos[:protos]
end
default_blacklist_protos() click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 290
def default_blacklist_protos
  ["google/api/http.proto", "google/protobuf/descriptor.proto"]
end
gem_config(key) click to toggle source
# File lib/gapic/presenters/gem_presenter.rb, line 255
def gem_config key
  return unless @api.configuration[:gem]

  @api.configuration[:gem][key]
end
gem_config_dependencies() click to toggle source

There is a special case (from PoV of generator parameters) in gem dependencies where a dependency needs to be an array of strings e.g. “>= 1.6”, “< 2.a” Rather than creating a special generator param case for this I will special-case it here. '|' is the separator. The above would be represented as “>= 1.6|< 2.a”

@return [Hash<String, String>, Hash{String=>Array<String>}, nil]

# File lib/gapic/presenters/gem_presenter.rb, line 270
def gem_config_dependencies
  return unless gem_config :extra_dependencies
  gem_config(:extra_dependencies).map do |dep_name, dep_versions|
    if dep_versions.include? "|"
      [dep_name, dep_versions.split("|")]
    else
      [dep_name, dep_versions]
    end
  end.to_h
end