Yaml有更多选择

时间:2012-10-03 12:04:39

标签: ruby yaml ruby-1.9

根据Phrogz和我对this question的回答,与Ruby 1.9一起使用的yaml库似乎只允许几个选项:indentationline_widthcanonical,(将line_wrap设置为line_width,然后-1。我想使用官方YAML格式允许的其他选项,包括但不限于use_block。是否可以通过小型hack激活其他选项,或者是否有其他选项的Ruby 1.9的替代yaml库?为什么yaml库没有提供其他选项?

1 个答案:

答案 0 :(得分:0)

作为时间解决方案,我找到了ya2yaml。但是这有一些问题。

  1. 它没有阅读能力。这只是为了写作。
  2. 它没有使用!ruby/class ...表示法完全输出不受欢迎的Ruby类。在yaml gem中,这种表示法被完全使用,因此Ruby类保存在ruby-yaml-ruby往返中。
  3. 它对符号使用!ruby/symbol ...符号,与yaml gem中使用的:...符号相比看起来很长。
  4. 它使用? ... \n: yaml语法作为哈希键,与使用yaml gem的更紧凑的哈希表示法相比,它看起来很长。
  5. 问题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