full text searching for ri content
Published 2006-08-15 @ 16:16
Tagged ruby, rails, toys
UPDATE: See the latest version.
Check it out. Quick and dirty searching of ri content:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/usr/local/bin/ruby -w require 'find' require 'yaml' search = ARGV.shift puts "Searching for #{search}" puts Dir.chdir '/usr/local/share/ri/1.8/system' do Find.find('.') do |path| next unless test ?f, path yaml = File.read path if yaml =~ /#{search}/io then full_name = $1 if yaml[/full_name: (.*)/] puts "** FOUND IN: #{full_name}" data = YAML.load yaml.gsub(/ \!.*/, '') desc = data['comment'].map { |x| x.values }.flatten.join("\n").gsub(/"/, "'").gsub(/</, "<").gsub(/>/, ">").gsub(/&/, "&") puts puts desc puts end end end |
Lets you do stuff like:
% ./risearch.rb duplicate
Searching for duplicate
[...]
** FOUND IN: Array#uniq!
Removes duplicate elements from <em>self</em>. Returns <tt>nil</tt> if no changes are made (that is, no duplicates are found).
a = [ 'a', 'a', 'b', 'b', 'c' ]
a.uniq! #=> ['a', 'b', 'c']
b = [ 'a', 'b', 'c' ]
b.uniq! #=> nil
** FOUND IN: Array#|
Set Union---Returns a new array by joining this array with other_array, removing duplicates.
[ 'a', 'b', 'c' ] | [ 'c', 'd', 'a' ]
#=> [ 'a', 'b', 'c', 'd' ]
[...]