ノード表現を取得するには、ファイルを解析する必要があります。
yml = YAML.parse( open('c:\temp\foo.yml'))
yml
変数には構造全体が含まれます。例: 次のように入力すると、実際のファイル コンテンツ全体が出力されます。
pp yml
結果を調べた後、安全なシリアライザーを書くことができました。というファイルを追加します。config/initializers/yaml.rb
module YAML
def YAML.safe_load(file_name)
YAML::safe_load_node(YAML::parse(IO.read(file_name)))
end
def YAML.safe_load_node(input)
case input.kind
when :map
{}.tap do |h|
input.value.each do |key, node|
k,v = key.value, YAML::safe_load_node(node)
if (v.is_a?(Hash) and h[k].is_a?(Hash))
h[k] = h[k].merge(v)
elsif (v.is_a?(Array) and h[k].is_a?(Array))
h[k] = h[k] + v
else
h[k] = v
end
end
end
when :seq
input.value.map{|node| YAML::safe_load_node(node)}
when :scalar
input.value
end
end
end
Railsコンソールで:
>> y YAML::safe_load('c:/temp/test.yml')
---
en:
christmas:
ham: Bring ham
thanksgiving:
turkey: Turkey
stuffing: Stuffing
beer: lots of beer