3

環境: ruby​​1.9.3 , psych(任意のバージョン) ex:

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 }
4

2 に答える 2

4

Psychはこれをサポートしていますが、まったく簡単ではありません。

リテラルスタイルを使用して文字列をダンプする方法についての私自身の質問でこれを調査し始めました。

ハッシュや配列のインライン化など、特定のオブジェクトにさまざまなスタイルを設定するための完全なソリューションを考案することになりました。

私のスクリプトを使用すると、問題の解決策は次のようになります。

o = { 'hash' => StyledYAML.inline('name' => 'Steve', 'foo' => 'bar') }
StyledYAML.dump o, $stdout
于 2012-03-12T22:13:25.420 に答える
0

表現可能な 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]

お役に立てば幸いです、アンドリュー!

于 2012-08-28T08:38:45.897 に答える