.irbrc with code highlighting, Rails SQL logging, history, and completion
Place in your home directory as .irbrc and relauch script/console or irb.
Be sure to install the ‘wirble’ gem (sudo gem install wirble)
View as text
# load libraries
require 'rubygems'
require 'wirble'
# start wirble (with color)
Wirble.init(:skip_prompt => true, :skip_history => true)
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
require 'logger'
if ENV.include?('RAILS_ENV') && !Object.const_defined?('RAILS_DEFAULT_LOGGER')
# log SQL to the Rails console
Object.const_set('RAILS_DEFAULT_LOGGER', Logger.new(STDOUT))
end