A "run time RI for ruby methods", this gem allows you to query for information about objects' methods at runtime--for example within irb or ruby-debug. It reveals everything known about the method. This includes source, ri, arity, rdoc comments (1.9 only), etc.
For me it has proved quite useful, and I wouldn't do a ruby-debug session without it--you might really like it.
Examples:
class A;
def go(a); end;
end
A.desc_method :go
#<UnboundMethod: A#go> arity: 1
ri for A#go
Nothing known about A
(end ri)
def go(a)
do nothing
end
Parameters: go(a)
File.desc_method :delete
ri for File.delete
----------------------------------------------------------- File::delete
File.delete(file_name, ...) => integer
File.unlink(file_name, ...) => integer
From Ruby 1.9.1
Deletes the named files, returning the number of names passed as
arguments. Raises an exception on any error. See also +Dir::rmdir+.
(end ri)
#<Method: File.delete> arity: -1
appears to be a c method
#parameters signature: delete( [[:rest]] )
Or (my favorite) a debug session:
(rdb:1) l=
...
74 assert(assigns['order'].order_line_items.map(:unit_price).min >= -5)
...
(rdb:1) desc_method :assert
#<Method: StoreControllerTest(Test::Unit::Assertions)#assert> arity: -2
ri for Test::Unit::Assertions#assert
------------------------------------------ Test::Unit::Assertions#assert
assert(boolean, message=nil)
From gem test-unit-2.0.1
Asserts that +boolean+ is not false or nil.
Example:
assert [1, 2].include?(5)
(end ri)
def assert(boolean, message = nil)
_wrap_assertion do
assert_block("assert should not be called with a block.") do
(not block_given?)
end
assert_block(build_message(message, "<?> is not true.", boolean)) { boolean }
end
end
Parameters: assert(boolean, message = nil)
Thus, you can look at methods' source/rdocs without having to step into them. Deftly convenient.
========= How to Install=====
$ gem install rogerdpack-desc_method
or
$ gem install rogerdpack-desc_method --source http://gems.github.com
if you don't have gems.github.com as a gem source.
Usage:
require 'desc_method'
Class.desc_method :method_name # class or instance method name
...
some_instance.desc_method :method_name
Other goodies included:
Class#desc_class method
An example:
Object.desc_class
outputs descriptive info about that class--RI, method list, etc.
Object.desc_class :verbose => true
outputs RI, method lists including inherited methods, ancestors, all constants etc.
Kernel#methods has been monkey patched to output a "separator" between its inherited and non inherited methods--i.e.
instance.methods
=> [:first, :second, :after_this_are_inherited>>>>>, :some_inherited_method, :another_inherited_method] # adds in that separator
I'll probably remove that in a future release since it turns out you can just run Kernel#methods(false) for about much.
=== Thanks ===
This gem wraps for convenience the functionality of Method#source_location, ruby2ruby, et al, and also contains some code inspiration from manvenu, SourceRef (MBARI), and Python's Method#desc. It also wouldn't be useful without irb and the ruby-debug folks. Thanks!
Comments/suggestions welcome rogerdpack on gmail or github