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