Saving and restoring with YAML

B

Ben Giddings

Hi all,

I have a quick question about YAML. From the documentation it seems as
though it was designed for, or is well suited to saving/restoring an
object's state, but from looking at it I can't quite tell what the ideal
way of doing this is. Say I have a class that looks like:

class Foo
attr_accessor :bar, :arr, :buzz

def initialize
@bar = true
@arr = []
@buzz = "Here is some string"
end
end


What would the "save" and "load" methods of that class look like if I
wanted to use YAML?

Ben
 
J

Joel VanderWerf

Ben said:
Hi all,

I have a quick question about YAML. From the documentation it seems as
though it was designed for, or is well suited to saving/restoring an
object's state, but from looking at it I can't quite tell what the ideal
way of doing this is. Say I have a class that looks like:

class Foo
attr_accessor :bar, :arr, :buzz

def initialize
@bar = true
@arr = []
@buzz = "Here is some string"
end
end


What would the "save" and "load" methods of that class look like if I
wanted to use YAML?

If you require 'yaml', your class already has #to_yaml, which is a save
method, and you can use YAML.load to get it back:

require 'yaml'
foo = Foo.new
YAML.load(foo.to_yaml)

Maybe I'm misunderstanding your question. Do you mean you want instances
of Foo to always be serialized in YAML format, even when using Marshal?
 
B

Ben Giddings

Joel said:
If you require 'yaml', your class already has #to_yaml, which is a save
method, and you can use YAML.load to get it back:

Ah, ok. I didn't realize that kind of magic happened. Cool. But to_yaml
isn't a "save" method, it's a "to-string" type method, right? So should my
save method be something like

def save
File.open("foo_save.yaml", "w") {|file| file.puts(self.to_yaml) }
end

and load like:

def Foo.load
File.open("foo_save.yaml", "r") {
|file|
YAML.load(file)
}
end

If this is the way to do it, that's great. It would be nice, however, if
a) it were more symmetrical so you could have a YAML.save(file) as well as
a YAML.load(file)
b) YAML.load (and YAML.save) could do the File opening, writing, and
closing as well.

Ben
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top