验证散列键/值

时间:2010-08-28 18:16:06

标签: ruby

我正在尝试验证散列中某些键的值:

response[:payment_status] == 'Completed' && response[:receiver_email] == 'test@example.com' && response[:foo] == 'Bar'

虽然上述方法有效但我确信有更优雅的解决方案。如果我添加我想要验证的额外键/值,我会讨厌有一条很长的线。

P.S:我应该提一下我想要一个简单的真/假返回。

3 个答案:

答案 0 :(得分:1)

您可以创建expect键/值的哈希值,然后映射输入哈希值:

expected = {'payment_status' => 'Completed', 'receiver_email' => 'test@example.com' ... }
valid = expected.keys.all? {|key| response[key] == expected[key]}

答案 1 :(得分:1)

这可能会帮助您使用另一个哈希来验证哈希来定义您期望的结构/类型(也适用于嵌套哈希):

https://github.com/JamesBrooks/hash_validator

答案 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] }