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



126
127
128
# File 'lib/gapic/presenters/package_presenter.rb', line 126

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)


173
174
175
176
177
178
179
180
181
182
# File 'lib/gapic/presenters/package_presenter.rb', line 173

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.to_h { |s| [s.grpc_service_name, s.drift_manifest] }
  }
end

#empty?Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/gapic/presenters/package_presenter.rb', line 150

def empty?
  services.empty?
end

#first_service_with_restGapic::Presenters::ServicePresenter?

First service with REST bindings.



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

def first_service_with_rest
  services.find(&:methods_rest_bindings?)
end

#gemObject



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

def gem
  @gem_presenter
end

#generate_grpc_clients?Boolean

Returns Whether the generation of gRPC clients is requested.

Returns:

  • (Boolean)

    Whether the generation of gRPC clients is requested



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

def generate_grpc_clients?
  @api.generate_grpc_clients?
end

#generate_rest_clients?Boolean

Returns Whether the generation of REST clients is requested and can be done because at least one method has rest bindings.

Returns:

  • (Boolean)

    Whether the generation of REST clients is requested and can be done because at least one method has rest bindings.



80
81
82
# File 'lib/gapic/presenters/package_presenter.rb', line 80

def generate_rest_clients?
  @api.generate_rest_clients? && !first_service_with_rest.nil?
end

#helpers_file_nameObject



158
159
160
# File 'lib/gapic/presenters/package_presenter.rb', line 158

def helpers_file_name
  "_helpers.rb"
end

#helpers_file_pathObject



154
155
156
# File 'lib/gapic/presenters/package_presenter.rb', line 154

def helpers_file_path
  "#{helpers_require}.rb"
end

#helpers_requireObject



162
163
164
# File 'lib/gapic/presenters/package_presenter.rb', line 162

def helpers_require
  "#{package_require}/_helpers"
end

#mixin_binding_overrides?Boolean

Whether there are mixin services that this package has http binding overrides for.

Returns:

  • (Boolean)


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

def mixin_binding_overrides?
  first_service_with_rest&.rest&.mixin_binding_overrides? || false
end

#mixin_binding_overrides_file_pathString

File path for the mixin binding overrides file

Returns:

  • (String)


122
123
124
# File 'lib/gapic/presenters/package_presenter.rb', line 122

def mixin_binding_overrides_file_path
  "#{mixin_binding_overrides_require}.rb"
end

#mixin_binding_overrides_requireString

Requires path for the mixin binding overrides file

Returns:

  • (String)


113
114
115
# File 'lib/gapic/presenters/package_presenter.rb', line 113

def mixin_binding_overrides_require
  "#{ruby_file_path @api, namespace}/bindings_override"
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



146
147
148
# File 'lib/gapic/presenters/package_presenter.rb', line 146

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

#package_file_pathObject



138
139
140
# File 'lib/gapic/presenters/package_presenter.rb', line 138

def package_file_path
  "#{package_require}.rb"
end

#package_requireObject



130
131
132
# File 'lib/gapic/presenters/package_presenter.rb', line 130

def package_require
  ruby_file_path @api, namespace
end

#package_rest_file_pathObject



142
143
144
# File 'lib/gapic/presenters/package_presenter.rb', line 142

def package_rest_file_path
  "#{package_rest_require}.rb"
end

#package_rest_requireObject



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

def package_rest_require
  "#{ruby_file_path @api, namespace}/rest"
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
73
74
# File 'lib/gapic/presenters/package_presenter.rb', line 61

def services
  @services ||= begin
    files = @api.generate_files.select { |f| f.package == @package }
    service_list = files.map(&:services).flatten
    mixin_service_names = gem.mixins_model.mixin_services
    service_list.delete_if { |s| mixin_service_names.include? s.full_name }
    # Omit common services in this package. Common service clients do not
    # go into their own package.
    normal_services = service_list.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