有没有办法告诉Psych在ruby中使用内联模式?

时间:2012-03-04 16:18:33

标签: ruby yaml psych

环境:ruby1.9.3,psych(任何版本) 例如:

o = { 'hash' => { 'name' => 'Steve', 'foo' => 'bar' } } 
 => {"hash"=>{"name"=>"Steve", "foo"=>"bar"}} 

#is there a inline option?
puts Psych.dump(o,{:inline =>true})

真实结果:

---
hash:
  name: Steve
  foo: bar

期望输出:

--- 
hash: { name: Steve, foo: bar }

2 个答案:

答案 0 :(得分:4)

Psych支持这一点,虽然它根本不是直截了当的。

我已经开始在my own question on how to dump strings using literal style进行研究。

我最终为特定对象设计了a complete solution for setting various styles,包括内联哈希和数组。

使用我的脚本,您的问题的解决方案将是:

o = { 'hash' => StyledYAML.inline('name' => 'Steve', 'foo' => 'bar') }
StyledYAML.dump o, $stdout

答案 1 :(得分:0)

representable gem以方便的OOP风格提供此功能。

考虑到你有一个模型用户:

user.name => "Andrew"
user.age => "over 18"

您现在可以定义一个代表模块来渲染/解析用户实例。

require 'representable/yaml'

module UserRepresenter
  include Representable::YAML

  collection :hash, :style => :flow

  def hash
    [name, age]
  end
end

定义YAML文档后,只需扩展用户实例并进行渲染即可。

user.extend(UserRepresenter).to_yaml
#=> ---
hash: [Andrew, over 18]

希望有帮助,安德鲁!