Я бы подумал о рефакторинге вашего модельного домена.Очевидно, хеш представляет собой нечто осязаемое.Почему бы не сделать это объектом?Если элемент может быть полностью представлен хешем, вы можете создать подкласс Hash.Если это более сложно, хеш может быть атрибутом.
Во-вторых, причина, по которой вы проверяете пробелы, может быть названа так, чтобы лучше отражать ваш домен.Вы не сказали нам «почему», но давайте предположим, что ваш Предмет действителен, только если у него нет пустых значений.
class MyItem < Hash
def valid?
!invalid?
end
def invalid?
values.any?{|i| i.empty?}
end
end
Дело в том, что если вы можете установить словарь, которыйимеет смысл в вашем домене, ваш код будет чище и понятнее.Использование хэша - это всего лишь средство для достижения цели, и вам лучше использовать более описательные термины, относящиеся к домену.
Используя приведенный выше пример, вы сможете:
my_item = MyItem["a" => "1", "b" => "", "c" => "2"]
my_item.valid? #=> false