きりかノート 3冊め

おあそびプログラミング

RubyCocoa: Ruby RBObject で 1対1の関係に

Cocoa のサブクラスではない Pure Ruby なオブジェクトは、RBObject にラップされて Objective-C 側では扱われる。ただ、このラッパーオブジェクトは ruby から Cocoa 側にオブジェクトを渡すたびに生成されるため、同一の ruby オブジェクトが Objective-C では別のオブジェクト(異なる id を持ったオブジェクト)となる。このため、NSOutlineView の item として pure ruby オブジェクトを利用すると正しく動作しないなどの現象が報告されてる。

前置きが長くなったけど、これを解決するための Jonathan によるパッチが[rubycocoa-devel:195]。これをテストしてみた。ちゃんと動いているもよう。

テストコードを書く際に、OCUnit を使う方向で作業をしていたのだけど、RubyCocoa からテストケースを実行する方法がいまいちキレイに書けなかったので放棄。テストケースのバンドルパッケージを作れば、otest で簡単に実行できるようには思うのだけど。

仕方がないので、Objective-C で assert のメソッドをひとつずつ書いて、ruby から Test::Unit::TestCase#assert で検証するという、やや上長な構成にしてみた。それはそれでいまいち。