def autoreload( *args )
check_interval=10
include_features = true
files = nil
args.each do |arg|
case arg
when Numeric
check_interval = arg
when String
files = Dir.glob( arg )
when Array
files = arg
when TrueClass, FalseClass
include_features = arg
end
end
file_mtime = {}
Thread.new(Time.now) do |start_time|
loop do
sleep check_interval
if include_features
feature_files = $LOADED_FEATURES.collect { |feature|
$LOAD_PATH.each { |lp| file = File.join(lp, feature) }
}.flatten
feature_files.each { |file|
if File.exists?(file) and (mtime = File.stat(file).mtime) > (file_mtime[file] || start_time)
$autoreload_dirty = true
file_mtime[file] = mtime
STDERR.puts "File '#{ file }' reloaded"
begin
load(file)
rescue Exception => e
STDERR.puts e.inspect
end
end
}
end
if files
files.each do |file|
if File.exists?(file) and (mtime = File.stat(file).mtime) > (file_mtime[file] || start_time)
$autoreload_dirty = true
file_mtime[file] = mtime
STDERR.puts "File '#{ file }' changed"
end
end
end
end
end
end