Convertir Ruby Hash en YAML

J'ai besoin de convertir un hachage comme celui fourni ci-dessous en YAML lisible. Il semble que je puisse nourrir YAML::load une chaîne, mais je pense que je dois d'abord la convertir en quelque chose comme ceci:

hostname1.test.com:
  public: 51
  private: 10

{"hostname1.test.com"=>
   {"public"=>"51", "private"=>"10"},
 "hostname2.test.com"=>
   {"public"=>"192", "private"=>"12"}
}

Je ne suis pas sûr exactement comment faire cette conversion dans cette chaîne efficacement cependant.

J'ai regardé à travers la documentation de hachage et je n'ai rien trouvé pour to_yaml. Je l'ai trouvé en cherchant {[2] } qui devient disponible lorsque vous require yaml. J'ai aussi essayé d'utiliser la méthode Énumérable collect mais je suis devenu confus quand j'ai eu besoin d'itérer à travers la valeur (un autre hachage).

J'essaie d'utiliser " conversion de hachage en chaîne dans Ruby" comme référence. Ma pensée était alors de nourrir cela dans YAML::load et cela générerait le YAML que je voulais.

31
demandé sur Community 2013-07-10 20:52:51

2 réponses

Voici comment je le ferais:

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

Quelles sorties:

---
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 classe D'objet a une méthode to_yaml. Je l'ai utilisé et il a généré le fichier YAML correctement.

Non, ce n'est pas le cas.

Ceci provient d'une session IRB fraîchement ouverte:

Object.instance_methods.grep(/to_yaml/)
=> []
require 'yaml'
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
50
répondu the Tin Man 2013-07-10 20:38:57

Vous pouvez utiliser la méthode to_yaml sur un hachage pour cela je crois après vous require yaml

5
répondu Shail Patel 2013-07-10 22:24:59