きりかノート 3冊め

おあそびプログラミング

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時点で

までになった。だいぶ進んだ気はする。