def require_derivative( mod_name )
if ( self.respond_to?(:derivative_dirs) )
subdirs = self.derivative_dirs
elsif ( self.respond_to?(:derivativeDirs) )
subdirs = self.derivativeDirs
else
subdirs = ['']
end
subdirs = [ subdirs ] unless subdirs.is_a?( Array )
PluginFactory.log.debug "Subdirs are: %p" % [subdirs]
fatals = []
tries = []
subdirs.collect {|dir| dir.strip}.each do |subdir|
self.make_require_path( mod_name, subdir ).each do |path|
PluginFactory.log.debug "Trying #{path}..."
tries << path
begin
require( path.untaint )
rescue LoadError => err
PluginFactory.log.debug "No module at '%s', trying the next alternative: '%s'" %
[ path, err.message ]
rescue Exception => err
fatals << err
PluginFactory.log.error "Found '#{path}', but encountered an error: %s\n\t%s" %
[ err.message, err.backtrace.join("\n\t") ]
else
PluginFactory.log.info "Loaded '#{path}' without error."
return path
end
end
end
PluginFactory.log.debug "fatals = %p" % [ fatals ]
if fatals.empty?
errmsg = "Couldn't find a %s named '%s': tried %p" % [
self.factory_type,
mod_name,
tries
]
PluginFactory.log.error( errmsg )
raise FactoryError, errmsg
else
PluginFactory.log.debug "Re-raising first fatal error"
Kernel.raise( fatals.first )
end
end