Je voudrais savoir comment analyser un fichier YAML avec le contenu suivant:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
Actuellement, j'essaie de l'analyser de cette façon:
@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
Mais cela ne semble pas fonctionner et me donne une erreur que la valeur est nulle.
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 j'essaye, cela met la chaîne entière (fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
Réponses:
Il me manque peut-être quelque chose, mais pourquoi essayer d'analyser le fichier? Pourquoi ne pas simplement charger le YAML et examiner les objets qui en résultent?
Si votre exemple YAML est dedans
some.yml
, alors ceci:Donne moi
la source
YAML.load
prend une chaîne YAML,YAML.load_file
prend un chemin de fichier relatif.J'ai eu le même problème, mais je voulais également obtenir le contenu du fichier (après la première page de YAML).
C'est la meilleure solution que j'ai trouvée:
Source et discussion: https://practicingruby.com/articles/tricks-for-working-with-text-and-files
la source
Voici le liner que j'utilise, depuis le terminal, pour tester le contenu des fichiers yml:
la source