我有一個選項哈希和一個方法來更新它 - 但是哈希選項可能會改變,如果是這樣,我希望我的測試失敗。寫這個的好方法是什麼?檢查數組中是否包含多個項目的好方法
raise RuntimeError, msg unless options.keys.include?(
:external_uid,
:display_name,
:country_code
)
如果options.keys
不包括這三個項目,則應該引發錯誤。
的解決方案,我幾乎使用(感謝bjhaid):
def ensure_correct_options!(options)
msg = "Only 'external_uid', 'display_name' and 'country_code' can be "
msg += "updated. Given attributes: #{options.keys.inspect}"
raise RuntimeError, msg unless options.keys == [
:external_uid,
:display_name,
:country_code
]
end
也許[這](http://stackoverflow.com/questions/8026300/ check-for-multiple-items-in-array-using-include-ruby-beginner)答案可能會有所幫助。 – Magnuss
@Magnuss,歡呼聲中,我看到了,但我只想要精確匹配...我最終用一個更簡單/面對誘導解決方案。乾杯 – dax
@dax,如果數組中的元素以不同的方式排序,你的解決方案會失敗,請看[Hash#fetch](http://www.ruby-doc.org/core-2.1.1/) Hash.html#method-i-fetch)具有接近你想要的行爲,但在單鍵 – bjhaid