Convierta Ruby Hash en YAML
(2)
Necesito convertir un hash como el proporcionado a continuación en YAML legible. Parece que puedo alimentar a YAML::load
una cadena, pero creo que necesito convertirlo primero en algo como esto:
hostname1.test.com:
public: 51
private: 10
{"hostname1.test.com"=>
{"public"=>"51", "private"=>"10"},
"hostname2.test.com"=>
{"public"=>"192", "private"=>"12"}
}
Sin embargo, no estoy seguro de cómo hacer esa conversión en esa cadena de manera efectiva.
Revisé la documentación HASH y no pude encontrar nada para to_yaml
. Lo encontré buscando to_yaml
que está disponible cuando require yaml
. También traté de usar el método de collect
Enumerable, pero me confundí cuando tuve que repetir el valor (otro hash).
Estoy tratando de usar " Convertir hash a cadena en Ruby " como referencia. Mi idea era alimentar eso en YAML::load
y eso generaría el YAML que quería.
Así es como lo haría:
require ''yaml''
HASH_OF_HASHES = {
"hostname1.test.com"=> {"public"=>"51", "private"=>"10"},
"hostname2.test.com"=> {"public"=>"192", "private"=>"12"}
}
ARRAY_OF_HASHES = [
{"hostname1.test.com"=> {"public"=>"51", "private"=>"10"}},
{"hostname2.test.com"=> {"public"=>"192", "private"=>"12"}}
]
puts HASH_OF_HASHES.to_yaml
puts
puts ARRAY_OF_HASHES.to_yaml
Qué salidas:
---
hostname1.test.com:
public: ''51''
private: ''10''
hostname2.test.com:
public: ''192''
private: ''12''
---
- hostname1.test.com:
public: ''51''
private: ''10''
- hostname2.test.com:
public: ''192''
private: ''12''
La clase Object tiene un método to_yaml. Lo usé y generó el archivo YAML correctamente.
No, no es así.
Esto es de una sesión IRB recién abierta:
Object.instance_methods.grep(/to_yaml/)
=> []
require ''yaml''
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
Puede usar el método to_yaml
en un hash para esto, creo, después de que require yaml