class Gapic::Presenters::PackagePresenter

A presenter for proto packages.

Public Class Methods

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

Public Instance Methods

address() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 74
def address
  @package.split "."
end
drift_manifest() click to toggle source

Returns a hash with a drift_manifest of this package describing correspondence between the proto description of the package with the generated code for the package. See github.com/googleapis/googleapis/blob/master/gapic/metadata/gapic_metadata.proto

@return [Hash]

# File lib/gapic/presenters/package_presenter.rb, line 113
def drift_manifest
  {
    schema:         "1.0",
    comment:        "This file maps proto services/RPCs to the corresponding library clients/methods",
    language:       "ruby",
    protoPackage:   name,
    libraryPackage: namespace,
    services:       services.map { |s| [s.grpc_service_name, s.drift_manifest] }.to_h
  }
end
empty?() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 90
def empty?
  services.empty?
end
gem() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 36
def gem
  @gem_presenter
end
grpc_client_designation() click to toggle source

How comments in the generated libraries refer to the GRPC client if no REST code is generated, this should just be “client”, if REST code is generated, this should be disambiguated into the “GRPC client”

Since we are using first service for an indication of whether package generates REST code, it's OK to defer this to the first service as well. For packages with no services the value of this does not really matter as no client generation docs will be generated.

@return [String]

# File lib/gapic/presenters/package_presenter.rb, line 135
def grpc_client_designation
  services.first&.grpc_client_designation || ""
end
helpers_file_name() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 98
def helpers_file_name
  "_helpers.rb"
end
helpers_file_path() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 94
def helpers_file_path
  "#{helpers_require}.rb"
end
helpers_require() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 102
def helpers_require
  "#{package_require}/_helpers"
end
module_name() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 53
def module_name
  namespace.split("::").last
end
name() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 40
def name
  @package
end
namespace() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 44
def namespace
  return services.first&.namespace if services.first&.namespace
  ruby_namespace_for_address address
end
package_directory_name() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 86
def package_directory_name
  package_require.split("/").last
end
package_file_path() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 82
def package_file_path
  "#{package_require}.rb"
end
package_require() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 78
def package_require
  ruby_file_path @api, namespace
end
parent_namespace() click to toggle source
# File lib/gapic/presenters/package_presenter.rb, line 49
def parent_namespace
  namespace.split("::")[0...-1].join("::")
end
services() click to toggle source

Services whose clients should be generated in this package namespace. @return [Enumerable<Gapic::Presenters::ServicePresenter>]

# File lib/gapic/presenters/package_presenter.rb, line 61
def services
  @services ||= begin
    files = @api.generate_files.select { |f| f.package == @package }
    services = files.map(&:services).flatten
    # Omit common services in this package. Common service clients do not
    # go into their own package.
    normal_services = services.select { |s| @api.delegate_service_for(s).nil? }
    # But include common services that delegate to normal services in this package.
    common_services = normal_services.flat_map { |s| @api.common_services_for s }
    (normal_services + common_services).map { |s| ServicePresenter.new @gem_presenter, @api, s }
  end
end