class Module
# Load file directly into module/class namespace.
#
# Please use this with careful consideration.
# It is best suited to loading plugin-type scripts,
# and should generally not be used as a substitue for
# Ruby's standard load system.
#
# NOTE: This method is not a common core extension and is not
# loaded automatically when using require 'facets'
.
#
# CREDIT: Trans
#
# @uncommon
# require 'facets/module/module_load'
#
def module_load( path )
if path =~ /^[\/~.]/
file = File.expand_path(path)
else
$LOAD_PATH.each do |lp|
file = File.join(lp,path)
break if File.exist?(file)
file = nil
end
end
raise LoadError, "no such file to load -- #{path}" unless file
module_eval(File.read(file))
end
# Require file into module/class namespace.
#
# Unlike load this keeps a per-module cache and will
# not load the same file into the same module more
# than once despite repeated attempts.
#
# The cache is kept in a global var called +$module_require+.
#
# Please use this with careful consideration.
# It is best suited to loading plugin-type scripts,
# and should generally not be used as a substitue for
# Ruby's standard load system.
#
# NOTE: This method is not a common core extension and is not loaded
# automatically when using require 'facets'
.
#
# CREDIT: Trans
#
# @uncommon
# require 'facets/module/module_load'
#
def module_require( path )
if path =~ /^[\/~.]/
file = File.expand_path(path)
else
$LOAD_PATH.each do |lp|
file = File.join(lp,path)
break if File.exist?(file)
file += '.rb'
break if File.exist?(file)
file = nil
end
end
raise LoadError, "no such file to load -- #{path}" unless file
# per-module load cache
$module_require ||= {}
$module_require[self] ||= {}
loaded = $module_require[self]
if loaded.key?(file)
false
else
loaded[file] = true
script = File.read(file)
module_eval(script)
true
end
end
alias_method :class_require, :module_require
alias_method :class_load, :module_load
end