2010-01-28 5 views
6

Gemäß der YAML-Dokumentation ist es möglich, eine an die .to_yaml Methode zu übergeben.Wie erhalten Sie die Formatierungsoptionen für die Methode to_yaml, die mit Ruby 1.9.1 funktioniert?

Derzeit, wenn ich die Optionen wie in der Dokumentation vorgeschlagen übergeben, es funktioniert nicht, wird der Hash ignoriert.

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" 

Nun, vorbei an ein paar Optionen:

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" 

Wie Sie sehen können, vorbei die Optionen nicht funktionieren. Nur die Standardwerte:

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} 

Ist dies ein bekannter Fehler? oder Es funktioniert derzeit für jeden, der Ruby 1.9.1 verwendet?

+0

Ich bekomme das gleiche Verhalten wie Sie sehen. Es sieht so aus, als ob das vorher ohne Auflösung gefragt worden wäre: http://stackoverflow.com/questions/1054730/is-it-possible-to-specify-formatting-options-for-toyaml-in-ruby –

+0

Ja, darin Fall sie 1.8.7 verwenden, habe ich mich nur gefragt, ob es für 1.9.1 funktioniert, es scheint ein Problem ohne eine knappe Antwort zu sein. – jpemberthy

+0

Ich würde gerne die Antwort auf dieses eine wissen. Ich habe vor langer Zeit aufgegeben und schrieb meine eigene "sort the yaml" -Funktion (für 1.8.7). –

Antwort

2

Ich habe in der nicht so fernen Vergangenheit relativ tief in die C-Quelle gegraben. Ich poste nur, um zu bestätigen, was bereits in den Kommentaren gesagt wurde.

Grundsätzlich kann es nicht tun. Die Syck-Optionen gehen irgendwo verloren, bevor sie den YAML-Writer erreichen.

Das beste, das Sie haben können, ist to_yaml_style. Manchmal.

Dies ist das gleiche für 1.8 und 1.9.

+0

Ok, nun habe ich ein kleines Modul geschrieben, um es zu formatieren, nicht so optimal, wie es mit der 'to_yaml' Methode sein sollte ... aber zumindest funktioniert es. Vielen Dank. – jpemberthy