On Dec 5, 2006, at 2:15 PM, Griff wrote:
Is there some way to easily file out object definitions from an irb
session?
There is an excellent collection of history methods for IRb at:
http://blog.bleything.net/articles/2006/10/21/shell-style-history-for-
irb
Unfortunately, that link seems to be down right now. The following
code is my .irbrc file, which includes the methods. (It uses the
wirble gem.)
James Edward G. II
load libraries
require ‘rubygems’
require ‘wirble’
start wirble (with color)
Wirble.init
Wirble.colorize
def history(how_many = 50)
history_size = Readline::HISTORY.size
no lines, get out of here
puts “No history” and return if history_size == 0
start_index = 0
not enough lines, only show what we have
if history_size <= how_many
how_many = history_size - 1
end_index = how_many
else
end_index = history_size - 1 # -1 to adjust for array offset
start_index = end_index - how_many
end
start_index.upto(end_index) {|i| print_line i}
nil
end
alias :h :history
-2 because -1 is ourself
def history_do(lines = (Readline::HISTORY.size - 2))
irb_eval lines
nil
end
alias :h! :history_do
def history_write(filename, lines)
file = File.open(filename, ‘w’)
get_lines(lines).each do |l|
file << “#{l}\n”
end
file.close
end
alias :hw :history_write
private
def get_line(line_number)
Readline::HISTORY[line_number]
end
def get_lines(lines = [])
return [get_line(lines)] if lines.is_a? Fixnum
out = []
lines = lines.to_a if lines.is_a? Range
lines.each do |l|
out << Readline::HISTORY[l]
end
return out
end
def print_line(line_number, show_line_numbers = true)
print "[%04d] " % line_number if show_line_numbers
puts get_line(line_number)
end
def irb_eval(lines)
to_eval = get_lines(lines)
eval to_eval.join(“\n”)
to_eval.each {|l| Readline::HISTORY << l}
end