Есть ли способ сказать Psych в рубине, чтобы использовать встроенный режим? - PullRequest
3 голосов
/ 04 марта 2012

среда: ruby1.9.3, psy (любая версия), например:

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 ]

4 голосов
/ 13 марта 2012

Psych поддерживает это, хотя это не так просто.

Я начал исследовать это в моем собственном вопросе о том, как вывести строки, используя буквальный стиль .

Я закончил тем, что разработал полное решение для установки различных стилей для конкретных объектов, включая встроенные хэши и массивы.

С моим сценарием решение вашей проблемы было бы:

o = { 'hash' => StyledYAML.inline('name' => 'Steve', 'foo' => 'bar') }
StyledYAML.dump o, $stdout
0 голосов
/ 28 августа 2012

Gem представимый обеспечивает это в удобном стиле ООП.

Учитывая, что у вас есть модель Пользователь:

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]

Надеюсь, это поможет, Эндрю!

...