Sha256: 4fc17b84c39d225404a3c95a06256877f2b4f9de2818857231e3d1d313f6f508

Contents?: true

Size: 1.53 KB

Versions: 12

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

module Lolcommits
  class PluginManager
    GEM_NAME_PREFIX = /^#{Lolcommits::GEM_NAME}-/.freeze

    def self.init
      pm = new
      pm.load_plugins
      pm
    end

    attr_reader :plugins

    def initialize
      @plugins = []
    end

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

    # @return [Lolcommits::Plugin] finds the first plugin matching name
    def find_by_name(name)
      @plugins.find { |plugin| plugin.name =~ /^#{name}/ } unless name.empty?
    end

    def plugin_names
      @plugins.map(&:name).sort
    end

    def enabled_plugins_for(runner)
      @plugins.map do |gem_plugin|
        plugin = gem_plugin.plugin_instance(runner)
        plugin.enabled? ? plugin : nil
      end.compact
    end

    private

    # @return [Array] find all installed and supported plugins, populate
    #   @plugins array and return it
    def find_plugins
      find_gems.map do |gem|
        plugin = GemPlugin.new(gem)
        @plugins << plugin if plugin.supported? && !plugin_located?(plugin)
      end

      @plugins
    end

    # @return [Array] find all installed gems matching GEM_NAME_PREFIX
    def find_gems
      gem_list.select { |gem| gem.name =~ GEM_NAME_PREFIX }
    end

    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

12 entries across 12 versions & 1 rubygems

Version Path
lolcommits-0.16.5 lib/lolcommits/plugin_manager.rb
lolcommits-0.16.3 lib/lolcommits/plugin_manager.rb
lolcommits-0.16.2 lib/lolcommits/plugin_manager.rb
lolcommits-0.16.1 lib/lolcommits/plugin_manager.rb
lolcommits-0.16.0 lib/lolcommits/plugin_manager.rb
lolcommits-0.16.0.pre1 lib/lolcommits/plugin_manager.rb
lolcommits-0.15.1 lib/lolcommits/plugin_manager.rb
lolcommits-0.15.0 lib/lolcommits/plugin_manager.rb
lolcommits-0.14.2 lib/lolcommits/plugin_manager.rb
lolcommits-0.14.1 lib/lolcommits/plugin_manager.rb
lolcommits-0.14.0 lib/lolcommits/plugin_manager.rb
lolcommits-0.13.1 lib/lolcommits/plugin_manager.rb