303: def requireDerivative( modName )
304:
305:
306:
307: if ( self.respond_to?(:derivativeDirs) )
308: subdirs = self.derivativeDirs
309: subdirs = [ subdirs ] unless subdirs.is_a?( Array )
310:
311:
312: else
313: subdirs = ['']
314: end
315:
316: fatals = []
317:
318:
319:
320: catch( :found ) {
321: subdirs.collect {|dir| dir.strip}.each do |subdir|
322: self.makeRequirePath( modName, subdir ).each {|path|
323:
324:
325:
326:
327: begin
328: require( path.untaint )
329: rescue LoadError => err
330: PluginFactory::log :debug,
331: "No module at '%s', trying the next alternative: '%s'" %
332: [ path, err.message ]
333: rescue ScriptError,StandardError => err
334: fatals << err
335: PluginFactory::log :error,
336: "Found '#{path}', but encountered an error: %s\n\t%s" %
337: [ err.message, err.backtrace.join("\n\t") ]
338: else
339:
340:
341: throw :found
342: end
343: }
344: end
345:
346:
347:
348:
349:
350: if ! fatals.empty?
351:
352: Kernel::raise( fatals.first )
353: end
354:
355: nil
356: }
357: end