I often found my self retyping a lot of lines when experimenting or
testing in irb after making some changes. I suppose I should be able to
avoid it with a better planning, but…
Anyhow, I wrote a function in my .irbrc that reloads the listed file and
its dependencies so that I can work on my text editor (btw, I’m using
vim) and have irb automatically rerun my script after I made my changes
(in the spirit of Zen test’s autotest). Something like this:
def auto_load main, *dependencies
Thread.new do
main_mtime = File.mtime main; load main
dep_mtime = {}
dependencies.each {|f| dep_mtime[f] = File.mtime f; load f }
loop do
change = false
dependencies.each do |f|
if (t = File.mtime f) > dep_mtime[f]
change = true; dep_mtime[f] = t; load f
end
end
if (t = File.mtime main) > main_mtime or change
main_mtime = t; load main
end
sleep 1
end.run
end
It’s rather crude, perhaps even a clumsy irb practice. I thought maybe
other people have the same need and probably with a better solution.
Does anybody have a suggestion for a better solution or a better
practice when experimenting or testing with irb? Is there a ruby gem
that would be helpful?
You may say “what’s wrong with writing in test.rb and retyping load
‘test.rb’ after making changes?”. Well, it’s kind of nice to automate
that, plus if the change is in one of the ‘require’d files, I need to
re’load’ that.
-andre