class Kustomize::PluginManager

Public Class Methods

new(session:) click to toggle source
# File lib/kustomize/plugin_manager.rb, line 6
def initialize(session:)
  @session = session
  @registry = Kustomize::PluginRegistry.instance
end

Public Instance Methods

get(api_version:, kind:) click to toggle source
# File lib/kustomize/plugin_manager.rb, line 11
def get(api_version:, kind:)
  plugin_klass = @registry.get(api_version: api_version, kind: kind)
  return plugin_klass if plugin_klass

  try_loading(api_version, kind)
end

Private Instance Methods

try_loading(api_version, kind) click to toggle source
# File lib/kustomize/plugin_manager.rb, line 19
def try_loading(api_version, kind)
  rel_load_path = Pathname.new(api_version) / "#{underscore(kind)}.rb"

  abs_load_path =
    @session.effective_load_paths
    .map{ |prefix| prefix / rel_load_path }
    .find{ |f| f.file? }

  raise LoadError, "could not find kustomize plugin to load" unless abs_load_path

  Kernel.require(abs_load_path)

  plugin_klass = @registry.get(api_version: api_version, kind: kind)

  raise LoadError, "#{abs_load_path} did not define expected plugin" unless plugin_klass

  plugin_klass
end
underscore(str) click to toggle source
# File lib/kustomize/plugin_manager.rb, line 39
def underscore(str)
  str
  .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
  .gsub(/([a-z\d])([A-Z])/,'\1_\2')
  .tr("-", "_")
  .downcase
end