autotestの結果をOSDで表示

開発環境はLinuxなのでgrowlはないんだけど、gnomeの通知システムにメッセージを送るnotify-sendというツールがある。 libnotify-binをインストールしておけば、

notify-send '送信したいメッセージ' -i "アイコン"

で通知を送ることができる。なお、アイコンは/usr/share/pixmaps/に置き、拡張子を除いて記述する。 (多分~/.usr/あたりにも置けると思う)

あと、Autotest:Growlというrubyのモジュールが必要なんだけど、これはZenTestに入ってると思う。 でもって~/.autotestに以下の記述をすれば、growlっぽくtest結果を表示してくれる。

module Autotest::Growl
  def self.growl(title, msg, img, pri=0, sticky="")
    msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
    system "notify-send '#{title}' '#{msg.inspect}' -i #{img}"
  end

  Autotest.add_hook :ran_command do |at|
    results = [at.results].flatten.join("\n")
    output = results.slice(/\d+\s+examples?,\s*(\d+)\s+failures?/)
    if output
      if $~[1].to_i > 0
        growl "Tests Failed", "#{output}", "rails_fail", 2, "-s"
     else
        growl "Tests Passed", "#{output}", "rails_ok", -2
      end
    else
      growl "Tests Errored", "errors", "rails_fail", 2, "-s"
    end
  end
end

メッセージはgrowl “Tests Passed”, “#{output}”, “rails_ok”, -2のとこを適当にいじれば変えられます。