# YAML on 1.8.3 question

**URL:** <https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060>\
**Category:** Ruby\
**Created:** [November 16, 2005, 12:54pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060 "2005-11-16T12:54:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![george.moschovitis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/3bc359/32.png) [@george.moschovitis](https://www.ruby-forum.com/u/george.moschovitis)\
**Post date:** [November 16, 2005, 12:54pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060/1 "2005-11-16T12:54:13Z")

</div>

Hello all,

I have a yaml file that I parse like this

yaml = YAML.parse(yaml\_str)

the ‘yaml\_str’ variable holds the serialized version of an Object.  
Lets say this object hase 2 attributes, ‘title’ and ‘body’.

How can I access them from the ‘yaml’ variable. Ie I want an imaginary  
method ‘lookup’:

yaml.lookup[‘title’] # =\> returns the title value.

I used to do this with a little hack in 1.8.2, this hack does not work  
on 1.8.3, I am looking for a portable way to do this.

thanks in advance for any help,

-g.

---

<div class="post-metadata">

**Author:** ![george.moschovitis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/3bc359/32.png) [@george.moschovitis](https://www.ruby-forum.com/u/george.moschovitis)\
**Post date:** [November 16, 2005, 1:39pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060/2 "2005-11-16T13:39:28Z")

</div>

On Wed, Nov 16, 2005 at 08:53:08PM +0900, George M. wrote:

> method ‘lookup’:
> 
> yaml.lookup[‘title’] # =\> returns the title value.

require ‘yaml’  
o = Object.new  
o.instance\_eval{ @title = “foo”; @body = “bar” }  
s = YAML.dump(o) # =\> “!ruby/object \nbody: bar\ntitle: foo\n”

# for instance

def add\_lookup(obj)  
def obj.lookup(x); instance\_variable\_get “@#{x}” end  
end

o2 = YAML.load(s)  
add\_lookup(o2)  
o2.lookup “title” # =\> “foo”  
o2.lookup “body” # =\> “bar”  
[RUBY\_VERSION, RUBY\_RELEASE\_DATE] # =\> [“1.8.3”, “2005-09-24”]

---

<div class="post-metadata">

**Author:** ![george.moschovitis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/3bc359/32.png) [@george.moschovitis](https://www.ruby-forum.com/u/george.moschovitis)\
**Post date:** [November 16, 2005, 1:45pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060/3 "2005-11-16T13:45:30Z")

</div>

Ehm,

I forgot to tell you that the original object does not exist in the  
current context.

so, o = YAML.load does not yield an object.

-g.

---

<div class="post-metadata">

**Author:** ![george.moschovitis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/3bc359/32.png) [@george.moschovitis](https://www.ruby-forum.com/u/george.moschovitis)\
**Post date:** [November 16, 2005, 1:51pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060/4 "2005-11-16T13:51:32Z")

</div>

Anw,

just show that:

obj = YAML.load(str)  
obj.ivars

does the trick

thanks,  
-g.

---

<div class="post-metadata">

**Author:** ![george.moschovitis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/3bc359/32.png) [@george.moschovitis](https://www.ruby-forum.com/u/george.moschovitis)\
**Post date:** [November 16, 2005, 7:57pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060/5 "2005-11-16T19:57:43Z")

</div>

George M. ha escrito:

> method ‘lookup’:
> 
> yaml.lookup[‘title’] # =\> returns the title value.

Huh? You missed the point.  
YAML just serializes your object, so if your object supports a method  
called title, loading it back in should too. If your object is a hash,  
then you can use a hash syntax. Example:

> irb  
> irb\>class A  
> irb\> attr\_accessor :x  
> irb\> def initialize  
> irb\> @x = 2  
> irb\> end  
> irb\>end  
> irb\>a = A.new  
> irb\>require ‘yaml’  
> irb\>b = YAML.load( YAML.dump(a) )  
> irb\>b.x  
> 2

---

<div class="post-metadata">

**Author:** ![george.moschovitis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/3bc359/32.png) [@george.moschovitis](https://www.ruby-forum.com/u/george.moschovitis)\
**Post date:** [November 17, 2005, 12:36pm UTC](https://www.ruby-forum.com/t/yaml-on-1-8-3-question/48060/6 "2005-11-17T12:36:18Z")

</div>

> Huh? You missed the point.

Probably you missed the point 😉 Read the later emails that explain  
my question in more detail…

-g.
