Skip to content

Instantly share code, notes, and snippets.

@cicloid
Created March 10, 2011 19:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cicloid/864720 to your computer and use it in GitHub Desktop.
Save cicloid/864720 to your computer and use it in GitHub Desktop.
# Make gems available
require 'rubygems' rescue nil
require 'irb' rescue nil
require 'yaml'
Bundler.require(:default, :console) if defined?(Bundler)
alias q exit
class Object
def local_methods
(methods - Object.instance_methods).sort
end
end
# annotate column names of an AR model
def show(obj)
y(obj.send("column_names"))
end
# Clear the screen
def clear
system 'clear'
if ENV['RAILS_ENV']
return "Rails environment: " + ENV['RAILS_ENV']
else
return "No rails environment - happy hacking!";
end
end
# Load / reload files faster
# http://www.themomorohoax.com/2009/03/27/irb-tip-load-files-faster
def fl(file_name)
file_name += '.rb' unless file_name =~ /\.rb/
@@recent = file_name
load "#{file_name}"
end
def rl
fl(@@recent)
end
# Reload the file and try the last command again
# http://www.themomorohoax.com/2009/04/07/ruby-irb-tip-try-again-faster
def rt
rl
eval(choose_last_command)
end
unless IRB.version.include?('DietRB')
IRB::Irb.class_eval do
def output_value
ap @context.last_value
end
end
else # MacRuby
IRB.formatter = Class.new(IRB::Formatter) do
def inspect_object(object)
object.ai
end
end.new
end
# prevent 'rt' itself from recursing.
def choose_last_command
real_last = Readline::HISTORY.to_a[-2]
real_last == 'rt' ? @@saved_last : (@@saved_last = real_last)
end
ANSI = {}
ANSI[:RESET] = "\e[0m"
ANSI[:BOLD] = "\e[1m"
ANSI[:UNDERLINE] = "\e[4m"
ANSI[:LGRAY] = "\e[0;37m"
ANSI[:GRAY] = "\e[1;30m"
ANSI[:RED] = "\e[31m"
ANSI[:GREEN] = "\e[32m"
ANSI[:YELLOW] = "\e[33m"
ANSI[:BLUE] = "\e[34m"
ANSI[:MAGENTA] = "\e[35m"
ANSI[:CYAN] = "\e[36m"
ANSI[:WHITE] = "\e[37m"
# # Build a simple colorful IRB prompt
# IRB.conf[:PROMPT][:SIMPLE_COLOR] = {
# :PROMPT_I => "#{ANSI[:BLUE]}>>#{ANSI[:RESET]} ",
# :PROMPT_N => "#{ANSI[:BLUE]}>>#{ANSI[:RESET]} ",
# :PROMPT_C => "#{ANSI[:RED]}?>#{ANSI[:RESET]} ",
# :PROMPT_S => "#{ANSI[:YELLOW]}?>#{ANSI[:RESET]} ",
# :RETURN => "#{ANSI[:GREEN]}=>#{ANSI[:RESET]} %s\n",
# :AUTO_INDENT => true }
# IRB.conf[:PROMPT_MODE] = :SIMPLE_COLOR
# Load the readline module.
IRB.conf[:USE_READLINE] = true
# Automatic Indentation
IRB.conf[:AUTO_INDENT]=false
# Save History between irb sessions
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 100
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
# Loading extensions of the console. This is wrapped
# because some might not be included in your Gemfile
# and errors will be raised
def extend_console(name, care = true, required = true)
if care
require name if required
yield if block_given?
$console_extensions << "#{ANSI[:GREEN]}#{name}#{ANSI[:RESET]}"
else
$console_extensions << "#{ANSI[:GRAY]}#{name}#{ANSI[:RESET]}"
end
rescue LoadError
$console_extensions << "#{ANSI[:RED]}#{name}#{ANSI[:RESET]}"
end
$console_extensions = []
# Tab Completion
extend_console "irb/completion"
# extend_console "irb/readline"
# Wirble is a gem that handles coloring the IRB
# output and history
extend_console 'wirble' do
Wirble.init
Wirble.colorize
end
# Hirb makes tables easy.
extend_console 'hirb' do
require 'hirb/import_object'
Hirb.enable
extend Hirb::Console
end
# awesome_print is prints prettier than pretty_print
extend_console 'ap' do
alias pp ap
end
# When you're using Rails 2 console, show queries in the console
extend_console 'rails2', (ENV.include?('RAILS_ENV') && !Object.const_defined?('RAILS_DEFAULT_LOGGER')), false do
require 'logger'
RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
end
# When you're using Rails 3 console, show queries in the console
extend_console 'rails3', defined?(ActiveSupport::Notifications), false do
$odd_or_even_queries = false
ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
$odd_or_even_queries = !$odd_or_even_queries
color = $odd_or_even_queries ? ANSI[:CYAN] : ANSI[:MAGENTA]
event = ActiveSupport::Notifications::Event.new(*args)
time = "%.1fms" % event.duration
name = event.payload[:name]
sql = event.payload[:sql].gsub("\n", " ").squeeze(" ")
puts " #{ANSI[:UNDERLINE]}#{color}#{name} (#{time})#{ANSI[:RESET]} #{sql}"
end
end
# Add a method pm that shows every method on an object
# Pass a regex to filter these
extend_console 'pm', true, false do
def pm(obj, *options) # Print methods
methods = obj.methods
methods -= Object.methods unless options.include? :more
filter = options.select {|opt| opt.kind_of? Regexp}.first
methods = methods.select {|name| name =~ filter} if filter
data = methods.sort.collect do |name|
method = obj.method(name)
if method.arity == 0
args = "()"
elsif method.arity > 0
n = method.arity
args = "(#{(1..n).collect {|i| "arg#{i}"}.join(", ")})"
elsif method.arity < 0
n = -method.arity
args = "(#{(1..n).collect {|i| "arg#{i}"}.join(", ")}, ...)"
end
klass = $1 if method.inspect =~ /Method: (.*?)#/
[name.to_s, args, klass]
end
max_name = data.collect {|item| item[0].size}.max
max_args = data.collect {|item| item[1].size}.max
data.each do |item|
print " #{ANSI[:YELLOW]}#{item[0].to_s.rjust(max_name)}#{ANSI[:RESET]}"
print "#{ANSI[:BLUE]}#{item[1].ljust(max_args)}#{ANSI[:RESET]}"
print " #{ANSI[:GRAY]}#{item[2]}#{ANSI[:RESET]}\n"
end
data.size
end
end
# taken from @jsmestad's gist - http://gist.github.com/406963
# http://drnicutilities.rubyforge.org/map_by_method/
extend_console "map_by_method"
# Dr Nic's gem inspired by
# http://redhanded.hobix.com/inspect/stickItInYourIrbrcMethodfinder.html
extend_console "what_methods"
# Print information about any HTTP requests being made
extend_console "net-http-spy"
# 'lp' to show method lookup path
extend_console "looksee/shortcuts"
#
# IRB.conf[:PROMPT][:MY_PROMPT] = { # name of prompt mode
# :PROMPT_I => ">> ", # normal prompt
# :PROMPT_S => ">\" ", # prompt for continuing strings
# :PROMPT_C => "> [ ", # prompt for continuing statement
# :RETURN => " ==>%s\n" # format to return value
# }
#
# # Remove the annoying irb(main):001:0 and replace with >>
# IRB.conf[:PROMPT_MODE] = :MY_PROMPT
#
#
# # # Wirble is a set of enhancements for irb
# # # http://pablotron.org/software/wirble/README
# # # Implies require 'pp', 'irb/completion', and 'rubygems'
# # require 'wirble'
# # Wirble.init
# #
# # # Enable colored output
# # Wirble.colorize
puts "#{ANSI[:GRAY]}~> Console extensions:#{ANSI[:RESET]} #{$console_extensions.join(' ')}#{ANSI[:RESET]}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment