RubyCocoa 今週のコミット ..2014-06-14 ruby-2.x対応
だいたいこんな感じ。
- ruby-2.1上のテストの失敗をつぶす。
- Ruby StringとNSString間のエンコーディング変換(超暫定)。
- OS X 10.5以前用のコードを削除。
- APIドキュメントの更新。
- 開発用のinstall.rbやRakefileの整備。
テストの失敗は(狭義では?)RubyCocoaの機能の問題じゃなくって、1.8と2.1で動作が異なるところがだいたい原因だった。RubyCocoaではNSArrayやNSStringがRubyのArrayやStringと同じように使えるようメソッドをいっぱい生やしてる(osx/ruby/oc_attachments.rb)んだけど、そこらではまったと。
今週対処したところを挙げると、
- String#each -> #each_line
- String#index(int)=val, String#rindex(int)=val: 2.0では数(0..255でのコード指定)は受け付けない。
- String#[idx]: 1.8では指定位置の文字のコード値の整数を、2.0では文字を返す。
- String#include?(int): 1.8では数値が与えられるとそのコードの文字があるかを返す、2.0ではTypeError。
- String#[self.length]=str: 1.8ではIndexError、2.0では末尾に文字列追加。
- Range#each: 1.8では#succで終了値までまわす、2.0ではRangeの要素が:to_strを持っているときString#succで処理する。なのでmapするとStringの配列になる。
- Array#[range] = nil: 1.8では指定範囲位置の要素を削除、2.0では指定範囲位置をnilに置き換え。NSArrayはnilを保持できないのでArgumentErrorに。(これ書きながら思ったけどTypeErrorじゃね?)
といったところ。
エンコーディング変換の件はちょっと長くなるので別エントリに。
ということで`rake test`の結果がr2556時点で
までになった。だいぶ進んだ気はする。