Comment parsingr un fichier YAML?

Je voudrais savoir comment parsingr un fichier YAML avec le contenu suivant:

--- javascripts: - fo_global: - lazyload-min - holla-min 

Actuellement, j’essaie de l’parsingr 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 ceci, il 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 

Peut-être que je manque quelque chose, mais pourquoi essayer d’parsingr le fichier? Pourquoi ne pas simplement charger le YAML et examiner le ou les objects qui en résultent?

Si votre exemple YAML est dans some.yml , alors ceci:

 require 'yaml' thing = YAML.load_file('some.yml') puts thing.inspect 

Donne moi

 {"javascripts"=>[{"fo_global"=>["lazyload-min", "holla-min"]}]} 

J’ai eu le même problème, mais je voulais aussi obtenir le contenu du fichier (après le problème de YAML).

C’est la meilleure solution que j’ai trouvée:

 if (md = contents.match(/^(?---\s*\n.*?\n?)^(---\s*$\n?)/m)) self.contents = md.post_match self.metadata = YAML.load(md[:metadata]) end 

Source et discussion: https://practicingruby.com/articles/shared/zmkztdzucsgv