根据Phrogz和我对this question的回答,与Ruby 1.9一起使用的yaml库似乎只允许几个选项:indentation
,line_width
,canonical
,(将line_wrap
设置为line_width
,然后-1
。我想使用官方YAML格式允许的其他选项,包括但不限于use_block
。是否可以通过小型hack激活其他选项,或者是否有其他选项的Ruby 1.9的替代yaml库?为什么yaml库没有提供其他选项?
答案 0 :(得分:0)
作为时间解决方案,我找到了ya2yaml。但是这有一些问题。
!ruby/class ...
表示法完全输出不受欢迎的Ruby类。在yaml gem中,这种表示法被完全使用,因此Ruby类保存在ruby-yaml-ruby往返中。!ruby/symbol ...
符号,与yaml gem中使用的:...
符号相比看起来很长。? ... \n:
yaml语法作为哈希键,与使用yaml gem的更紧凑的哈希表示法相比,它看起来很长。问题2到目前为止对我来说并不是什么大问题,因此我使用yaml和ya2yaml gems的组合以下列方式来克服问题1,3,4:
require "yaml" # For reading.
require "ya2yaml" # For writing.
class Object
def to_yaml # Method for writing in yaml
ya2yaml.
# Put hash key on a single line if it is a symbol
gsub(/^(\s*)\? !ruby\/symbol (\S+)\s+/, '\1:\2').
# Use symbol literal
gsub(/(?<=\s)!ruby\/symbol /, ':')
end
end