Project

ri_for

0.01
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
ruby method describer to make it possible to inspect methods [rdoc, signature, etc.] at runtime, for example while debugging or in irb.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0.20.1

Runtime

 Project Readme

The ri_for gem allows "runtime documentation lookup", it shows a method's source code/comments, ri (if available), arity, parameters, etc. all at runtime (for example within an irb session).

Don't know what a method does? Look it up!

It has proven quite useful, and I wouldn't do a ruby-debug session without it--you might like it.

Examples

>> File.ri_for :delete

sig: File.delete arity -1
appears to be a c method
Searching ri for
sig: File.delete arity -1
...
----------------------------------------------------------- File::delete
     File.delete(file_name, ...)  => integer
     File.unlink(file_name, ...)  => integer

------------------------------------------------------------------------
     Deletes the named files, returning the number of names passed as
     arguments. Raises an exception on any error. See also +Dir::rmdir+.

(end ri)
=> "sig: File.delete arity -1"

(or alternatively use >> File.method(:delete).ri_for)

or, given this dynamically generated class, it can still show runtime parameter information:

>> class A; 
    def go(a); end; 
   end

>> A.new.ri_for :go

sig: A#go arity 1
def go(a)
  # do nothing
end
Parameters: go(a)
Searching ri for
sig: A#go arity 1
...
Nothing known about A
(end ri)
=> "Parameters: go(a)"

Or (my favorite) use it within debug session:

 74       assert(true == false)
 
(rdb:1) ri_for :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 run the methods and step into them. Deftly convenient.

Installation

$ gem install ri_for

Usage

>> require 'ri_for'
>> ClassName.ri_for :method_name # class or instance method name

>> some_instance.ri_for :method_name

Other goodies included:

Object#my_methods

Stolen from a website somewhere. An example:

>> class A; def go; end; end
>> A.new.my_methods
=> {:first, :second, :third]}

Object#methods2

Like #methods, but inserts a marker after my_methods are shown:

>> A.new.methods2
=> ["go", :"inherited methods after this point >>", "to_yaml_style", "inspect", "methods_old", "clone", "public_methods", "display", "instance_variable_defined?", "equal?", "freeze", "to_yaml_properties", "methods"...]

Attributions

This gem wraps for convenience the functionality of Method#source_location, ruby2ruby, et al, and was inspired by a snippet from manvenu, SourceRef (MBARI), and Python's Method#desc. It also wouldn't be useful without irb and the ruby-debug folks. Thanks!

Related

ori: Just lists ri, not method bodies and parameters, like mine does. Also irb has a "help" command for obtaining (just lists ri) but it's pretty obscure nobody knows about it.

>> help "Array"
>> help "Array#[]" (just displays ri)

There are quite a few "#methods" helper utilties out there, too.
irbtools also lists a lot of other irb helpers.

method_source: Similar, I think it's embedded in pry as well.

Feedback

Comments/suggestions welcome rogerdpack on gmail or @rdp on github