Проверить хеш-ключи / значения - PullRequest
1 голос
/ 28 августа 2010

Я пытаюсь проверить значения определенных ключей в хэше:

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

Хотя вышеуказанный подход работает, я вполне уверен, что есть более элегантное решение. Я не хотел бы иметь действительно длинную строку, если я добавлю дополнительные ключи / значения, которые я хочу проверить.

P.S .: Я должен упомянуть, что хочу вернуть простое значение true / false.

Ответы [ 3 ]

1 голос
/ 18 апреля 2013

Это может помочь вам при проверке хешей с использованием другого хеша для определения ожидаемой структуры / типов (также работает с вложенными хешами):

https://github.com/JamesBrooks/hash_validator

1 голос
/ 28 августа 2010

Вы можете создать хэш ключа / значений ожидаемого значения и затем отобразить входные значения хеш-функции:

expected = {'payment_status' => 'Completed', 'receiver_email' => 'test@example.com' ... }
valid = expected.keys.all? {|key| response[key] == expected[key]}
0 голосов
/ 15 октября 2014

Если вы хотите проверить равенство для каждого элемента, есть элегантное решение:

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] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...