2010-01-28 9 views
6

De acuerdo con la documentación de YAML, es posible pasar un hash of options al método .to_yaml.¿Cómo obtener las opciones de formato para el método to_yaml que funciona en ruby ​​1.9.1?

Actualmente, cuando paso las opciones sugeridas por la documentación, no funciona, se ignora el hash.

irb(main):001:0> require 'yaml' 
=> true 
irb(main):002:0> user = { "1" => { "name" => "john", "age" => 44 } } 
user.to_yaml 
=> "--- \n\"1\": \n name: john\n age: 44\n" 

Ahora, pasando algunas opciones:

irb(main):014:0> user.to_yaml(:Indent => 4, :UseHeader => true, :UseVersion => true) 
=> "--- \n\"1\": \n name: john\n age: 44\n" 
irb(main):015:0> user.to_yaml(:Separator => "\n") 
=> "--- \n\"1\": \n name: john\n age: 44\n" 
irb(main):016:0> user.to_yaml(:separator => "\n") 
=> "--- \n\"1\": \n name: john\n age: 44\n" 
irb(main):017:0> RUBY_VERSION 
=> "1.9.1" 

Como se puede ver, que pasa las opciones no funcionan. Sólo los valores por defecto:

YAML::DEFAULTS 
=> {:Indent=>2, :UseHeader=>false, :UseVersion=>false, :Version=>"1.0", :SortKeys=>false, :AnchorFormat=>"id%03d", :ExplicitTypes=>false, :WidthType=>"absolute", :BestWidth=>80, :UseBlock=>false, :UseFold=>false, :Encoding=>:None} 

¿Es esto un error conocido? o ¿Actualmente está funcionando para cualquiera que use Ruby 1.9.1?

+0

Obtengo el mismo comportamiento que está viendo. Parece que esto se ha preguntado antes sin resolución: http://stackoverflow.com/questions/1054730/is-it-possible-to-specify-formatting-options-for-toyaml-in-ruby –

+0

Sí, en eso caso de que estaban utilizando 1.8.7, me preguntaba si funciona para 1.9.1, parece ser un problema sin una respuesta concisa. – jpemberthy

+0

Me encantaría saber la respuesta a esta. Hace tiempo que renuncié y escribí mi propia función "ordenar el yaml" (para 1.8.7). –

Respuesta

2

He cavado relativamente profundo en la fuente C para esto en un pasado no tan lejano. Estoy publicando solo para validar lo que ya se dijo en los comentarios.

Básicamente, no puedo hacerlo. Las opciones de Syck se pierden en algún punto del proceso, antes de llegar al escritor de YAML.

Lo mejor que puede tener es to_yaml_style. A veces.

Esto es lo mismo para 1.8 y 1.9.

+0

Ok, bueno, terminé escribiendo un pequeño módulo para formatearlo, no tan óptimo como debería ser usando el método 'to_yaml' ... pero al menos funciona. Gracias. – jpemberthy

Cuestiones relacionadas