From: Brian Candler Date: 2004-10-06T06:56:24+09:00 Subject: Re: Use ri from irb ? On Wed, Oct 06, 2004 at 05:41:53AM +0900, Mark Hubbart wrote: > > Add the following to your .irbrc file: > > > > def ri(*names) > > system(%{ri #{names.map {|name| name.to_s}.join(" ")}}) > > end > > Is it just me, or does that look a bit kludgy? ri itself is a ruby > script, and a ruby lib. It seems to me that there should be a clean > way of including the ri documentation in every object's methods... ie: > > irb> require 'irb/ri' > ==> true > irb> Kernel.docs > [... paged documentation output ...] > ==> Kernel > irb> Kernel.docs(:puts) > [...] > > ... and so on. This should be able to be one programatically, rather > than spawning an ri process. Well, look at the source of /usr/local/bin/ri and you get only three lines: require 'rdoc/ri/ri_driver' ri = RiDriver.new ri.process_args It's a shame that that process_args doesn't take an (optional) array parameter; it forces you to use ARGV. But you can frig it: $ cat .irbrc require 'rdoc/ri/ri_driver' def ri(*names) oargv = Object.const_get(:ARGV) Object.const_set(:ARGV, names) RiDriver.new.process_args Object.const_set(:ARGV, oargv) end $ irb irb(main):001:0> ri 'Enumerable' Regards, Brian.