Me gustaría saber cómo analizar un archivo YAML con los siguientes contenidos:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
Actualmente estoy tratando de analizarlo de esta manera:
@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
Pero no parece funcionar y me da un error de que el valor es 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
Si intento esto, saca la cadena completa (fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
Respuestas:
Tal vez me falta algo, pero ¿por qué intentar analizar el archivo? ¿Por qué no simplemente cargar el YAML y examinar los objetos que resultan?
Si su muestra YAML está dentro
some.yml
, entonces esto:me da
fuente
YAML.load
toma una cadena YAML,YAML.load_file
toma una ruta de archivo relativa.Tuve el mismo problema pero también quería obtener el contenido del archivo (después de la presentación de YAML).
Esta es la mejor solución que he encontrado:
Fuente y discusión: https://practicingruby.com/articles/tricks-for-working-with-text-and-files
fuente
Aquí está el único trazador de líneas que uso, desde la terminal, para probar el contenido de los archivos yml:
fuente