2010-01-28 9 views
6

In base alla documentazione YAML è possibile passare un hash of options al metodo .to_yaml.Come ottenere le opzioni di formattazione per il metodo to_yaml che lavora su Ruby 1.9.1?

Attualmente quando passo le opzioni come suggerito dalla documentazione non funziona, l'hash viene ignorato.

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" 

Ora, passando alcune opzioni:

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" 

Come si può vedere, passando le opzioni non funzionano. Solo le impostazioni predefinite:

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} 

Si tratta di un bug noto? o Funziona attualmente per chiunque usi Ruby 1.9.1?

+0

Ho lo stesso comportamento di quello che vedi. Sembra come se fosse stato chiesto prima senza risoluzione: http://stackoverflow.com/questions/1054730/is-it-possible-to-specify-formatting-options-for-toyaml-in-ruby –

+0

Sì, in quello caso che stessero usando 1.8.7, mi stavo chiedendo se funziona per 1.9.1, sembra essere un problema senza una risposta concisa. – jpemberthy

+0

Mi piacerebbe conoscere la risposta a questo. Ho rinunciato molto tempo fa e ho scritto la mia funzione "sort the yaml" (per 1.8.7). –

risposta

2

Ho scavato relativamente in profondità nella sorgente C per questo in un passato non troppo lontano. Sto postando solo per convalidare ciò che è già stato detto nei commenti.

Fondamentalmente, non può farlo. Le opzioni di Syck si perdono da qualche parte nel processo, prima di colpire lo scrittore YAML.

Il meglio che si può avere è to_yaml_style. A volte.

Questo è lo stesso per 1.8 e 1.9.

+0

Ok, bene ho finito di scrivere un piccolo modulo per ottenerlo formattato, non così ottimale come dovrebbe essere usando il metodo 'to_yaml' ... ma almeno funziona. Grazie. – jpemberthy

Problemi correlati