2008年 06月 24日

IRB でのデモを楽にする

.irbrc にかく

require "rubygems"
require "irb/completion"
require "wirble"

Wirble.init
Wirble.colorize


data  = <<EOS.split(/\n/)
require "future"
class Foo
  def omoi(n)
    sleep n
    n
  end
end
f = Foo.new
f.omoi(1)
f.async.omoi(1); nil
r = f.async.omoi(5); nil
r
r = f.async.omoi(3); nil
r
omois = (1..5).map {|i|
  f.async.omoi(i).async.tap { p [:ok, i] }
}; nil
EOS

Readline.completion_proc = proc {|word|
	if word.empty?
		[ data.shift ]
	else
		IRB::InputCompletor::CompletionProc.call(word)
	end
}
Readline.completion_append_character = ""
Readline.completion_case_fold = true

こんな風にすると、行頭で [TAB] をおして [RET] をくりかえすことでシナリオを喋りながら進行でき、かつ結果がリアルタイムに表示され、必要であれば [TAB] を押さずにコードをはさめるのでライブデモに便利です。

といっても、やっぱライブデモはタイプも含めでデモな感じがするのでちょっと寂しい感じになるのは否めないのですが!