2 BASE_DIR = File.dirname(__FILE__)
4 class NoPluginFound < Exception
8 # load all ruby files in subdirectories
9 Dir[File.join(BASE_DIR, '*')].each do |f|
11 Dir[File.join(f, '*.rb')].each do |rb_file|
18 ObjectSpace::each_object(Class) do |k|
19 if k.include?(Plugin) and k.plugin_name
20 @plugins[k.plugin_name] = k
27 @plugins.each_value(&blk)
30 def get_matching(required, optional = [])
31 plugins = @plugins.values.
32 reject {|x| not x.matches?(required) }.
33 sort_by {|x| x.score(optional) }
34 raise NoPluginFound if plugins.empty?