Каковы эквиваленты методов Marshal _load и _dump в Ruby YAML? - PullRequest
0 голосов
/ 18 августа 2011

Я использую стандартную библиотеку YAML, у меня есть объект, который я конвертирую в хеш при выгрузке, и я конвертирую из хэша при загрузке.В Marshal я использовал перегрузку методов _load и _dump, но Marshal не читается человеком = /

Я хочу что-то, что автоматически загружает объекты, например Marshal = /

Примерно так:

class Foo
    def initialize(numbers)
        @numbers = numbers
    end

    def to_yaml
        dump = {}
        @numbers.each {|k, v| dump[k.to_s] = v.to_s}
        dump.to_yaml
    end

    def self.from_yaml(dump)
        dump = YAML.load(dump)
        numbers = {}
        dump.each {|k, v| numbers[k.to_sym] = v.to_sym}
        new(numbers)
    end
end

bar = Foo.new({:one => :uno, :two => :dos, :three => :tres})
bar_yaml = bar.to_yaml
var = Foo.from_yaml(bar_yaml)
p var

Но менее явно

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Если я не пропущу какую-то часть вашего вопроса, похоже, что обернуть методы, рекомендуемые Джулили выше, было бы очень простым решением.

require 'yaml'
class Foo
  def initialize(numbers)
    @numbers = numbers
  end

  def to_yaml
    Yaml::dump(self)
  end

  def self.from_yaml(dump)
    Yaml::load(dump)
  end
end
0 голосов
/ 18 августа 2011

В этом случае вы можете взглянуть на функциональность сериализации Rails ActiveRecord

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Я предполагаю, что вы хотите сохранить YAML в БД после сохранения

0 голосов
/ 18 августа 2011

http://corelib.rubyonrails.org/classes/YAML.html

require "yaml"

test_obj = ["dogs", "cats", "badgers"]

yaml_obj = YAML::dump( test_obj )
                    # -> ---
                         - dogs
                         - cats
                         - badgers
ruby_obj = YAML::load( yaml_obj )
                    # => ["dogs", "cats", "badgers"]
ruby_obj == test_obj
                    # => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...