我正在尝试验证散列中某些键的值:
response[:payment_status] == 'Completed' && response[:receiver_email] == 'test@example.com' && response[:foo] == 'Bar'
虽然上述方法有效但我确信有更优雅的解决方案。如果我添加我想要验证的额外键/值,我会讨厌有一条很长的线。
P.S:我应该提一下我想要一个简单的真/假返回。
答案 0 :(得分:1)
您可以创建expect键/值的哈希值,然后映射输入哈希值:
expected = {'payment_status' => 'Completed', 'receiver_email' => 'test@example.com' ... }
valid = expected.keys.all? {|key| response[key] == expected[key]}
答案 1 :(得分:1)
这可能会帮助您使用另一个哈希来验证哈希来定义您期望的结构/类型(也适用于嵌套哈希):
答案 2 :(得分:0)
如果你想测试每个元素的相等性,那就有一个优雅的解决方案:
response.slice(:payment_status, :receiver_email, :foo) == { :payment_status => 'Completed', :receiver_email => 'test@example.com', :foo => 'Bar'}
就我而言,我也需要比较不平等。可以通过调用BasicObject#instance_eval
来完成。
然后写道:
response.instance_eval{ |hash| hash[:payment_status] != 'Pending' && hash[:receiver_email] == 'test@example.com' && hash[:boolean_result] }