Class: Gapic::Presenters::PackagePresenter

Inherits:
Object
  • Object
show all
Includes:
Helpers::FilepathHelper, Helpers::NamespaceHelper
Defined in:
lib/gapic/presenters/package_presenter.rb

Overview

A presenter for proto packages.

Instance Method Summary collapse

Methods included from Helpers::NamespaceHelper

#ensure_absolute_namespace, #fix_namespace, #ruby_namespace, #ruby_namespace_for_address

Methods included from Helpers::FilepathHelper

#fix_file_path, #ruby_file_path, #ruby_file_path_for_namespace

Constructor Details

#initialize(gem_presenter, api, package) ⇒ PackagePresenter

Returns a new instance of PackagePresenter.



30
31
32
33
34
# File 'lib/gapic/presenters/package_presenter.rb', line 30

def initialize gem_presenter, api, package
  @gem_presenter = gem_presenter
  @api = api
  @package = package
end

Instance Method Details

#addressObject



74
75
76
# File 'lib/gapic/presenters/package_presenter.rb', line 74

def address
  @package.split "."
end

#drift_manifestHash

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 https://github.com/googleapis/googleapis/blob/master/gapic/metadata/gapic_metadata.proto

Returns:

  • (Hash)


113
114
115
116
117
118
119
120
121
122
# 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?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/gapic/presenters/package_presenter.rb', line 90

def empty?
  services.empty?
end

#gemObject



36
37
38
# File 'lib/gapic/presenters/package_presenter.rb', line 36

def gem
  @gem_presenter
end

#grpc_client_designationString

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.

Returns:

  • (String)


135
136
137
# File 'lib/gapic/presenters/package_presenter.rb', line 135

def grpc_client_designation
  services.first&.grpc_client_designation || ""
end

#helpers_file_nameObject



98
99
100
# File 'lib/gapic/presenters/package_presenter.rb', line 98

def helpers_file_name
  "_helpers.rb"
end

#helpers_file_pathObject



94
95
96
# File 'lib/gapic/presenters/package_presenter.rb', line 94

def helpers_file_path
  "#{helpers_require}.rb"
end

#helpers_requireObject



102
103
104
# File 'lib/gapic/presenters/package_presenter.rb', line 102

def helpers_require
  "#{package_require}/_helpers"
end

#module_nameObject



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

def module_name
  namespace.split("::").last
end

#nameObject



40
41
42
# File 'lib/gapic/presenters/package_presenter.rb', line 40

def name
  @package
end

#namespaceObject



44
45
46
47
# 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_nameObject



86
87
88
# File 'lib/gapic/presenters/package_presenter.rb', line 86

def package_directory_name
  package_require.split("/").last
end

#package_file_pathObject



82
83
84
# File 'lib/gapic/presenters/package_presenter.rb', line 82

def package_file_path
  "#{package_require}.rb"
end

#package_requireObject



78
79
80
# File 'lib/gapic/presenters/package_presenter.rb', line 78

def package_require
  ruby_file_path @api, namespace
end

#parent_namespaceObject



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

def parent_namespace
  namespace.split("::")[0...-1].join("::")
end

#servicesEnumerable<Gapic::Presenters::ServicePresenter>

Services whose clients should be generated in this package namespace.

Returns:



61
62
63
64
65
66
67
68
69
70
71
72
# 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