Class: Vagrant::Plugin

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant/plugin.rb

Overview

Represents a single plugin and also manages loading plugins from RubyGems. If a plugin has a vagrant_init.rb file somewhere on its load path, then this class will find it and load it. For logging purposes (for debugging), the list of loaded plugins is stored in the Plugin.plugins array.

Constant Summary collapse

@@plugins =

The array of loaded plugins.

[]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(spec, file) ⇒ Plugin

Initializes a new plugin, given a Gemspec and the path to the gem's vagrant_init.rb file. This should never be called manually. Instead load! creates all the instances.



50
51
52
53
54
55
# File 'lib/vagrant/plugin.rb', line 50

def initialize(spec, file)
  @gemspec = spec
  @file = file

  load file
end

Instance Attribute Details

#fileObject (readonly)

The path to the vagrant_init.rb file which was loaded for this plugin.



17
18
19
# File 'lib/vagrant/plugin.rb', line 17

def file
  @file
end

#gemspecObject (readonly)

The gemspec of this plugin. This is an actual gemspec object.



14
15
16
# File 'lib/vagrant/plugin.rb', line 14

def gemspec
  @gemspec
end

Class Method Details

.load!Object

Loads all the plugins for Vagrant. Plugins are currently gems which have a "vagrant_init.rb" somewhere on their load path. This file is loaded to kick off the load sequence for that plugin.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/vagrant/plugin.rb', line 23

def self.load!
  # Stupid hack since Rails 2.3.x overrides Gem.source_index with their
  # own incomplete replacement which causes issues.
  index = Gem.source_index
  index = [index.installed_source_index, index.vendor_source_index] if defined?(Rails::VendorGemSourceIndex) && index.is_a?(Rails::VendorGemSourceIndex)

  # Look for a vagrant_init.rb in all the gems, but only the
  # latest version of the gems.
  [index].flatten.each do |source|
    source.latest_specs.each do |spec|
      file = Gem.searcher.matching_files(spec, "vagrant_init.rb").first
      next if !file

      @@plugins << new(spec, file)
    end
  end
end

.pluginsArray

Returns the array of plugins which are currently loaded by Vagrant.

Returns:

  • (Array)


45
# File 'lib/vagrant/plugin.rb', line 45

def self.plugins; @@plugins; end