autotestの結果を伺かに喋らすver.α
SSTPを使う事で,より柔軟に色んな出力を伺かでNotifyする事が出来るようになりました*1.
そこで,暫定的ではありますが,autotestの結果を伺かに喋らすスクリプトを公開します.
暇な人は,是非一度試してみてください.
.autotest
これは,#{RAILS_ROOT}/.autotestに書くスクリプトです.別に,gem/ZenTest-*/lib/autotest/の下にukagaka.rbとか作って,.autotestにrequire'autotest/ukagaka'とかでも良い.
require 'ukagaka_io' # とりあえずlocalhostに接続しておきますよ UIO = UkagakaIO.open('127.0.0.1', 9801) class Autotest::Ukagaka def self.ukagaka(msg, force = false) UIO.write(msg, force) end Autotest.add_hook :initialize do |at| ukagaka "\\h\\s[0]初期化中…\n" end Autotest.add_hook :run do |at| ukagaka "\\h開始\n" end Autotest.add_hook :ran_command do |at| results = at.results failed = results.scan(/^\s*\d+\) (?:Failure|Error):\n(.*?)\((.*?)\)/) files_to_test = at.consolidate_failures failed if files_to_test.size > 0 then ukagaka "\\h\\s[3]通らなかったテスト一覧〜\\n" failure = "" files_to_test.each do |k, v| failure += " #{k} : #{v.to_s}\\n" end failure += "\\uということで,#{files_to_test.size}個のテストで失敗." + "\\h\\s[4]残念 ." ukagaka failure else results = "\\h\\s[1]" + results results.concat("\\u\\s[11]通ったで\\h\\s[5]よかったね") ukagaka results end end Autotest.add_hook :interrupt do |at| ukagaka "\\hautotestがリセットされました" end # ところで,autotestはどうすれば普通に終了するんですかね. Autotest.add_hook :quit do |at| ukagaka "\\hautotestを終了します" end end
なお,サーフェスは黒海さんに対応させてますので,お気に入りのゴーストのサーフェスに合わせてください.
追記
http://www2.airnet.ne.jp/~sirataki/ukagaka/bottlable.htmlを見た感じでは,一応サーフェス毎に互換はあるようですね.
ukagaka_io.rb
それから,ukagaka_io.rb*2に少々の修正を加えていますので,修正部分だけ.
require 'socket' require 'kconv' require 'thread' class UkagakaIO < TCPSocket def to_sjis(str) # Macは,SJISじゃないと文字化けするんです # WindowsはUTF-8のままでも問題無し? Kconv.tosjis(str) end HEADERS = { 'Sender' => 'Ruby UkagakaIO', 'Script' => '', 'Charset' => 'Shift_JIS', # Macは,(ry } BREAK = "\r\n" def write(msg, force = false) @msg_buffer ||= '' @msg_buffer << to_sjis(msg).gsub(/\r?\n/, '\n') if force headers = HEADERS.clone.update('Script' => @msg_buffer + "\e") h = ['SEND SSTP/1.1'] # Sakura Scriptをベタ書きするために,無難に1.1 h << headers.map{|k,v| "#{k}: #{v}"} message = h.join(BREAK).concat(BREAK * 2) result = super(message) @msg_buffer = '' reconnect! result else timer end end …以下略 end
*1:see also: id:omochist:20061121:1164121012