]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - data/rbot/plugins/ri.rb
5bde894c71d6ec4eb98b6f389f495533d3a852f9
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / ri.rb
1 #-- vim:sw=2:et
2 #++
3 #
4 # :title: 'ri' -- ruby documentation plugin
5 #
6 # Author:  Michael Brailsford  <brailsmt@yahoo.com> aka brailsmt
7 # Author:: dmitry kim <dmitry dot kim at gmail dot com>
8 # Copyright:: (C) 2007, dmitry kim
9 # Copyright:: (C) Michael Brailsford
10 # License:: MIT
11 #
12
13 class RiPlugin < Plugin
14
15   RI_COMMAND = %w{ri -f simple -T}
16
17   BotConfig.register BotConfigIntegerValue.new('ri.max_length',
18     :default => 512,
19     :desc => "Maximum length of ri entry (in bytes) which is ok to be sent to channels")
20
21   def help(plugin, topic="")
22     "ri <something> => returns ruby documentation for <something>"
23   end
24
25   def ri(m, params)
26     args = RI_COMMAND.dup
27     if a = params[:something]
28       if a == '-c'
29         args.push(a)
30       else
31         args.push('--')
32         args.push(a)
33       end
34     end
35     begin
36       ret = Utils.safe_exec(*args)
37     rescue
38       ret = "failed to execute ri"
39     end
40     ret = ret.gsub(/\t/, "  ").split(/\n/).join(" ").gsub(/\s\s+/, '  ')
41     
42     if ret.length > @bot.config['ri.max_length'] && !m.private?
43       ret = 'entry is too long to send to the channel, use /msg to ask me about it'
44     end
45     m.reply(ret)
46     return
47   end
48 end
49
50 plugin = RiPlugin.new
51 plugin.map 'ri :something', :requirements => {:something => /^((-c)|(\w\S+))$/}