RSpec で it の引数とブロックを DRY にする
方法が出来そうだと思ったんだけど、Ruby の Proc に環境をバインドする方法が分からなくて止めた (´・ω・`)
よかったら誰かお願いします。
it のブロック内に 結論、条件、条件、(実行)の順でコードを並べれば行けると思ったのだけど。
it do to_be { @foo.should be_true } cond { @foo = true } run end
def to_be(&action) @procstack = [] @procstack << action end def cond(&cond) @procstack << cond end def run while (proc = @procstack.pop) proc.call end end end
Binding とかあったっけ・・Proc や lambda 周りを復習しないとやばげ。
暫定措置で it "description" ブロック の description を書かない戦術に出てみよう。
これが理想か?
it { ::gets { @foo.should be_true } ::when { @foo = true } ::when { @foo = true } ::run # ホントは書きたくない }