以下に示すようなハッシュを読み取り可能なYAMLに変換する必要があります。 YAML::load
文字列をフィードできるように見えますが、最初に次のようなものに変換する必要があると思います。
hostname1.test.com:
public: 51
private: 10
{"hostname1.test.com"=>
{"public"=>"51", "private"=>"10"},
"hostname2.test.com"=>
{"public"=>"192", "private"=>"12"}
}
しかし、その文字列への変換を効果的に行う方法は正確にはわかりません。
HASHのドキュメントに目を通しましたが、to_yaml
については何も見つかりませんでした。 to_yaml
を検索すると、require yaml
のときに使用可能になります。 Enumerableメソッドcollect
も使用しようとしましたが、値(別のハッシュ)を反復処理する必要があるときに混乱しました。
参照として「 Rubyでハッシュを文字列に変換する 」を使用しようとしています。私の考えはそれをYAML::load
にフィードし、それが私が望むYAMLを生成することでした。
これが私がそれをする方法です:
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
どの出力:
---
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'
Objectクラスにはto_yamlメソッドがあります。私はそれを使用し、YAMLファイルを正しく生成しました。
いいえ、そうではありません。
これは、新しく開いたIRBセッションからのものです。
Object.instance_methods.grep(/to_yaml/)
=> []
require 'yaml'
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
あなたはto_yaml
の後、これのためにハッシュでrequire yaml
メソッドを使用できます