to_yaml ошибка кодирования символьных клавиш с неуклюжими символами - PullRequest
0 голосов
/ 12 апреля 2020

Я сталкиваюсь с ошибкой в ​​to_yaml, но вижу, что она исправлена ​​в более поздних версиях ruby (или rails?). Мне интересно, как лучше обойти это.

Возьмите символический ключ, содержащий неуклюжий символ (любой символ Юникода, или я только что заметил, что символ # также делает это). to_yaml делает некоторое неправильное экранирование таким образом, что становится очевидным, когда я делаю обратное YAML.load для него:

2.3.8 :001 > hash = {:"my key with an awkward # char"=>"my value"}
 => {:"my key with an awkward # char"=>"my value"} 
2.3.8 :002 > hash.to_yaml
 => "--- \n\":\\\"my key with an awkward # char\\\"\": my value\n" 
2.3.8 :003 > YAML.load(hash.to_yaml)
 => {":\"my key with an awkward # char\""=>"my value"} 

Это в нашем проекте Rails 3.2 на ruby 2.3.8. Я также вижу проблему на рельсах 4.0.13. Но с более поздним проектом Rails 5.2.4 ruby 2.6.3:

2.6.3 :007 > hash = {:"my key with an awkward # char"=>"my value"}
 => {:"my key with an awkward # char"=>"my value"} 
2.6.3 :008 > hash.to_yaml
 => "---\n! ':my key with an awkward # char': my value\n" 
2.6.3 :009 > YAML.load(hash.to_yaml)
 => {:"my key with an awkward # char"=>"my value"} 

Он возвращается к исходному ха sh.

Моя проблема в том, что ActiveRecord Сериализация делает это в нашей базе данных, но я заметил, что основа c to_yaml показывает проблему.

Полагаю, мне просто нужно знать, какие символы вызывают проблему, и как я могу это сделать. обнаружить их, чтобы запретить их?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...