class Pangrid::Plugin
Constants
- DESCRIPTION
- FAILED
- MISSING_DEPS
- REGISTRY
Public Class Methods
class_to_name(str)
click to toggle source
utility functions
# File lib/pangrid/plugin.rb, line 99 def self.class_to_name(str) str.gsub(/.*:/, ''). gsub(/([A-Z]+)([A-Z][a-z])/,'\1-\2'). gsub(/([a-z\d])([A-Z])/,'\1-\2'). downcase end
get(name)
click to toggle source
# File lib/pangrid/plugin.rb, line 94 def self.get(name) REGISTRY[name] end
inherited(subclass)
click to toggle source
# File lib/pangrid/plugin.rb, line 40 def self.inherited(subclass) name = class_to_name(subclass.name) #puts "Registered #{subclass} as #{name}" REGISTRY[name] = subclass end
list_all()
click to toggle source
# File lib/pangrid/plugin.rb, line 65 def self.list_all puts "-------------------------------------------------------" puts "Available plugins (F = from, T = to):" puts "-------------------------------------------------------" REGISTRY.keys.sort.each do |name| plugin = REGISTRY[name] provides = [:read, :write].select {|m| plugin.method_defined? m} provides = provides.map {|m| {read: 'F', write: 'T'}[m]}.join puts " #{name} [#{provides}]".ljust(30) + plugin.const_get(:DESCRIPTION) end if !MISSING_DEPS.empty? puts puts "-------------------------------------------------------" puts "Missing dependencies for plugins:" puts "-------------------------------------------------------" MISSING_DEPS.keys.sort.each do |name| puts " " + name + ": gem install " + MISSING_DEPS[name].join(" ") end end if !FAILED.empty? puts puts "The following plugins could not load due to errors:" puts "-------------------------------------------------------" FAILED.each do |error| puts " " + error end end end
load_all()
click to toggle source
# File lib/pangrid/plugin.rb, line 46 def self.load_all REGISTRY.clear FAILED.clear plugins = Dir.glob(File.dirname(__FILE__) + "/plugins/*.rb") plugins.each do |f| load_plugin f end end
load_plugin(filename)
click to toggle source
# File lib/pangrid/plugin.rb, line 55 def self.load_plugin(filename) begin require filename rescue PluginDependencyError => e MISSING_DEPS[e.name] = e.gems rescue StandardError => e FAILED << "#{File.basename(filename)}: #{e}" end end