module CF::Plugin

Public Class Methods

load_all() click to toggle source
# File lib/cf/plugin.rb, line 11
def self.load_all
  # auto-load gems with 'cf-plugin' in their name
  matching =
    if Gem::Specification.respond_to? :find_all
      Gem::Specification.find_all do |s|
        s.name =~ /cf-plugin/
      end
    else
      Gem.source_index.find_name(/cf-plugin/)
    end

  enabled = Set.new(matching.collect(&:name))

  cf_gems = Gem.loaded_specs["cf"]
  ((cf_gems && cf_gems.dependencies) || Gem.loaded_specs.values).each do |dep|
    if dep.name =~ /cf-plugin/
      require "#{dep.name}/plugin"
      enabled.delete dep.name
    end
  end

  # allow explicit enabling/disabling of gems via config
  plugins = File.expand_path(CF::PLUGINS_FILE)
  if File.exists?(plugins) && yaml = YAML.load_file(plugins)
    enabled += yaml["enabled"] if yaml["enabled"]
    enabled -= yaml["disabled"] if yaml["disabled"]
  end

  # load up each gem's 'plugin' file
  #
  # we require this file specifically so people can require the gem
  # without it plugging into CF
  enabled.each do |gemname|
    begin
      require "#{gemname}/plugin"
    rescue Gem::LoadError => e
      puts "Failed to load #{gemname}:"
      puts "  #{e}"
      puts
      puts "You may need to update or remove this plugin."
      puts
    end
  end
end