MoniterMixinのちょっとしたバグ
久方振りにnadokaを使おうと思ったら,1.9.1で文字列の扱いが変わったおかげで,そのままではまったく動かないようになっていた.エラーが一個出るたびにencodeか,force_encodingで置き換えていく簡単な作業です・・・どう考えても修正箇所多すぎで死亡フラグだね.
それはそれでおいておくとして,作業中,MoniterMixinにちょっとしたバグがあることに気付いた.ArrayやHashに対するextendは問題ないのにTCPSocketにextendすると戻ってこない.ちょちょいと調べてみると,面白いコードを発見した.
def self.extend_object(obj) super(obj) obj.send(:mon_initialize) end
sendってなんだよ.Object.send呼び出しているつもりなんだろうけど,TCPSocket.sendを呼んでブロックしちゃってるぽい?
Object.sendの項を見てみると,オーバーライドされている可能性があるからライブラリはsendじゃなくて__send__使えっていう注意書きがあった.書き換えると何事もなく戻ってくるように.