今天運行 rails c
的時候提示我 no such file to load -- wirble
才想起來當年我有訂製過 ~/.irbrc
這個文件。
不知道大家現在還有這麼玩的麼?
# encoding: utf-8
# Making .irbrc posted at http://www.tech-angels.fr/post/963080350/improve-irb-and-fix-it-on-mac-os-x
# Work with rails3
require 'rubygems'
# Rails3: be sure to include wirble, hirb, pasteboaRb and awesome_print in your Gemfile
require 'wirble'
require 'hirb'
require 'pasteboaRb' # pasteboaRb is a Ruby interface to Mac OS X's Pasteboard.
require 'irb/completion' # You can discover what methods can be called on an object by Double-TAB.
require 'ap' # Pretty print your Ruby objects with style -- in full color and with proper indentation
# load wirble
Wirble.init
Wirble.colorize
# load hirb
# hirb (active record output format in table)
Hirb::View.enable
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"
# IRB Options
IRB.conf[:AUTO_INDENT] = true
IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:EVAL_HISTORY] = 200
if defined?(Rails)
require 'logger'
Rails.logger=Logger.new(STDOUT)
#IRB.conf[:USE_READLINE] = true
ActiveRecord::Base.logger = Rails.logger
# Display the RAILS ENV in the prompt
# ie : [Development]>>
IRB.conf[:PROMPT][:CUSTOM] = {
:PROMPT_N => "[#{Rails.env.capitalize}]>> ",
:PROMPT_I => "[#{Rails.env.capitalize}]>> ",
:PROMPT_S => nil,
:PROMPT_C => "?> ",
:RETURN => "=> %s\n"
}
# Set default prompt
IRB.conf[:PROMPT_MODE] = :CUSTOM
end
# We can also define convenient methods (credits go to thoughtbot)
def sql(query)
ActiveRecord::Base.connection.select_all(query)
end
# annotate column names of an AR model
def show(obj)
y(obj.send("column_names"))
end
# Add a method pm that shows every method on an object
# Pass a regex to filter these
def pm(obj, *options)
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[:WHITE]}#{item[2]}#{ANSI[:RESET]}\n"
end
data.size
end
class Object
def local_methods
(methods - Object.instance_methods).sort
end
def to_pboard(pboard=:general)
%x[printf %s "#{self.to_s}" | pbcopy -pboard #{pboard.to_s}]
paste pboard
end
alias :to_pb :to_pboard
end
puts "****************************************************************************"
puts "* All systems are go wirble/hirb/pasteboaRb/auto-completion/awesome_print. *"
puts "* You can discover what methods can be called on an object by Double-TAB. *"
puts "* You have some useful methods: *"
puts "* sql(query), show(class.name), obj.local_methods, obj.to_pb, ap(obj) *"
puts "* pm(obj, *options) *"
puts "* pm object, :more - shows all methods including base Object methods *"
puts "* pm object, :more, /to/ - shows all methods filtered by regexp *"
puts "* *"
puts "* Example: *"
puts "* Annotate column names of an AR model. *"
puts "* >> show Role *"
puts "* *"
puts "* Print role methods and copy them into Mac OS X’s Pasteboard. *"
puts "* >> ap Role.first.local_methods.to_pb *"
puts "* *"
puts "* Print all of the methods for the object filtered by regexp. *"
puts "* >> ap pm Role.first, /user/ *"
puts "* *"
puts "* Import table() and view(). *"
puts "* >> extend Hirb::Console *"
puts "* >> urls = Url.all :limit=>2, :order=>'id DESC'; table urls *"
puts "* >> table urls, :fields=>[:id, :name, :description] *"
puts "* *"
puts "* You can also define convenient methods in ~/.irbrc file. *"
puts "****************************************************************************"