Kagemusha 0.0.6をリリースしました

メソッドのすげ替えを行うRuby用ライブラリであるKagemushaの0.0.6をリリースしました。

Kagemusha::Compositeというクラスを追加して、複数のKagemusha#swapを1回の呼び出しで行えるようになりました。
また、private/protectedなインスタンスメソッドの復元に失敗する不具合を修正しました。

Kagemusha::Compositeの利用例

下記は、Time.nowとDate.todayの置き換えを行う例です。
以前はtimemushaとdatemushaのそれぞれでswapが必要でしたが、mushaに対するswapの1回で済んでいます。

require "rubygems"
require "kagemusha"
require "date"

timemusha = Kagemusha.new(Time).defs(:now) { :now }
datemusha = Kagemusha.new(Date).defs(:today) { :today }
musha = timemusha + datemusha

musha.swap {
  p Time.now #=> :now
  p Date.today #=> :today
}

もちろん、2つのKagemushaオブジェクトだけではなく、3つ、4つなど、任意の数のKagemushaオブジェクトを合成することができます。

簡易リファレンス

今回追加したメソッドは下記の通りです。

Kagemusha#+(mock)
自身(self)とモックオブジェクト(mock)を合成して、Kagemusha::Compositeオブジェクトを生成します。モックオブジェクトはKagemushaオブジェクト、またはKagemusha::Compositeオブジェクトを指定してください。
Kagemusha::Composite.new(*mocks)
0個以上のモックオブジェクトを含むKagemusha::Compositeオブジェクトを生成します。
Kagemusha::Composite#size
Kagemusha::Compositeオブジェクトに含まれるモックオブジェクトの数を返します。
Kagemusha::Composite#<<(mock)
Kagemusha::Compositeオブジェクトにモックオブジェクトを破壊的に追加します。また、selfを返します。
Kagemusha::Composite#+(mock)
Kagemusha::Compositeオブジェクトにモックオブジェクトを追加した新しいオブジェクトを返します。非破壊的です。
Kagemusha::Composite#swap { ... }
Kagemusha::Compositeオブジェクトに含まれるすべてのモックオブジェクトにてswapし、ブロックのコードを実行します。