2010-08-28 2 views
1

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

response[:payment_status] == 'Completed' && response[:receiver_email] == '[email protected]' && response[:foo] == 'Bar' 

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

P.S: Должен упомянуть, что я хочу вернуть простое истинное/ложное.

+0

Что вы имеете в виду хэша? Я не вижу. – bitmask

+0

Ответный хэш. – resetability

ответ

1

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

expected = {'payment_status' => 'Completed', 'receiver_email' => '[email protected]' ... } 
valid = expected.keys.all? {|key| response[key] == expected[key]} 
0

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

https://github.com/JamesBrooks/hash_validator

0

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

response.slice(:payment_status, :receiver_email, :foo) == { :payment_status => 'Completed', :receiver_email => '[email protected]', :foo => 'Bar'} 

В моем случае мне также нужно сравнить неравенство. Это можно сделать, позвонив по телефону BasicObject#instance_eval.

Тогда пишет:

response.instance_eval{ |hash| hash[:payment_status] != 'Pending' && hash[:receiver_email] == '[email protected]' && hash[:boolean_result] } 
Смежные вопросы