Sha256: 655e9856b4d515068804743547a5af03e59a922a3b9ee22f6aa9076ed66b885a

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

module Lolcommits
  class PluginManager
    GEM_NAME_PREFIX = /^lolcommits-plugin-/

    def initialize
      @plugins = []
    end

    # @return [Array] find all installed and supported plugins, storing to
    #   @plugins Array, and returns this array
    def locate_plugins
      gem_list.each do |gem|
        next if gem.name !~ GEM_NAME_PREFIX
        plugin_name = gem.name.split('-', 2).last
        plugin = GemPlugin.new(plugin_name, gem.name, gem)

        @plugins << plugin if plugin.supported? && !plugin_located?(plugin)
      end
      @plugins
    end

    # @return [Hash] A hash with all plugin names (minus the prefix) as
    #   keys and Plugin objects as values
    def plugins
      h = {}
      @plugins.each do |plugin|
        h[plugin.name] = plugin
      end
      h
    end

    # require all plugins
    def load_plugins
      @plugins.map(&:activate!)
    end

    private

    def plugin_located?(plugin)
      @plugins.any? { |existing| existing.gem_name == plugin.gem_name }
    end

    def gem_list
      Gem.refresh
      Gem::Specification.respond_to?(:each) ? Gem::Specification : Gem.source_index.find_name('')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lolcommits-0.9.3.pre1 lib/lolcommits/plugin_manager.rb