Caricamento sicuro di un hash in Ruby
Domanda
Voglio caricare una struttura di dati in uno script Ruby che associa una stringa a una tripla che contiene una combinazione di espressioni regolari, script e atomi. Il file che carica deve essere scrivibile dall'uomo.
Attualmente sto scrivendo il file per contenere un hash Ruby, caricandolo come stringa e chiamando eval. Vale a dire.
File di dati
{ "key1" => [ /pattern/, "text", "text" ],
"key2" => [ "text2", :nil, "text3" ],
"key3" => [ "text4", /pattern2/, /pattern3/ ] }
Script
def get_mapping
f = File.new path
return eval(f.read())
end
Va ??bene e funziona, ma sembra (i) come un po 'un hack, (ii) non sicuro. Quindi sono curioso di sapere: esiste un modo migliore per farlo?
È quasi JSON ma non penso che possa gestire facilmente atomi o espressioni regolari. Il formato del file può essere cambiato come aspetto in quanto rimane ragionevolmente leggibile / scrivibile dall'uomo.
Soluzione
Dovresti davvero usare YAML per questo tipo di cose, il tuo codice è davvero rischioso.
YAML supporta regexps ed è abbastanza estensibile.