module Nuggets::Pluggable

Attributes

plugin_filename[W]

Public Class Methods

load_plugins_for(*klasses) click to toggle source
   # File lib/nuggets/pluggable.rb
32 def self.load_plugins_for(*klasses)
33   klasses.map { |klass| klass.extend(self).load_plugins }
34 end

Public Instance Methods

load_plugins(name = plugin_filename) click to toggle source
   # File lib/nuggets/pluggable.rb
36 def load_plugins(name = plugin_filename)
37   load_path_plugins(name)
38   load_gem_plugins(name)
39   load_env_plugins(name)
40 
41   loaded_plugins.to_a
42 end
loaded_plugins() click to toggle source
   # File lib/nuggets/pluggable.rb
44 def loaded_plugins
45   @loaded_plugins ||= Set.new
46 end
plugin_filename() click to toggle source
   # File lib/nuggets/pluggable.rb
48 def plugin_filename
49   @plugin_filename ||= "#{name.
50     gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
51     gsub(/([a-z\d])([A-Z])/,     '\1_\2').
52     gsub(/::/, '/').tr('-', '_').downcase}_plugin.rb"
53 end

Private Instance Methods

load_env_plugins(name) click to toggle source
   # File lib/nuggets/pluggable.rb
72 def load_env_plugins(name)
73   path = ::ENV["#{name.chomp(ext = ::File.extname(name)).upcase}_PATH"]
74   path.split(::File::PATH_SEPARATOR).each { |dir|
75     load_plugin_files(::Dir["#{dir}/*#{ext}"])
76   } if path
77 end
load_gem_plugins(name) click to toggle source
   # File lib/nuggets/pluggable.rb
66 def load_gem_plugins(name)
67   ::Gem::Specification.latest_specs.each { |spec|
68     load_plugin_files(spec.matches_for_glob(name))
69   } if ::Object.const_defined?(:Gem)
70 end
load_path_plugins(name) click to toggle source
   # File lib/nuggets/pluggable.rb
59 def load_path_plugins(name)
60   $LOAD_PATH.dup.each { |path|
61     plugin = ::File.expand_path(name, path)
62     load_plugin_file(plugin) if ::File.file?(plugin)
63   }
64 end
load_plugin_file(plugin) click to toggle source
   # File lib/nuggets/pluggable.rb
79 def load_plugin_file(plugin)
80   load plugin if loaded_plugins.add?(plugin)
81 rescue ::Exception => err
82   raise unless loaded_plugins.delete?(plugin)
83   warn "Error loading #{name} plugin: #{plugin}: #{err} (#{err.class})"
84 end
load_plugin_files(plugins) click to toggle source
   # File lib/nuggets/pluggable.rb
86 def load_plugin_files(plugins)
87   plugins.each { |plugin| load_plugin_file(::File.expand_path(plugin)) }
88 end