class Derelict::Plugin::Manager

A class that handles managing plugins for a Vagrant instance

Attributes

instance[R]

Public Class Methods

new(instance) click to toggle source

Initializes a Manager for use with a particular instance

* instance: The Derelict::Instance which will have its
            plugins managed by this Manager
# File lib/derelict/plugin/manager.rb, line 17
def initialize(instance)
  @instance = instance
  logger.debug "Successfully initialized #{description}"
end

Public Instance Methods

description() click to toggle source

Provides a description of this Connection

Mainly used for log messages.

# File lib/derelict/plugin/manager.rb, line 102
def description
  "Derelict::Plugin::Manager for #{instance.description}"
end
fetch(plugin_name) click to toggle source

Retrieves a plugin with a particular name

* plugin_name: Name of the plugin to look for (as a string)
# File lib/derelict/plugin/manager.rb, line 93
def fetch(plugin_name)
  list.find {|plugin| plugin.name == plugin_name}.tap do |plugin|
    raise Plugin::NotFound.new plugin_name if plugin.nil?
  end
end
install(plugin_name, options = {}) click to toggle source

Installs a plugin (optionally a particular version)

If no version is specified, the latest stable version is used by Vagrant.

* plugin_name: Name of the plugin to install (as a string)
* options:     Hash of options, valid keys:
   * version:  Particular version to install (optional,
               latest version will be installed if omitted)
   * log:      Whether to log the output (optional, defaults
               to false)
# File lib/derelict/plugin/manager.rb, line 50
def install(plugin_name, options = {})
  options = {:log => false, :version => nil}.merge(options)
  logger.info "Installing plugin '#{plugin_name}' using #{description}"

  version = options[:version]
  command = [:plugin, "install", plugin_name]
  command.concat ["--plugin-version", version] unless version.nil?

  log_block = options[:log] ? shell_log_block : nil
  instance.execute!(*command, &log_block).tap do
    flush_cache # flush memoized method return values
  end
end
installed?(plugin_name, version = nil) click to toggle source

Determines whether a particular plugin is installed

* plugin_name: Name of the plugin to look for (as a string)
# File lib/derelict/plugin/manager.rb, line 33
def installed?(plugin_name, version = nil)
  fetch(plugin_name).version == version or version.nil?
rescue Plugin::NotFound
  false
end
list() click to toggle source

Retrieves the Set of currently installed plugins

# File lib/derelict/plugin/manager.rb, line 23
def list
  logger.info "Retrieving Vagrant plugin list for #{description}"
  output = instance.execute!(:plugin, "list").stdout
  Derelict::Parser::PluginList.new(output).plugins
end
uninstall(plugin_name, options = {}) click to toggle source

Uninstalls a particular Vagrant plugin

* plugin_name: Name of the plugin to uninstall (as a string)
# File lib/derelict/plugin/manager.rb, line 67
def uninstall(plugin_name, options = {})
  options = {:log => false}.merge(options)
  logger.info "Uninstalling plugin '#{plugin_name}' using #{description}"

  log_block = options[:log] ? shell_log_block : nil
  instance.execute!(:plugin, "uninstall", plugin_name, &log_block).tap do
    flush_cache # flush memoized method return values
  end
end
update(plugin_name, options = {}) click to toggle source

Updates a particular Vagrant plugin

* plugin_name: Name of the plugin to update (as a string)
# File lib/derelict/plugin/manager.rb, line 80
def update(plugin_name, options = {})
  options = {:log => false}.merge(options)
  logger.info "Updating plugin '#{plugin_name}' using #{description}"

  log_block = options[:log] ? shell_log_block : nil
  instance.execute!(:plugin, "update", plugin_name, &log_block).tap do
    flush_cache # flush memoized method return values
  end
end