Skip to content

Instantly share code, notes, and snippets.

@j-manu
Created November 30, 2011 18:16
Show Gist options
  • Save j-manu/1410109 to your computer and use it in GitHub Desktop.
Save j-manu/1410109 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'wirble'
require 'thread'
Wirble.init
def rails?(*args)
version=args.first
v2 = ($0 == 'irb' && ENV['RAILS_ENV'])
v3 = ($0 == 'script/rails' && Rails.env)
version == 2 ? v2 : version == 3 ? v3 : v2 || v3
end
# loading rails configuration if it is running as a rails console
load File.dirname(__FILE__) + '/.railsrc' if rails?
module IRB
def self.result_format
conf[:PROMPT][conf[:PROMPT_MODE]][:RETURN]
end
def self.result_format=(str)
result_format.replace(str)
end
def self.show_results
self.result_format = "=> %s\n"
end
def self.hide_results
self.result_format = ''
end
end
def ri(original_query, regex=nil)
query = original_query.to_s
ri_driver = RDoc::RI::Driver.new(RDoc::RI::Driver.process_args([query]))
# if query is a class ri recognizes
if (class_cache = ri_driver.class_cache[query])
methods = []
class_methods = class_cache["class_methods"].map {|e| e["name"]}
instance_methods = class_cache["instance_methods"].map {|e| e["name"]}
if regex
class_methods = class_methods.grep(/#{regex}/)
instance_methods = instance_methods.grep(/#{regex}/)
end
all_methods = class_methods.each {|e| methods << {:name=>"#{query}.#{e}", :type=>:class}} +
instance_methods.each {|e| methods << {:name=>"#{query}.#{e}", :type=>:instance}}
menu(methods, :fields=>[:name, :type]) do |chosen|
system_ri(*chosen.map {|e| e[:name]})
end
else
results = ri_driver.select_methods(/#{query}/)
menu(results, :fields=>['full_name'], :ask=>false) do |chosen|
system_ri(*chosen.map {|e| e['full_name']})
end
end
end
def system_ri(*queries)
::Hirb::View.capture_and_render { RDoc::RI::Driver.run(queries) }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment