トップ «前の日記(2008-12-08) 最新 次の日記(2008-12-12)» 編集

Route 477



2008-12-11

[biwascheme] リポジトリをgithubに移行しました

BiwaSchemeはずっとプライベートなsvnリポジトリを使ってたんですが(修論のtexソースとか全部突っ込んでた)、githubに移行しました。

これで最新版の公開・取得がずっと楽になると思います。

あとid:mokeheheさんから「(map char->integer (string->list "abc"))の挙動がおかしい」という報告を いただきまして、string->listのバグをひとつ修正しました。ありがとうございました。

[ruby][rails] autospec + Growl環境を作るのに苦労した

「ZenTest」と「RSpec on Rails」をインストールすると ./script/autospec というコマンドが使えるようになって、ファイルを保存するそばから rspecが再実行される幸せなテスト環境ができあがる。 が、今度はテスト結果を見るためにscreenのウィンドウを切り替えるのも面倒になってくる。Growlを使ってなんとかならないだろうか。

たぶん普通の人は以下のサイトの手順を上から順に実行すればとりあえずGrowlは動くはず(後述する.autotestのハンドラだけはRSpec用に直さないといけないが)。

が、僕の環境ではそもそもgrowlnotify自体が動かなかったので、Meowを使ってgrowlnotifyコマンドを再実装するなどした。

その上で、.autotestに以下のように書く。

module Autotest::Growl
  def self.growl title, msg, img="~/.autotest_icons/rails_ok.png", pri=0, sticky=""
    msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
    x = "rb_growlnotify -n autotest -H localhost --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}"
    puts x
    system x
  end
 
  Autotest.add_hook :ran_command do |at|
    output = at.results.last.slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?/)
    if output
      if $~[2].to_i > 0
        growl "Tests Failed", "#{output}", "~/.autotest_icons/rails_fail.png", 2 #, "-s"
      else
        growl "Tests Passed", "#{output}", "~/.autotest_icons/rails_ok.png", -2
      end
    else
      growl "Tests Failed", "errors", "~/.autotest_icons/rails_fail.png", 2, "-s"
    end
  end
end

上記サイトからの変更点は以下。

  • growlnotifyをrb_growlnotifyに変更 (たぶんこれは僕の環境以外では不要)
  • output = 〜 の行をRSpec向けに変更 (RSpecを使うなら必要)
  • if $~[2] 〜 の行をRSpec向けに変更 (RSpecを使うなら必要)
  • スティッキーオプション(-s)を外した (これは単純な好み。赤いnotifyがずっと画面に居座っているのは精神衛生に悪い)

結論。Rails + RSpec + autotestな環境を作るのはとても簡単だが、そこにさらにGrowlを組み合わせるのは多少めんどい。ZenTestのautotest/growl.rbはなんかおかしいし、growlnotifyもLeopardではなんかおかしい。でもまあ不可能ではないし、一回やってしまえばあとは非常に快適になる。