Gostaria de saber como analisar um arquivo YAML com o seguinte conteúdo:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
Atualmente, estou tentando analisá-lo desta maneira:
@custom_asset_packages_yml = (File.exists?("#{RAILS_ROOT}/config/asset_packages.yml") ? YAML.load_file("#{RAILS_ROOT}/config/asset_packages.yml") : nil)
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global'].each{ |script|
script
}
}
end
Mas isso não parece funcionar e me dá um erro que o valor é nulo.
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Se eu tentar isso, ele coloca a string inteira (fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
Respostas:
Talvez esteja faltando alguma coisa, mas por que tentar analisar o arquivo? Por que não carregar o YAML e examinar o (s) objeto (s) resultante (s)?
Se sua amostra de YAML estiver
some.yml
, então:me dá
fonte
YAML.load
usa uma string YAML,YAML.load_file
usa um caminho de arquivo relativo.Eu tive o mesmo problema, mas também queria obter o conteúdo do arquivo (após o front-matter do YAML).
Esta é a melhor solução que encontrei:
Fonte e discussão: https://practicingruby.com/articles/tricks-for-working-with-text-and-files
fonte
Aqui está o liner que eu uso, no terminal, para testar o conteúdo dos arquivos yml:
fonte