Мне нужно создать строку подписи для переменной в Ruby, где переменная может быть числом, строкой, хешем или массивом. Хеш-значения и элементы массива также могут быть любыми из этих типов.
Эта строка будет использоваться для сравнения значений в базе данных (Mongo, в данном случае).
Моя первая мысль заключалась в том, чтобы создать хеш MD5 кодированного значения JSON, например: (body - это переменная, упомянутая выше)
def createsig(body)
Digest::MD5.hexdigest(JSON.generate(body))
end
Это почти работает, но JSON.generate не кодирует ключи хэша в том же порядке каждый раз, поэтому createsig({:a=>'a',:b=>'b'})
не всегда равно createsig({:b=>'b',:a=>'a'})
.
Каков наилучший способ создания строки подписи для этой потребности?
Примечание. Для деталей, ориентированных среди нас, я знаю, что вы не можете JSON.generate()
число или строку. В этих случаях я просто позвонил бы MD5.hexdigest()
напрямую.