Sha256: a42aef9f1b782a027b8896a1f65239ab3541ed7ca521ae534c50f6f176851b92
Contents?: true
Size: 1.93 KB
Versions: 2
Compression:
Stored size: 1.93 KB
Contents
module Lolcommits class PluginManager GEM_NAME_PREFIX = /^lolcommits-/ def self.init pm = new pm.load_plugins pm end def initialize @plugins = [] end # find and require all plugins def load_plugins find_plugins @plugins.map(&:activate!) end def plugins_for(position) plugin_klasses.select do |p| # TODO: remove (legacy support) position munging after 0.9.5 release Array(p.runner_order).include?(position) || Array(p.runner_order).include?(position.to_s.delete('_').to_sym) end end # @return [Lolcommits::Plugin] find first plugin matching name def find_by_name(name) plugin_klasses.find { |plugin| plugin.name =~ /^#{name}/ } end def plugin_names # TODO: when all plugins are gems, get names from GemPlugin with # @plugins.map(&:name) plugin_klasses.map(&:name).sort end private # @return [Array] find all classes inheriting from Lolcommits::Plugin::Base def plugin_klasses # TODO: when all plugins are gems, change this to # @plugins.map(&:plugin_klass) ObjectSpace.each_object(Class).select { |klass| klass < Lolcommits::Plugin::Base } end # @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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lolcommits-0.9.5 | lib/lolcommits/plugin_manager.rb |
lolcommits-0.9.5.pre1 | lib/lolcommits/plugin_manager.rb |