On Tue, Nov 14, 2006 at 06:26:15PM +0900, Gabriele Marrone wrote:
> I must be missing something.
> My fastri founds much less documentation than ri.
> 
> Shell output follows:
> 
>   piastrella:~$ fastri-server -b
>   Building index.
>   Indexed:
>   * 7565 methods
>   * 1316 classes/modules
>   Needed 1.764042 seconds
[...]
>   piastrella:~$ fri find|wc -l
>          3
>   piastrella:~$ ri find|wc -l
>         53

There are a couple explanations for this. From most to least important:

(1)
FastRI's search strategy is more sophisticated than ri's and it will try
several methods successively, yielding the results as soon as there's a match
(if it's unique, you get the description, otherwise a disambiguation message).

$ fri -h
Usage: fri [options] <query>
    -s, --bind ADDR                  Bind to ADDR for incoming DRb connections.
                                     (default: 127.0.0.1)
    -O, --order ORDER                Specify lookup order.
                                     (default: eEnNpPxX)
                                     Uppercase: case-indep.
                                     e:exact n:nested p:partial (completion)
                                     x:nested and partial
                                     a:match method name anywhere
        --show-matches               Only show matching entries.
    -S, --full-text                  Perform full-text search.
[...]

The default search strategy is eEnNpPxX, which means that it will try in this
order
(a) exact matches
(b) "nested matching": Foo#bar -> ActiveBar::Foo#bar & ActiveAction::Baz::Foo#bar
(c) partial matching: Foo#bar -> Foo#bar_whatever & Foo#bartender
(d) partial + nested: Foo#bar -> ActiveFoo::Foo#bartz & A::B::Foo#bart_foo

When you do  fri find, since there's no exact match, by default fri will fall
back to "nested matching", yielding all methods named "find" under any
class/module:

$ fri find
------------------------------------------------------ Multiple choices:

     ActiveRecord::Base.find, Daemons::Monitor.find, Enumerable#find, 
     Find#find, Pathname#find, Rinda::TupleBag#find, TagModule#find

By contrast, ri will return any methods matching /find/ (e.g. both
Foo#do_find_foo and Bar#find_dsad) when it doesn't find an exact match.

fri's search strategy can be specified with the -O option. You can make it
behave more like ri with -O aA:

 $ fri -O aA find
------------------------------------------------------ Multiple choices:

     ActionController::TestProcess#find_all_tag,
     ActionController::TestProcess#find_tag,
[...]
     TestAutotest#util_find_files_to_test,
     TestSexp#test_find_and_replace_all, URI::Generic#find_proxy,
[...]
     WSDL::XMLSchema::ComplexType#find_element_by_name,
     XSD::NamedElements#find_name

 $ fri -O aA find --show-matches | wc -l
95

(2) ri doesn't handle multiple versions of a gem correctly

$ ri -T ActiveRecord::Base::find
More than one method matched your request. You can refine
your search by asking for information on one of:

     ActiveRecord::Base::find, ActiveRecord::Base::find_by_sql,
     ActiveRecord::Base::find, ActiveRecord::Base::find_by_sql,
     ActiveRecord::Base::find, ActiveRecord::Base::find_by_sql,
     ActiveRecord::Base::validate_find_options,
     ActiveRecord::Base::find, ActiveRecord::Base::find_by_sql,
     ActiveRecord::Base::validate_find_options,
     ActiveRecord::Base::find, ActiveRecord::Base::find_by_sql,
     ActiveRecord::Base::validate_find_options,
     ActiveRecord::Base::find, ActiveRecord::Base::find_by_sql,
     ActiveRecord::Base::validate_find_options

vs.

$ fri Base.find
----------------------------------------------- ActiveRecord::Base::find
     ActiveRecord::Base::find(*args)
------------------------------------------------------------------------
[...]

So there are probably many repeated entries in your  ri find|wc -l

> Could it be because Mac OS X has a broken installation of ruby by  
> default, and it's usually installed a new version in /usr/local as  
> [1] says? It's even suggested by Apple itself ([2]).
> Maybe fastri is confused about where to look.

I believe that wasn't the case (FastRI looks for RI docs in the same dirs as
ri anyway), since:

>   piastrella:~$ fastri-server -b
>   Building index.
>   Indexed:
>   * 7565 methods
>   * 1316 classes/modules

You can get the full list of instance methods known to FastRI with

 $ fri --show-matches "#"   

Here "#" matches any instance method; in order to get all singleton
(class/module) methods, you'd do
 $ fri --show-matches ::

And to get both, 

 $ fri --show-matches .

-- 
Mauricio Fernandez  -   http://eigenclass.org   -  singular Ruby