class Kontena::PluginManager::Installer

Attributes

plugin_name[R]
pre[R]
version[RW]

Public Class Methods

new(plugin_name, pre: false, version: nil) click to toggle source

Create a new instance of plugin installer @param plugin_name [String] @param pre [Boolean] install a prerelease version if available @param version [String] install a specific version

# File lib/kontena/plugin_manager/installer.rb, line 17
def initialize(plugin_name, pre: false, version: nil)
  @plugin_name = plugin_name
  @pre = pre
  @version = version
end

Public Instance Methods

available_upgrade() click to toggle source
# File lib/kontena/plugin_manager/installer.rb, line 57
def available_upgrade
  installed = installed(plugin_name)
  return false unless installed

  pre = installed.version.prerelease?
  latest = rubygems_client.latest_version(prefix(plugin_name), pre: pre? || pre)
  if latest > installed.version
    latest.to_s
  end
end
command() click to toggle source
# File lib/kontena/plugin_manager/installer.rb, line 27
def command
  @command ||= Gem::DependencyInstaller.new(
    document: false,
    force: true,
    prerelease: pre,
    minimal_deps: true
  )
end
install() click to toggle source

Install a plugin

# File lib/kontena/plugin_manager/installer.rb, line 37
def install
  return install_uri if plugin_name.include?('://')
  plugin_version = version.nil? ? Gem::Requirement.default : Gem::Requirement.new(version)
  command.install(prefix(plugin_name), plugin_version)
  command.installed_gems
end
install_uri() click to toggle source
# File lib/kontena/plugin_manager/installer.rb, line 44
def install_uri
  require 'tempfile'
  require 'open-uri'
  file = Tempfile.new(['kontena_plugin', '.gem'])
  open(plugin_name) do |input|
    file.write input.read
    file.close
  end
  self.class.new(file.path).install
ensure
  file.unlink
end
pre?() click to toggle source
# File lib/kontena/plugin_manager/installer.rb, line 23
def pre?
  !!@pre
end
upgrade() click to toggle source

Upgrade an installed plugin

# File lib/kontena/plugin_manager/installer.rb, line 69
def upgrade
  return install if version
  upgrade_to = available_upgrade
  if upgrade_to
    Installer.new(plugin_name, version: upgrade_to).install
  end
end