# \[ANN\] Initial release of the desc\_method gem--a "run time RI for methods"

**URL:** <https://www.ruby-forum.com/t/ann-initial-release-of-the-desc-method-gem-a-run-time-ri-for-methods/173956>\
**Category:** Ruby\
**Created:** [August 18, 2009, 6:07pm UTC](https://www.ruby-forum.com/t/ann-initial-release-of-the-desc-method-gem-a-run-time-ri-for-methods/173956 "2009-08-18T18:07:40Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 18, 2009, 6:07pm UTC](https://www.ruby-forum.com/t/ann-initial-release-of-the-desc-method-gem-a-run-time-ri-for-methods/173956/1 "2009-08-18T18:07:40Z")

</div>

I am pleased to announce the release of desc\_method.

A “run time RI for methods”, this gem allows you to query for  
information about objects’ methods within irb or a ruby-debug prompt.  
It reveals everything known about the method. This includes source,  
ri, arity, rdoc comments (on 1.9), etc. where available

For me it has proved quite useful, and I wouldn’t do a ruby-debug  
session without it–try 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) using it in 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)  
(rdb:1)

========= How to Install=====  
$ gem install rogerdpack-desc\_method  
or  
$ gem install rogerdpack-desc\_method --source [http://gems.github.com](http://gems.github.com)  
if you don’t have [gems.github.com](http://gems.github.com) as a gem source.

Usage:

> > require ‘desc\_method’  
> > Class.desc\_method :method\_name # class or instance method name  
> > …  
> > some\_object.desc\_method :method\_name  
> > …

Other goodies also included:  
Class#desc\_class

Examples:

> > 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  
This 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

Though I’ll probably remove that in a future release since it turns  
out you can just run Kernel#methods(false) for about as much  
usefulness.

=== 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

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 18, 2009, 6:21pm UTC](https://www.ruby-forum.com/t/ann-initial-release-of-the-desc-method-gem-a-run-time-ri-for-methods/173956/2 "2009-08-18T18:21:44Z")

</div>

hm, is that just me, or why am i getting this strange error?

ERROR: Error installing rogerdpack-desc\_method:  
ruby2ruby requires ruby\_parser (~\> 2.0, runtime)

never had that before…  
Other stuff seems to install just fine.

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 19, 2009, 12:10am UTC](https://www.ruby-forum.com/t/ann-initial-release-of-the-desc-method-gem-a-run-time-ri-for-methods/173956/3 "2009-08-19T00:10:40Z")

</div>

On Aug 18, 1:20 pm, Fabian S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> [Note: parts of this message were removed to make it a legal post.]
> 
> hm, is that just me, or why am i getting this strange error?
> 
> ERROR: Error installing rogerdpack-desc\_method:  
> ruby2ruby requires ruby\_parser (~\> 2.0, runtime)
> 
> never had that before…

Installing gems from GitHub that depends on gems from RubyForge (ala:  
cross source dependencies) hasn’t been implemented in RubyGems

Patches are welcome 😉

Cheers,

---

<div class="post-metadata">

**Author:** ![rogerdpack](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/45deac/32.png) [@rogerdpack](https://www.ruby-forum.com/u/rogerdpack)\
**Post date:** [August 18, 2009, 6:58pm UTC](https://www.ruby-forum.com/t/ann-initial-release-of-the-desc-method-gem-a-run-time-ri-for-methods/173956/4 "2009-08-18T18:58:37Z")

</div>

> ERROR: Error installing rogerdpack-desc\_method:  
> ruby2ruby requires ruby\_parser (~\> 2.0, runtime)
> 
> never had that before…  
> Other stuff seems to install just fine.

Yes I get that too, for some reason. Very weird.  
The work-around for now is

$ gem install ruby\_parser  
$ gem install ruby2ruby -v1.1.9  
$ gem install rogerdpack-desc\_method

until I can figure out what’s going on.  
Thanks!  
-r
