yml usos usar lib formato crear configuracion como caracteristicas archivos archivo ruby yaml

ruby - usos - yaml caracteristicas



¿Cómo analizo un archivo YAML? (2)

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á en some.yml , entonces esto:

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

me da

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

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 parece que no funciona 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


Tuve el mismo problema, pero también quería obtener el contenido del archivo (después de la portada de YAML).

Esta es la mejor solución que he encontrado:

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

Fuente y discusión: https://practicingruby.com/articles/shared/zmkztdzucsgv