Безопасная загрузка хеша в Ruby - PullRequest
3 голосов
/ 18 сентября 2009

Я хочу загрузить структуру данных в скрипт Ruby, который отображает строку в тройку, которая содержит некоторую комбинацию регулярных выражений, скриптов и атомов. Файл, из которого он загружается, должен быть доступен для записи человеком.

В настоящее время я пишу файл, содержащий хэш Ruby, загружаю его как строку и вызываю eval. Т.е..

Файл данных

{ "key1" => [ /pattern/, "text", "text" ],
  "key2" => [ "text2", :nil, "text3" ],
  "key3" => [ "text4", /pattern2/, /pattern3/ ] }

Сценарий

def get_mapping
  f = File.new path
  return eval(f.read())
end

Это нормально и работает, но чувствует себя (i) как что-то вроде взлома, (ii) небезопасно. Так что мне любопытно узнать: есть ли лучший способ сделать это?

Это почти JSON, но я не думаю, что он может легко обрабатывать атомы или регулярные выражения. Формат файла может быть изменен так, чтобы он оставался приемлемым для чтения и записи человеком.

Ответы [ 2 ]

6 голосов
/ 18 сентября 2009

Вы действительно должны использовать YAML для такого рода вещей, ваш код действительно рискован.

YAML поддерживает регулярные выражения и является достаточно расширяемым.

1 голос
/ 18 сентября 2009

Hash es и Array s могут быть маршаллированными . Это может быть полезно, если вы хотите сохранить данные из вашей программы в файл. Если вы заинтересованы в предоставлении пользователю возможности предоставить данные во внешний файл, вы можете посмотреть на YAML .

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