Согласно документации YAML возможно передать хеш опций к .to_yaml
метод.
В настоящее время, когда я передаю опции, как предложено документацией, она не работает, хеш игнорируется.
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"
Теперь, передача некоторых опций:
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"
Как Вы видите, передавание опций не работает. Только значения по умолчанию:
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}
Действительно ли это - известная ошибка? или Это в настоящее время работает на кого-либо использующего Ruby 1.9.1?
В недалеком прошлом я относительно глубоко копался в источнике C для этого. Я пишу только для того, чтобы подтвердить то, что уже было сказано в комментариях.
В принципе, это невозможно. Опции Syck теряются где-то в процессе, прежде чем попасть в YAML-писатель.
Лучшее, что вы можете получить, это to_yaml_style
. Иногда.
Это то же самое для 1.8 и 1.9.