Class: Gapic::Presenters::GemPresenter

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

Overview

A presenter for gems.

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(api) ⇒ GemPresenter

Returns a new instance of GemPresenter.



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

def initialize api
  @api = api
  @mixins_model = Gapic::Model::Mixins.new api.services.map(&:full_name), api.service_config
end

Instance Method Details

#addressObject



73
74
75
# File 'lib/gapic/presenters/gem_presenter.rb', line 73

def address
  name.split("-").map(&:camelize)
end

#api_idObject



149
150
151
152
153
# File 'lib/gapic/presenters/gem_presenter.rb', line 149

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_shortnameObject



155
156
157
# File 'lib/gapic/presenters/gem_presenter.rb', line 155

def api_shortname
  gem_config :api_shortname
end

#authorsObject



108
109
110
111
# File 'lib/gapic/presenters/gem_presenter.rb', line 108

def authors
  gem_config(:authors) ||
    ["Google LLC"]
end

#dependenciesObject



205
206
207
208
209
210
211
212
213
214
# File 'lib/gapic/presenters/gem_presenter.rb', line 205

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.merge! mixins_model.dependencies if mixins_model.mixins?
    deps
  end
end

#dependency_listObject



216
217
218
219
220
# File 'lib/gapic/presenters/gem_presenter.rb', line 216

def dependency_list
  dependencies.to_a
              .map { |name, requirements| [name, Array(requirements)] }
              .sort_by { |name, _requirements| name }
end

#descriptionObject



118
119
120
121
# File 'lib/gapic/presenters/gem_presenter.rb', line 118

def description
  gem_config(:description) ||
    "#{name} is the official client library for the #{title} API."
end

#emailObject



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

def email
  gem_config(:email) ||
    "googleapis-packages@google.com"
end

#entrypoint_requireObject



192
193
194
195
# File 'lib/gapic/presenters/gem_presenter.rb', line 192

def entrypoint_require
  return "" unless packages?
  packages.first.package_require
end

#env_prefixObject



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

def env_prefix
  gem_config(:env_prefix)&.upcase
end

#extra_filesObject



201
202
203
# File 'lib/gapic/presenters/gem_presenter.rb', line 201

def extra_files
  ["README.md", "LICENSE.md", ".yardopts"]
end

#first_non_common_serviceObject



60
61
62
# File 'lib/gapic/presenters/gem_presenter.rb', line 60

def first_non_common_service
  services.find { |service| service.common_service_delegate.nil? }
end

#first_package_drift_jsonString

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

Returns:

  • (String)


239
240
241
# File 'lib/gapic/presenters/gem_presenter.rb', line 239

def first_package_drift_json
  JSON.pretty_generate first_package_drift_manifest
end

#first_package_drift_manifestHash

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

Returns:

  • (Hash)


229
230
231
232
# File 'lib/gapic/presenters/gem_presenter.rb', line 229

def first_package_drift_manifest
  return {} unless packages?
  packages.first.drift_manifest
end

#free_tier?Boolean

Returns:

  • (Boolean)


166
167
168
# File 'lib/gapic/presenters/gem_presenter.rb', line 166

def free_tier?
  gem_config(:free_tier) || false
end

#generate_rest_clients?Boolean

Returns:

  • (Boolean)


188
189
190
# File 'lib/gapic/presenters/gem_presenter.rb', line 188

def generate_rest_clients?
  @api.generate_rest_clients?
end

#generic_endpoint?Boolean

Returns:

  • (Boolean)


181
182
183
# File 'lib/gapic/presenters/gem_presenter.rb', line 181

def generic_endpoint?
  gem_config(:generic_endpoint) || false
end

#homepageObject



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

def homepage
  gem_config(:homepage) ||
    "https://github.com/googleapis/googleapis"
end

#iam_dependency?Boolean

Returns:

  • (Boolean)


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

def iam_dependency?
  @api.files.map(&:name).any? { |f| f.start_with? "google/iam/v1/" }
end

#issue_tracker_urlObject



159
160
161
# File 'lib/gapic/presenters/gem_presenter.rb', line 159

def issue_tracker_url
  gem_config :issue_tracker_url
end

#library_documentation_urlObject



141
142
143
# File 'lib/gapic/presenters/gem_presenter.rb', line 141

def library_documentation_url
  gem_config(:library_documentation_url) || "https://rubydoc.info/gems/#{name}"
end

#license_nameObject



197
198
199
# File 'lib/gapic/presenters/gem_presenter.rb', line 197

def license_name
  "MIT"
end

#mixins?Boolean

Whether there are mixin services that should be referenced in the services for this gem

Returns:

  • (Boolean)


272
273
274
# File 'lib/gapic/presenters/gem_presenter.rb', line 272

def mixins?
  @mixins_model.mixins?
end

#mixins_modelGapic::Model::Mixins

The model for the mixin services



281
282
283
# File 'lib/gapic/presenters/gem_presenter.rb', line 281

def mixins_model
  @mixins_model
end

#nameObject



77
78
79
# File 'lib/gapic/presenters/gem_presenter.rb', line 77

def name
  gem_config :name
end

#namespaceObject



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

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

#packagesEnumerable<Gapic::Presenters::PackagePresenter>

Returns:



39
40
41
42
43
44
# File 'lib/gapic/presenters/gem_presenter.rb', line 39

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?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/gapic/presenters/gem_presenter.rb', line 46

def packages?
  !packages.empty?
end

#product_documentation_urlObject



145
146
147
# File 'lib/gapic/presenters/gem_presenter.rb', line 145

def product_documentation_url
  gem_config :product_documentation_url
end

#proto_filesObject



64
65
66
67
68
69
70
71
# File 'lib/gapic/presenters/gem_presenter.rb', line 64

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_serviceGapic::Presenters::ServicePresenter

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.



249
250
251
252
253
# File 'lib/gapic/presenters/gem_presenter.rb', line 249

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

#servicesEnumerable<Gapic::Presenters::ServicePresenter>

Returns:



53
54
55
56
57
58
# File 'lib/gapic/presenters/gem_presenter.rb', line 53

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?Boolean

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.

Returns:

  • (Boolean)


262
263
264
# File 'lib/gapic/presenters/gem_presenter.rb', line 262

def show_grpc_logging_docs?
  packages? && quick_start_service.usable_service_presenter.is_a?(ServicePresenter)
end

#summaryObject



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

def summary
  gem_config(:summary) ||
    "API Client library for the #{title} API"
end

#titleObject



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

def title
  gem_config(:title) ||
    namespace.split("::").join(" ")
end

#versionObject



91
92
93
94
# File 'lib/gapic/presenters/gem_presenter.rb', line 91

def version
  gem_config(:version) ||
    "0.0.1"
end

#version_file_pathObject



100
101
102
# File 'lib/gapic/presenters/gem_presenter.rb', line 100

def version_file_path
  "#{version_require}.rb"
end

#version_name_fullObject



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

def version_name_full
  "#{namespace}::VERSION"
end

#version_requireObject



96
97
98
# File 'lib/gapic/presenters/gem_presenter.rb', line 96

def version_require
  ruby_file_path @api, version_name_full
end

#yard_strict?Boolean

Returns:

  • (Boolean)


173
174
175
176
# File 'lib/gapic/presenters/gem_presenter.rb', line 173

def yard_strict?
  # Default to true unless the config is explicitly set to "false"
  gem_config(:yard_strict).nil? || gem_config(:yard_strict)
end