sábado, 4 de maio de 2013

Psych - Serializando e deserializando objetos em Yaml

Postado por DoctorRu (Will)

Atenção: Obrigatoriamente a classe correspondente ao objeto mencionado no arquivo yml, deve existir em qualquer parte do seu código ou você terá o erro: ArgumentError: undefined class/module ao tentar carregar os dados.



Observe a classe Person indicada na linha 1 do arquivo dados.yml, a mesma existe no código do arquivo init.rb

O arquivo dados.yml será criado automaticamente.

Arquivo dados.yml

---
- !ruby/object:Person
  name: Ruby
  age: 36
- !ruby/object:Person
  name: Will
  age: 39

Arquivo init.rb
require 'Yaml'

class Person
  attr_accessor :name, :age
  def initialize name, age
    @name = name
    @age  = age
  end
end

people = []
people << Person.new("Ruby",36)
people << Person.new("Will",39)

# salvando dados do objeto no arquivo dados.yml
file = File.new("dados.yml","w")
if Psych.dump(people, file)
   puts "Arquivo salvo."
else
   puts "Erro ao salvar"
end
file.close

#lendo dados do arquivo dados.yml para a array
load = Psych.load_file("dados.yml")

load.collect {|instance| print instance.name}

Lembrando que load é uma array que contém um objeto, assim como people, então para exibir manualmente, por exemplo a propriedade nome da primeira instância do objeto use:

puts load[0].name

0 comentários :

Postar um comentário