2014-05-12 46 views
0

我減少了冗長了很多相關規範的一個小捷徑方法我寫道:如何轉換Ruby塊並將其作爲參數應用於其他塊?

def association_spec_for(kind, field) 
    it { expect(subject).to send(kind, field) } 
end 

這被這樣使用:

describe Student do 
    association_spec_for :have_many, :courses 
    association_spec_for :have_one, :transcript 
end 

現在,我想擴大方式association_spec_for工作,這樣我可以做到這一點,同時仍保留原始的用例不變:

association_spec_for(:foo, :bar) do |a| 
    a.baz(:blerp).bloop(:bleep => :blarg) 
end 

,並把它變成這樣:

it { expect(subject).to send(:foo, :bar).baz(:blerp).bloop(:bleep => :blarg) } 

             # |----------------------------------| 
             # This part came from the block 
             #  that was passed to a_s_f. 

發生這種情況的最佳方式是什麼?

回答

1
def association_spec_for(kind, field, &pr) 
    it{expect(subject).to pr ? pr.call(send(kind, field)) : send(kind, field)} 
end 
+0

如果沒有塊被傳遞,這不會失敗嗎? (該塊是可選的。)我想我可以有一個條件。 –

+1

你的問題並不清楚。 – sawa

+1

我會更新這個問題,但這就是我所說的「我想擴展它的工作方式......」。以前的用例不應該中斷。 –

相關問題