views:

40

answers:

2

I have a list of accounts I want to save as a YAML file and load it into ruby. Something like this:

Account1
  John Smith
  jsmith
  [email protected]
Account2
  John Doe
  jdoe
  [email protected]

Then I want to get the email address of the person with the name of "John Doe" (for example).

How do I do this?

+1  A: 

You just say require yaml at the top of your file.

Objects get a to_yaml method when you do this. Loading of yaml files is easy to.. Refer to the docs here. http://yaml4r.sourceforge.net/doc/

Gishu
YAML is part of the standard library for 1.9.2 so http://www.ruby-doc.org/ruby-1.9/classes/YAML.html is probably a better reference for 1.9.2 users.
Greg
+1  A: 

Here, you save your yaml objects as Person objects and then when you load them back, they will load into Person objects, making them a lot easier to handle.

First change tweak your yaml file to something like this:

--- 
- !ruby/object:Person 
  name: John Doe
  sname: jdoe
  email: [email protected]
- !ruby/object:Person 
  name: Jane Doe
  sname: jdoe
  email: [email protected]

Now you can load your yaml file into an array of Person objects and then manipulate the array:

FILENAME = 'data.yaml'

class Person 
 attr_accessor :name, :sname, :email
end

require "yaml"
# Will return an array of Person objects.
data = YAML::load(File.open(FILENAME))

# Will print out the first object in the array's name. #=> John Doe
puts data.first.name
agentbanks217