检查数组中是否包含多个项的好方法

时间:2014-04-14 12:25:11

标签: ruby arrays

我有一个选项哈希和一个更新它的方法 - 但是选项哈希可以改变,如果确实如此,我希望我的测试失败。写这个的好方法是什么?

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  

2 个答案:

答案 0 :(得分:4)

选项可能有值,所以我会写:

unless options[:external_uid] && options[:display_name] && options[:country_code]
  raise ArgumentError, ":external_uid, :display_name and :country_code required"
end

(我已将RuntimeError替换为ArgumentError,因为这似乎与论据有关)

答案 1 :(得分:1)

如果要测试包含在哈希中的键的值超过三个,您可能会这样做:

unless ([:external_uid, :display_name,...] - options.keys).empty? \
  raise ArgumentError, ":external_uid, :display_Nam,... are required"